• Bart Van Assche's avatar
    block/mq-deadline: Prioritize high-priority requests · 322cff70
    Bart Van Assche authored
    In addition to reverting commit 7b05bf77 ("Revert "block/mq-deadline:
    Prioritize high-priority requests""), this patch uses 'jiffies' instead
    of ktime_get() in the code for aging lower priority requests.
    
    This patch has been tested as follows:
    
    Measured QD=1/jobs=1 IOPS for nullb with the mq-deadline scheduler.
    Result without and with this patch: 555 K IOPS.
    
    Measured QD=1/jobs=8 IOPS for nullb with the mq-deadline scheduler.
    Result without and with this patch: about 380 K IOPS.
    
    Ran the following script:
    
    set -e
    scriptdir=$(dirname "$0")
    if [ -e /sys/module/scsi_debug ]; then modprobe -r scsi_debug; fi
    modprobe scsi_debug ndelay=1000000 max_queue=16
    sd=''
    while [ -z "$sd" ]; do
      sd=$(basename /sys/bus/pseudo/drivers/scsi_debug/adapter*/host*/target*/*/block/*)
    done
    echo $((100*1000)) > "/sys/block/$sd/queue/iosched/prio_aging_expire"
    if [ -e /sys/fs/cgroup/io.prio.class ]; then
      cd /sys/fs/cgroup
      echo restrict-to-be >io.prio.class
      echo +io > cgroup.subtree_control
    else
      cd /sys/fs/cgroup/blkio/
      echo restrict-to-be >blkio.prio.class
    fi
    echo $$ >cgroup.procs
    mkdir -p hipri
    cd hipri
    if [ -e io.prio.class ]; then
      echo none-to-rt >io.prio.class
    else
      echo none-to-rt >blkio.prio.class
    fi
    { "${scriptdir}/max-iops" -a1 -d32 -j1 -e mq-deadline "/dev/$sd" >& ~/low-pri.txt & }
    echo $$ >cgroup.procs
    "${scriptdir}/max-iops" -a1 -d32 -j1 -e mq-deadline "/dev/$sd" >& ~/hi-pri.txt
    
    Result:
    * 11000 IOPS for the high-priority job
    *    40 IOPS for the low-priority job
    
    If the prio aging expiry time is changed from 100s into 0, the IOPS results
    change into 6712 and 6796 IOPS.
    
    The max-iops script is a script that runs fio with the following arguments:
    --bs=4K --gtod_reduce=1 --ioengine=libaio --ioscheduler=${arg_e} --runtime=60
    --norandommap --rw=read --thread --buffered=0 --numjobs=${arg_j}
    --iodepth=${arg_d} --iodepth_batch_submit=${arg_a}
    --iodepth_batch_complete=$((arg_d / 2)) --name=${positional_argument_1}
    --filename=${positional_argument_1}
    
    Cc: Damien Le Moal <damien.lemoal@wdc.com>
    Cc: Niklas Cassel <Niklas.Cassel@wdc.com>
    Cc: Hannes Reinecke <hare@suse.de>
    Signed-off-by: default avatarBart Van Assche <bvanassche@acm.org>
    Reviewed-by: default avatarDamien Le Moal <damien.lemoal@opensource.wdc.com>
    Link: https://lore.kernel.org/r/20210927220328.1410161-5-bvanassche@acm.org
    [axboe: @latest -> @latest_start]
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    322cff70
mq-deadline.c 31.6 KB