![Linux 软件 RAID 5 使用 NCQ 时性能不佳](https://linux22.com/image/559851/Linux%20%E8%BD%AF%E4%BB%B6%20RAID%205%20%E4%BD%BF%E7%94%A8%20NCQ%20%E6%97%B6%E6%80%A7%E8%83%BD%E4%B8%8D%E4%BD%B3.png)
在修复我的 3 磁盘 RAID 5 设置中的 2 磁盘故障时,我偶然注意到禁用 NCQ(约 90M/秒)的重建速度比启用 NCQ(约 50M/秒)的重建速度更快。运行 bonnie++ 对这两种配置进行基准测试还发现顺序输出块的写入性能明显更好:
- 无 NCQ - 85M/秒,2021ms 延迟
- NCQ - 62M/秒,57118ms 延迟
57秒是不是太长了一点?
我使用内核参数禁用了 NCQlibata.force=noncq并在没有其他配置更改的情况下交替运行两次测试。我还在三个组件磁盘上的分区上运行了 bonnie++,发现在使用和不使用 NCQ 的情况下运行没有显著差异。
这是完整的 bonnie++ 输出:
Version 1.96 ------Sequential Output------ --Sequential Input- --Random-
-Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP
raid5-noncq 24G 435 92 85154 18 53585 9 3409 93 154272 10 297.6 13
Latency 525ms 2021ms 235ms 27652us 158ms 747ms
raid5 24G 372 81 61591 7 60999 9 3130 86 160280 10 296.4 13
Latency 18784us 57118ms 11323ms 59583us 133ms 150ms
sdd-ext4-noncq 24G 513 97 73428 8 33118 4 3324 91 90266 5 170.6 1
Latency 17985us 503ms 1805ms 30066us 15626us 1341ms
sdd-ext4 24G 499 97 71223 8 33015 4 3326 95 95342 5 276.0 3
Latency 17689us 1124ms 1345ms 11202us 18187us 1213ms
sde-ext4-noncq 24G 517 97 48200 5 22385 3 3555 94 62578 3 174.3 1
Latency 22423us 1609ms 2296ms 13131us 22446us 1960ms
sde-ext4 24G 491 97 47942 5 22317 3 3281 95 62669 3 257.1 3
Latency 20081us 2860ms 2434ms 12207us 27984us 990ms
sdb-ext4-nonc-2 24G 976 99 81552 9 47557 6 3514 95 146167 8 208.6 7
Latency 13004us 227ms 758ms 40575us 59198us 219ms
sdb-ext4 24G 1014 99 79603 8 48778 6 3598 97 146225 8 310.1 10
Latency 10686us 659ms 400ms 20054us 67295us 226ms
------Sequential Create------ --------Random Create--------
-Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
files:max:min /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP
raid5-noncq 16 8997 38 +++++ +++ 18071 22 18097 75 +++++ +++ +++++ +++
Latency 25974us 695us 738us 123us 21us 43us
raid5 16 4227 21 +++++ +++ 15053 25 11634 58 +++++ +++ 20341 33
Latency 26221us 735us 735us 172us 15us 55us
sdd-ext4-noncq 16 10453 53 +++++ +++ +++++ +++ 16324 82 +++++ +++ +++++ +++
Latency 245us 1126us 895us 204us 30us 46us
sdd-ext4 16 15339 51 +++++ +++ +++++ +++ 23763 77 +++++ +++ +++++ +++
Latency 192us 957us 641us 115us 94us 101us
sde-ext4-noncq 16 12825 41 +++++ +++ +++++ +++ 21636 68 +++++ +++ +++++ +++
Latency 452us 662us 642us 115us 20us 41us
sde-ext4 16 13185 45 +++++ +++ +++++ +++ 23033 77 +++++ +++ +++++ +++
Latency 136us 634us 655us 118us 28us 41us
sdb-ext4-noncq 16 4657 78 +++++ +++ +++++ +++ 6912 97 +++++ +++ 23160 95
Latency 89592us 180us 115us 348us 46us 131us
sdb-ext4 16 5061 75 +++++ +++ +++++ +++ 7011 97 +++++ +++ 23400 95
Latency 12010us 110us 119us 633us 30us 143us
答案1
感谢您更新问题!看来 RAID5 的 NCQ 测试只是暴露了 NCQ 的执行过程并不知道数据必须如何写入磁盘,即使是在软件中(根据我的经验,这是 IO 调度程序和硬件 raid 的一个常见问题,http://blog.nexcess.net/2010/11/07/changing-your-linux-io-scheduler/)。
从: https://raid.wiki.kernel.org/index.php/Performance
控制器的 NCQ 可能会干扰 Linux 内核优化
我认为其他测试确实证实了 NCQ 在直接与磁盘通信时可以正常工作,因为它们要么显示性能提升,要么接近无 NCQ 测试的性能。
关于 57s 值,它只是您拥有的 IO 缓冲区数量和您正在使用的调度程序的产物。如果您担心 IO 系统的交互式响应能力,您可能应该研究不同的调度程序(请参阅:http://blog.nexcess.net/2010/11/07/changing-your-linux-io-scheduler/)。