use*_*394 11 linux scheduler linux-kernel
我们正在为少数主机编写一个高度并发的C++软件,所有主机都配备了一个ST9500620NS作为系统驱动器和一个用于数据的Intel P3700 NVMe Gen3 PCIe SSD卡.为了更好地理解系统调试我的软件,我在系统中挖了两个(两个E5-2620 v2 @ 2.10GHz CPU,32GB RAM,运行CentOS 7.0)并且惊讶地发现以下内容:
[root@sc2u0n0 ~]# cat /sys/block/nvme0n1/queue/scheduler
none
Run Code Online (Sandbox Code Playgroud)
这与我在选择正确的Linux I/O调度程序方面所学到的一切相矛盾,例如来自kernel.org上的官方文档.
我知道NVMe是一个新的孩子,所以现在我不会触及现有的调度程序设置.但我真的对安装人员输入的"无"感到奇怪.如果有人提示我可以在哪里找到更多信息或分享您的发现,我将不胜感激.到目前为止,我花了很多时间用谷歌搜索而没有找到任何具体内容.
she*_*idp 15
Sanne在评论中给出的答案是正确的:
"原因是NVMe绕过了调度程序.你没有使用"noop"实现:你没有使用调度程序."
noop与none不同,noop仍然执行块合并(除非你用nomerges禁用它)
如果使用nvme设备,或者在编译时或启动时启用"scsi_mod.use_blk_mq = Y",则会绕过传统请求队列及其关联的调度程序.
blk-mq的调度程序可能会在将来开发.
"none"(又名"noop")是用于此设备的正确调度程序.
I/O调度程序主要用于排队有限的较慢存储设备(例如,单机械硬盘驱动器) - I/O调度程序的目的是重新排序I/O请求以获得更早期服务的更重要的请求.对于内部队列非常大且服务速度非常快的设备(如PCIe SSD!),I/O调度程序对您没有任何好处; 你最好立即向设备提交所有请求.
| 归档时间: |
|
| 查看次数: |
10192 次 |
| 最近记录: |