1

我以 root 用户身份使用以下命令为 NVMe SSD 设备启用 Linux 内核轮询。

# echo 1 > /sys/block/nvme2n1/queue/io_poll

我收到以下错误:bash: echo: write error: Invalid argument

操作系统详情:Ubuntu 16.04,Linux 内核 5.0.0+。

任何指针?

命令参考:https ://itpeernetwork.intel.com/tuning-performance-intel-optane-ssds-linux-operating-systems/#gs.1yu3o1

https://lwn.net/Articles/663543/

4

2 回答 2

1

Nikhil在 Linux 块邮件列表中发布了“为 NVMe SSD 启用 io_poll 时出错” ,并得到了Keith Busch 的回复

请务必在 nvme 驱动程序中打开轮询队列。默认情况下没有。[原文如此] 启用它们的内核参数是:

nvme.poll_queues=X

其中“X”是轮询队列的数量。我建议每个 CPU 插槽至少 1 个,但越多越好。

Nikhil 的回复来看,在进行上述更改后,似乎io_poll可以设置为 1。

对于上下文,浏览内核源代码可以看到5.0 内核引入了 NVMepoll_queues选项(在Kernel Newbies 5.0 内核更改日志的存储部分也提到了这一点)。此外,5.0 提交默认poll_queues为 0(在 2019 年末撰写本文时,我们目前已达到5.5-rc2,情况仍然如此)。

此外,看起来 Frank Ober(他以@FrankO 的身份发布了这个问题的答案)在“Polled io for Linux kernel 5.x” Linux 块邮件列表线程中询问了“为什么要进行更改”,并且还收到了来自基思

原始轮询实现共享产生中断的资源。这会阻止它尽可能快地运行,因此现在使用专用的轮询队列。

于 2019-12-19T06:31:28.130 回答
0

您引用的这篇博客诞生于 4.x 内核时代,从那时起 io_uring IO 提交概念就出现在 5.x 内核时间范围内。

请阅读有关 io_uring 的文档: https ://kernel.dk/io_uring.pdf

您应该使用以下命令测试 Optane 媒体驱动器:ioengine=io_uring

如果您想使用 bio_poll 或不使用 hipri,请使用或不使用 hipri。

就传递给 fio 而言,这是应该起作用的东西:

[global]
direct=1
filename=/dev/nvme1n1
log_avg_msec=500
time_based
percentile_list=1:5:10:20:30:40:50:60:70:80:90:95:99:99.5:99.9:99.95:99.99:99.999:99.9999


[rand-read-4k-qd1]
runtime=120
bs=4K
iodepth=1
numjobs=1
cpus_allowed=0
ioengine=io_uring
hipri
rw=randread

uname -a 5.4.1-1.el8.elrepo.x86_64

CentOS 8

玩得开心,弗兰克·奥伯

于 2019-12-16T17:40:07.027 回答