Skip to contentSkip to conversation

runtime change of use_blk_mq ?

DISCUSSION Arkadiusz Miskiewicz 2 participants 2 messages Aug 10, 2016 SCSI

lore
Share & tools
lore
#0 lore raw

Hi.

Is runtime enabling/disabling of blk-mq supported?

Doesn't seem to work here:

4.1.30 (but the same thing on 4.6.3):

# zcat /proc/config.gz |grep _MQ_DEF
# CONFIG_SCSI_MQ_DEFAULT is not set
# CONFIG_DM_MQ_DEFAULT is not set
# cat  /sys/module/scsi_mod/parameters/use_blk_mq
N
# grep "" /sys/block/sd*/queue/scheduler
/sys/block/sda/queue/scheduler:noop [deadline] cfq
/sys/block/sdb/queue/scheduler:noop [deadline] cfq
/sys/block/sdc/queue/scheduler:noop [deadline] cfq
/sys/block/sdd/queue/scheduler:noop [deadline] cfq
/sys/block/sde/queue/scheduler:noop [deadline] cfq
/sys/block/sdf/queue/scheduler:noop [deadline] cfq
/sys/block/sdg/queue/scheduler:noop [deadline] cfq
# echo Y > /sys/module/scsi_mod/parameters/use_blk_mq
# cat  /sys/module/scsi_mod/parameters/use_blk_mq
Y
# grep "" /sys/block/sd*/queue/scheduler
/sys/block/sda/queue/scheduler:noop [deadline] cfq
/sys/block/sdb/queue/scheduler:noop [deadline] cfq
/sys/block/sdc/queue/scheduler:noop [deadline] cfq
/sys/block/sdd/queue/scheduler:noop [deadline] cfq
/sys/block/sde/queue/scheduler:noop [deadline] cfq
/sys/block/sdf/queue/scheduler:noop [deadline] cfq
/sys/block/sdg/queue/scheduler:noop [deadline] cfq

so use_blk_mq is Y but queue/scheduler for existing devices still contains I/O schedulers and shows deadline as active. Looks like blk-mq is not active.

Signature · 1 line
Arkadiusz Miśkiewicz, arekm / ( maven.pl | pld-linux.org )
#1 lore raw
Quoted 31 lines · Arkadiusz Miskiewicz

Is runtime enabling/disabling of blk-mq supported?

Doesn't seem to work here:

4.1.30 (but the same thing on 4.6.3):

# zcat /proc/config.gz |grep _MQ_DEF
# CONFIG_SCSI_MQ_DEFAULT is not set
# CONFIG_DM_MQ_DEFAULT is not set
# cat  /sys/module/scsi_mod/parameters/use_blk_mq
N
# grep "" /sys/block/sd*/queue/scheduler
/sys/block/sda/queue/scheduler:noop [deadline] cfq
/sys/block/sdb/queue/scheduler:noop [deadline] cfq
/sys/block/sdc/queue/scheduler:noop [deadline] cfq
/sys/block/sdd/queue/scheduler:noop [deadline] cfq
/sys/block/sde/queue/scheduler:noop [deadline] cfq
/sys/block/sdf/queue/scheduler:noop [deadline] cfq
/sys/block/sdg/queue/scheduler:noop [deadline] cfq
# echo Y > /sys/module/scsi_mod/parameters/use_blk_mq
# cat  /sys/module/scsi_mod/parameters/use_blk_mq
Y
# grep "" /sys/block/sd*/queue/scheduler
/sys/block/sda/queue/scheduler:noop [deadline] cfq
/sys/block/sdb/queue/scheduler:noop [deadline] cfq
/sys/block/sdc/queue/scheduler:noop [deadline] cfq
/sys/block/sdd/queue/scheduler:noop [deadline] cfq
/sys/block/sde/queue/scheduler:noop [deadline] cfq
/sys/block/sdf/queue/scheduler:noop [deadline] cfq
/sys/block/sdg/queue/scheduler:noop [deadline] cfq
Quoted 2 lines

so use_blk_mq is Y but queue/scheduler for existing devices still contains I/O schedulers and shows deadline as active. Looks like blk-mq is not active.

Hello Arkadiusz,

From drivers/scsi/hosts.c, scsi_host_alloc():

shost->use_blk_mq = scsi_use_blk_mq && !shost->hostt->disable_blk_mq;

In other words, if you want the change of /sys/module/scsi_mod/parameters/use_blk_mq to become effective, you will have to trigger SCSI host removal and re-add. For a boot drive this is not possible. But when using a SCSI-over-network driver unloading and reloading the appropriate SCSI LLD should be sufficient. Some SCSI LLD drivers, e.g. ib_srp, allow to log out and relogin without unloading and reloading the kernel driver.

Bart.