echo:写入错误:为NVMe SSD设置io_poll时参数无效

时间:2019-03-18 14:39:22

标签: linux linux-kernel ubuntu-16.04 sysfs nvme

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

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

我收到以下错误: bash:回显:写入错误:无效的参数

操作系统详细信息: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/

2 个答案:

答案 0 :(得分:0)

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

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

您应该使用以下方法测试Optane介质驱动器: ioengine = io_uring

无论是否要使用bio_poll,无论是否带有河马。

在传递给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

玩得开心, 弗兰克·奥伯

答案 1 :(得分:0)

Nikhil将"Error while enabling io_poll for NVMe SSD"发布到Linux阻止邮件列表中,并得到了reply from Keith Busch

  

确保在nvme驱动程序中打开轮询队列。没有了   默认情况下。 [sic]启用它们的内核参数是:

nvme.poll_queues=X
     

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

Nikhil's reply的外观来看,完成上述更改后,看来io_poll可以设置为1。

对于上下文,可以通过5.0 kernel introduced the NVMe poll_queues option浏览内核源代码(在storage section of Kernel Newbies 5.0 kernel changelog中也提到了这一点)。此外,5.0 commit defaulted poll_queues in to 0(在撰写本文时(2019年末),目前5.5-rc2 and this is still the case为止。)

此外,在"Polled io for Linux kernel 5.x" Linux阻止邮件列表线程中,弗兰克·奥伯(Frank Ober,他以@FrankO张贴了对此问题的答案)看上去很像,并且还收到了{{3} }:

  

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