Linux-Kernel

如何為 NVMe 禁用 blk-mq 並使用 CFQ、deadline、noop?

  • November 27, 2018

出於測試目的,我想將CFQdeadlinenoop用於 NVMe 驅動器。這可能嗎?

"scsi_mod.use_blk_mq=1"通過添加到 grub 引導,我可以將 blk-mq 用於 SATA SSD (請參閱:如何啟用和使用 BFQ 調度程序?)。

但是還沒有找到一種方法對 NVMe 驅動器進行反向操作,以允許它們使用非 blk-mq 調度程序。

/dev/sda <– SCSI 設備

/dev/nvme0n1 <– NVMe 設備

NVMe 驅動程序從核心版本 3.19 開始支持 blk-mq。它不允許通過使用 insmod 參數或 grub 中的核心引導選項來關閉 blk-mq。

$ modinfo -p nvme
use_threaded_interrupts: (int)
use_cmb_sqes:use controller's memory buffer for I/O SQes (bool)
max_host_mem_size_mb:Maximum Host Memory Buffer (HMB) size per controller (in MiB) (uint)
sgl_threshold:Use SGLs when average request segment size is larger or equal to this size. Use 0 to disable SGLs. (uint)
io_queue_depth:set io queue depth, should &gt;= 2

如果要禁用 blk-mq,可以從http://git.infradead.org/users/willy/linux-nvme.git下載舊的 nvme 驅動程序並重新編譯核心模組。但是,這不允許使案例如 CFQ。3.19 中的相關更改說明之前的 NVMe 驅動程序“

$$ implemented $$隊列邏輯本身”,它沒有使用單隊列塊層。還有其他這種塊設備的例子,例如 Linuxmdraid設備。


以下來源在當時是正確的,它們包括一些有用的註釋和連結。然而它們已經過時了,因為它們是在引入 blk-mq IO 調度程序之前編寫的,包括 BFQ(BFQ 被接受為 Linux 4.12 的一部分)。

https://www.thomas-krenn.com/en/wiki/Linux_Multi-Queue_Block_IO_Queueing_Mechanism_(blk-mq)

來自https://www.thomas-krenn.com的Linux 儲存圖。
https://www.thomas-krenn.com/de/wikiDE/images/d/da/Linux-io-stack-diagram_v1.0.png

引用自:https://unix.stackexchange.com/questions/426377