Die meisten von mir verwalteten Linux-Systeme verfügen über Hardware-RAID-Controller (hauptsächlich HP Smart Array ). Sie laufen alle mit RHEL oder CentOS.
Ich suche nach realistischen Tunables, um die Leistung für Setups zu optimieren, die Hardware-RAID-Controller mit SAS-Datenträgern (Smart Array, Perc, LSI usw.) und batteriegepuffertem oder flashgepuffertem Cache enthalten. Angenommen, RAID 1 + 0 und mehrere Spindeln (4 + Festplatten).
Ich verbringe viel Zeit damit, Linux-Netzwerkeinstellungen für Anwendungen mit geringer Latenz und für Finanzhandelsanwendungen zu optimieren. Viele dieser Optionen sind jedoch gut dokumentiert (Ändern der Sende- / Empfangspuffer, Ändern der TCP-Fenstereinstellungen usw.). Was machen Ingenieure auf der Speicherseite?
In der Vergangenheit habe ich Änderungen am E / A-Planungsaufzug vorgenommen und mich vor kurzem für den Planer deadline
und entschieden noop
, um die Leistung in meinen Anwendungen zu verbessern. Mit dem Fortschritt der RHEL-Versionen ist mir auch aufgefallen, dass sich auch die kompilierten Standardeinstellungen für SCSI- und CCISS-Blockgeräte geändert haben. Dies hat sich im Laufe der Zeit auf die empfohlenen Einstellungen des Speichersubsystems ausgewirkt. Es ist jedoch eine Weile her, dass ich klare Empfehlungen gesehen habe. Und ich weiß, dass die Standardeinstellungen des Betriebssystems nicht optimal sind. Beispielsweise scheint der Standard-Vorauslesepuffer von 128 KB für eine Bereitstellung auf Hardware der Serverklasse extrem klein zu sein.
In den folgenden Artikeln werden die Auswirkungen auf die Leistung beim Ändern der Werte für Read-Ahead- Cache und nr_requests in den Blockwarteschlangen erläutert .
http://zackreed.me/articles/54-hp-smart-array-p410-controller-tuning
http://www.overclock.net/t/515068/tuning-a-hp-smart-array-p400-with -linux-why-tuning-really-matters
http://yoshinorimatsunobu.blogspot.com/2009/04/linux-io-scheduler-queue-size-and.html
Dies sind beispielsweise Änderungsvorschläge für einen HP Smart Array RAID-Controller:
echo "noop" > /sys/block/cciss\!c0d0/queue/scheduler
blockdev --setra 65536 /dev/cciss/c0d0
echo 512 > /sys/block/cciss\!c0d0/queue/nr_requests
echo 2048 > /sys/block/cciss\!c0d0/queue/read_ahead_kb
Was kann noch zuverlässig optimiert werden, um die Speicherleistung zu verbessern?
Ich suche speziell nach Sysctl- und Sysfs-Optionen in Produktionsszenarien.
Vor allem hängt alles von Ihrer Arbeitsbelastung ab.
read_ahead_kb
kann Ihnen helfen, wenn es wirklich hilfreich ist, viele Daten aus einer Datei vorab zu lesen, beispielsweise beim Streamen von Videos. Manchmal kann es dir sehr weh tun. Ja, die Standardeinstellung von 128 KB kann klein klingen, aber bei genügend Parallelität klingt es groß! Bei einem Server wie einem Videokodierungsserver, der nur die Videos von einem Format in ein anderes konvertiert, ist eine Optimierung möglicherweise sehr sinnvoll.nr_requests
Wird der RAID-Controller gestört, kann er leicht überflutet werden, was wiederum die Leistung beeinträchtigt.In der realen Welt müssen Sie die Latenzen beobachten . Wenn Sie mit dem SAN verbunden sind, schauen Sie sich mit oder was auch immer Sie verwenden möchten, um zu sehen
iostat
,sar
ob die Zeiten für die E / A-Anforderungsservices steil sind. Dies hilft natürlich auch bei lokalen Datenträgern: Wenn die Latenzen sehr hoch sind, sollten Sie die Einstellungen Ihres E / A-Aufzugs verringern, indem Sie max_requests und andere Einstellungen herabstufen.quelle
FYI
read_ahead_kb
undblockdev --setra
sind nur verschiedene Möglichkeiten, um die gleiche Einstellung mit verschiedenen Einheiten (kB vs Sektoren) festzulegen:Also die
in Ihrem Beispiel hat keine Wirkung.
quelle