Schlechte Leistung der Linux-Software RAID 5 mit NCQ

7

Während ich einen 2-Festplatten-Fehler in meinem 3-Festplatten-RAID 5-Setup behoben habe, stellte ich fest, dass die Rekonstruktion bei deaktiviertem NCQ (~ 90 M / s) schneller war als bei aktiviertem NCQ (~ 50 M / s). Das Ausführen von bonnie ++ zum Benchmarking der beiden Konfigurationen ergab auch eine deutlich bessere Schreibleistung für den sequentiellen Ausgabeblock:

  • kein NCQ - 85 M / s, 2021 ms Latenz
  • NCQ - 62 M / s, 57118 ms Latenz

Sind 57 Sekunden nicht ein bisschen zu lang?

Ich habe NCQ mit dem Kernel-Parameter libata.force = noncq deaktiviert und die Tests zweimal abwechselnd ohne weitere Konfigurationsänderungen ausgeführt. Ich habe auch bonnie ++ auf Partitionen auf den drei Komponentenfestplatten ausgeführt und keine signifikanten Unterschiede zwischen der Ausführung mit oder ohne NCQ festgestellt.

Hier ist die vollständige Ausgabe von 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
Owen Fraser-Green
quelle
1
Das ist, gelinde gesagt, ziemlich seltsam; Ich hätte gedacht, dass die RAID-Rekonstruktion linear ist und Suchzeiten keine Auswirkungen haben. Andererseits können die linearen Operationen abhängig von Ihrer Antriebsrotation und Schnittstellengeschwindigkeit schneller ungepuffert (kein NCQ) als gepuffert (mit NCQ) sein, vorausgesetzt, mein Verständnis von NCQ ist korrekt. Hat bonnie++einen linearen Modus? Haben Sie versucht, ddmit / ohne NCQ zu steuern?
Andrew
Ja, kannst du die gesamte Ausgabe von bonnie ++ posten? Stellen Sie außerdem sicher, dass Sie es mit ausreichend großen Testgrößen verwenden, damit es nicht irgendwo gepuffert wird.
Polynom
Polynom, ich habe die bonnie ++ Ausgabe hinzugefügt. Der Server verfügt über 12 GB RAM und ist nur ein normaler integrierter SATA-Controller. Ich denke, Tests mit einer Dateigröße von 24 GB sollten den Cache zerstören. Die Ergebnisse sind bei wiederholten Läufen konsistent.
Owen Fraser-Green
Andrew, ich denke der "Sequential Output Block" -Test ist linear. Es schreibt eine 24G-Datei. Ich bin mir nicht sicher, ob ich die Bedeutung von "Latenz" in diesem Zusammenhang verstehe, aber ich glaube nicht, dass dies bedeutet, Zeit zu suchen, da in diesem Test nicht gesucht wird.
Owen Fraser-Green

Antworten:

2

Vielen Dank für die Aktualisierung der Frage! Es scheint, als würde der NCQ-Test mit dem RAID5 nur zeigen, dass der NCQ ignorant durchgeführt wird, wie die Daten auf die Festplatten geschrieben werden müssen, selbst wenn sie sich in Software befinden (dies ist meiner Erfahrung nach ein sehr häufiges Problem bei E / A-Schedulern und Hardware-Raids , http://blog.nexcess.net/2010/11/07/changing-your-linux-io-scheduler/ ).

Von: https://raid.wiki.kernel.org/index.php/Performance

NCQ des Controllers kann die Linux-Kernel-Optimierungen stören

Ich denke, die anderen Tests bestätigen, dass NCQ funktioniert, wenn direkt mit der Festplatte gesprochen wird, da sie entweder eine Leistungssteigerung zeigen oder in der Nähe sind, da dies keinen Unterschied zu den noNCQ-Tests macht.

In Bezug auf den 57s-Wert ist dies nur ein Artefakt davon, wie viel E / A-Puffer Sie haben und welchen Scehduler Sie verwenden. Wenn Sie sich Sorgen über die interaktive Reaktionsfähigkeit des E / A-Systems machen, sollten Sie wahrscheinlich einen anderen Scehduler untersuchen (siehe: http://blog.nexcess.net/2010/11/07/changing-your-linux-io-scheduler/ ).

Polynom
quelle
Vielen Dank. Am Ende habe ich NCQ einfach deaktiviert. Es schien keinen messbaren Unterschied zu den anderen Festplatten in der Maschine zu geben, und nach dem Ersetzen der hoffnungslosen Western Digital WD15EARS, die sde war, beträgt das Blocklesen jetzt respektablere 200 M / s (dies sind alles absichtlich langsamere, aber daher leise Festplatten). .
Owen Fraser-Green
1
Es ist auch möglich, NCQ pro Festplatte zu deaktivieren, indem das Attribut queue_depth in sysfs festgelegt wird.
Baruch sogar
Echo 1> / sys / block / sda / device / queue_depth
Giovanni Toraldo