• Bart Van Assche's avatar
    scsi: ufs: Implement polling support · eaab9b57
    Bart Van Assche authored
    The time spent in io_schedule() and also the interrupt latency are
    significant when submitting direct I/O to a UFS device. Hence this patch
    that implements polling support. User space software can enable polling by
    passing the RWF_HIPRI flag to the preadv2() system call or the
    IORING_SETUP_IOPOLL flag to the io_uring interface.
    
    Although the block layer supports to partition the tag space for
    interrupt-based completions (HCTX_TYPE_DEFAULT) purposes and polling
    (HCTX_TYPE_POLL), the choice has been made to use the same hardware queue
    for both hctx types because partitioning the tag space would negatively
    affect performance.
    
    On my test setup this patch increases IOPS from 2736 to 22000 (8x) for the
    following test:
    
    for hipri in 0 1; do
        fio --ioengine=io_uring --iodepth=1 --rw=randread \
        --runtime=60 --time_based=1 --direct=1 --name=qd1 \
        --filename=/dev/block/sda --ioscheduler=none --gtod_reduce=1 \
        --norandommap --hipri=$hipri
    done
    
    Link: https://lore.kernel.org/r/20211203231950.193369-18-bvanassche@acm.orgTested-by: default avatarBean Huo <beanhuo@micron.com>
    Reviewed-by: default avatarBean Huo <beanhuo@micron.com>
    Signed-off-by: default avatarBart Van Assche <bvanassche@acm.org>
    Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
    eaab9b57
ufshcd.c 264 KB