如何為 NVMe 禁用 blk-mq 並使用 CFQ、deadline、noop?
出於測試目的,我想將
CFQ
、deadline
和noop
用於 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 >= 2
如果要禁用 blk-mq,可以從http://git.infradead.org/users/willy/linux-nvme.git下載舊的 nvme 驅動程序並重新編譯核心模組。但是,這不允許使案例如 CFQ。3.19 中的相關更改說明之前的 NVMe 驅動程序“
$$ implemented $$隊列邏輯本身”,它沒有使用單隊列塊層。還有其他這種塊設備的例子,例如 Linux
mdraid
設備。以下來源在當時是正確的,它們包括一些有用的註釋和連結。然而它們已經過時了,因為它們是在引入 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