Skip to content
  • Chaitanya Kulkarni's avatar
    nvme-pci: add SGL support · a7a7cbe3
    Chaitanya Kulkarni authored
    
    
    This adds SGL support for NVMe PCIe driver, based on an earlier patch
    from Rajiv Shanmugam Madeswaran <smrajiv15 at gmail.com>. This patch
    refactors the original code and adds new module parameter sgl_threshold
    to determine whether to use SGL or PRP for IOs.
    
    The usage of SGLs is controlled by the sgl_threshold module parameter,
    which allows to conditionally use SGLs if average request segment
    size (avg_seg_size) is greater than sgl_threshold. In the original patch,
    the decision of using SGLs was dependent only on the IO size,
    with the new approach we consider not only IO size but also the
    number of physical segments present in the IO.
    
    We calculate avg_seg_size based on request payload bytes and number
    of physical segments present in the request.
    
    For e.g.:-
    
    1. blk_rq_nr_phys_segments = 2 blk_rq_payload_bytes = 8k
    avg_seg_size = 4K use sgl if avg_seg_size >= sgl_threshold.
    
    2. blk_rq_nr_phys_segments = 2 blk_rq_payload_bytes = 64k
    avg_seg_size = 32K use sgl if avg_seg_size >= sgl_threshold.
    
    3. blk_rq_nr_phys_segments = 16 blk_rq_payload_bytes = 64k
    avg_seg_size = 4K use sgl if avg_seg_size >= sgl_threshold.
    
    Signed-off-by: default avatarChaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
    Reviewed-by: default avatarKeith Busch <keith.busch@intel.com>
    Reviewed-by: default avatarSagi Grimberg <sagi@grimberg.me>
    Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
    a7a7cbe3