我以root用户身份使用以下命令来为NVMe SSD设备启用Linux内核轮询。
#echo 1> / sys / block / nvme2n1 / queue / io_poll
我收到以下错误: bash:回显:写入错误:无效的参数
操作系统详细信息:Ubuntu 16.04,Linux内核5.0.0 +。
有指针吗?
答案 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} }:
原始轮询实现共享生成的资源 中断。这会阻止它尽可能快地运行,因此 现在使用专用的轮询队列。