Konfiguration des Linux-Kernels fĂŒr GlusterFS

Die Übersetzung des Artikels wurde im Vorfeld des Starts des Kurses vorbereitet „Administrator Linux. Professionell“.

Konfiguration des Linux-Kernels fĂŒr GlusterFS

Es tauchen regelmĂ€ĂŸig Fragen zu den Empfehlungen von Gluster bezĂŒglich der Kernelkonfiguration auf und ob diese notwendig sind.

Eine solche Notwendigkeit tritt selten auf. Bei den meisten Arbeitslasten funktioniert der Kernel sehr gut. Es gibt jedoch auch eine Kehrseite. Historisch gesehen verbraucht der Linux-Kernel bereitwillig viel Speicher, wenn man ihm die Möglichkeit dazu gibt, unter anderem fĂŒr das Caching als primĂ€ren Weg zur Leistungssteigerung.

In den meisten FĂ€llen funktioniert es hervorragend, kann jedoch bei hoher Auslastung zu Problemen fĂŒhren.

Wir haben viel Erfahrung mit speicherintensiven Systemen wie CAD, EDA und Ă€hnlichem, die bei hoher Auslastung anfingen, zu ruckeln. Manchmal hatten wir auch Probleme mit Gluster. Nachdem wir mehrere Tage lang den verwendeten Speicher und die Wartezeiten der Festplatten genau beobachtet hatten, erfuhren wir von Überlastungen, enormen iowait, Kernel-Fehlern (Kernel Oops), HĂ€ngern usw.

Dieser Artikel ist das Ergebnis vieler Experimente zur Anpassung von Parametern, die in verschiedenen Situationen durchgefĂŒhrt wurden. Dank dieser Parameter hat sich nicht nur die ReaktionsfĂ€higkeit im Allgemeinen verbessert, sondern auch die StabilitĂ€t des Clusters erheblich gesteigert.

Wenn es um die Konfiguration des Speichers geht, sollte man zunÀchst das virtuelle Speichersystem (VM, virtual memory) betrachten, das viele Optionen bietet, die verwirrend sein können.

vm.swappiness

Parameter vm.swappiness bestimmt, wie stark der Kernel das Swapping im Vergleich zum Arbeitsspeicher nutzt. Im Quellcode ist er auch als „tendency to steal mapped memory“ (Neigung, zugeordneten Speicher zu stehlen) definiert. Ein hoher Swappiness-Wert bedeutet, dass der Kernel eher geneigt ist, zugeordnete Seiten auszulagern. Ein niedriger Wert bedeutet das Gegenteil: Der Kernel wird weniger Seiten aus dem Speicher auslagern. Mit anderen Worten, je höher der Wert vm.swappiness, desto mehr wird das System Swap verwenden.

Ein hohes Maß an Swapping ist unerwĂŒnscht, da große Datenblöcke in den Arbeitsspeicher geladen und ausgelagert werden. Viele behaupten, der Swappiness-Wert sollte hoch sein, aber nach meiner Erfahrung fĂŒhrt die Einstellung auf „0“ zu einer Leistungssteigerung.

Weitere Informationen sind hier zu finden – lwn.net/Articles/100978

Diese Einstellungen sollten jedoch mit Vorsicht angewendet werden und nur nach dem Testen der spezifischen Anwendung. FĂŒr stark belastete Streaming-Anwendungen sollte dieser Parameter auf „0“ gesetzt werden. Bei der Änderung auf „0“ verbessert sich die SystemreaktionsfĂ€higkeit.

vm.vfs_cache_pressure

Dieser Parameter steuert den vom Kernel verwendeten Speicher zur Zwischenspeicherung von Verzeichnisobjekten und Indexbeschreibungen (dentry und inode).

Bei einem Standardwert von 100 versucht der Kernel, den dentry- und inode-Cache „fair“ im VerhĂ€ltnis zum pagecache und swapcache freizugeben. Eine Verringerung von vfs_cache_pressure fĂŒhrt dazu, dass der Kernel dentry und inode-Caches beibehĂ€lt. Wenn der Wert auf „0“ gesetzt ist, wird der Kernel den dentry- und inode-Cache niemals aufgrund von Speichermangel (memory pressure) löschen, was leicht zu einem Out-of-Memory-Fehler fĂŒhren kann. Eine Erhöhung der vfs_cache_pressure ĂŒber 100 fĂŒhrt dazu, dass der Kernel die Auslagerung von dentry und inode priorisiert.

Bei der Verwendung von GlusterFS können viele Benutzer mit großen Datenmengen und vielen kleinen Dateien leicht eine erhebliche Menge an RAM auf dem Server aufgrund der Zwischenspeicherung von inode/dentry nutzen, was die Leistung beeintrĂ€chtigen kann, da der Kernel gezwungen ist, Datenstrukturen in einem System mit 40 GB RAM zu verarbeiten. Die Einstellung dieses Wertes ĂŒber 100 hat vielen Benutzern geholfen, eine gerechtere Zwischenspeicherung zu erreichen und die ReaktionsfĂ€higkeit des Kernels zu verbessern.

vm.dirty_background_ratio und vm.dirty_ratio

Der erste Parameter (vm.dirty_background_ratio) bestimmt den Prozentsatz des Speichers mit schmutzigen Seiten, ab dem ein Hintergrund-Flush schmutziger Seiten auf die Festplatte gestartet werden muss. Solange dieser Prozentsatz nicht erreicht ist, werden die Seiten nicht auf die Festplatte geschrieben. Wenn der Flush beginnt, geschieht dies im Hintergrund, ohne die laufenden Prozesse zu unterbrechen.

Der zweite Parameter (vm.dirty_ratio) bestimmt den Prozentsatz des Speichers, der von schmutzigen Seiten verwendet werden kann, bevor ein erzwungener RĂŒcklauf (forced flash) beginnt. Wenn dieser Schwellenwert erreicht ist, werden alle Prozesse synchron (blockiert), und sie dĂŒrfen ihre Arbeit nicht fortsetzen, bis der angeforderte Ein-/Ausgabevorgang tatsĂ€chlich abgeschlossen ist und die Daten auf der Festplatte vorhanden sind. Bei intensiven Ein-/Ausgabeoperationen verursacht dies Probleme, da das Caching fehlt und alle Prozesse, die Ein-/Ausgaben durchfĂŒhren, auf die Ein-/Ausgabe warten. Dies fĂŒhrt zu vielen hĂ€ngenden Prozessen, hoher Last, instabiler Systemleistung und schlechten Leistungswerten.

Eine Verringerung dieser Parameterwerte fĂŒhrt dazu, dass Daten hĂ€ufiger auf die Festplatte geschrieben werden und nicht im RAM gespeichert bleiben. Dies kann Systemen mit viel Speicher helfen, fĂŒr die es normal ist, einen Seiten-Cache von 45–90 GB auf die Festplatte zu schreiben, was zu enormen Wartezeiten fĂŒr Frontend-Anwendungen fĂŒhrt und die Gesamterantwortzeit sowie die InteraktivitĂ€t verringert.

„1“ > /proc/sys/vm/pagecache

Der Seiten-Cache ist ein Cache, in dem Daten von Dateien und ausfĂŒhrbaren Programmen gespeichert werden, das heißt, es handelt sich um Seiten mit dem tatsĂ€chlichen Inhalt von Dateien oder BlockgerĂ€ten. Dieser Cache wird verwendet, um die Anzahl der LesevorgĂ€nge von der Festplatte zu reduzieren. Ein Wert von „1“ bedeutet, dass 1 % des RAMs fĂŒr den Cache verwendet werden und es mehr LesevorgĂ€nge von der Festplatte als aus dem RAM geben wird. Es ist nicht erforderlich, diesen Parameter zu Ă€ndern, aber wenn Sie paranoid bezĂŒglich der Kontrolle ĂŒber den Seiten-Cache sind, können Sie ihn anpassen.

„deadline“ > /sys/block/sdc/queue/scheduler

Der I/O-Scheduler ist ein Kernkomponente von Linux, die Lese- und Schreibwarteschlangen verwaltet. Theoretisch ist es fĂŒr einen intelligenten RAID-Controller besser, „noop“ zu verwenden, da Linux nichts ĂŒber die physische Geometrie der Festplatte weiß. Daher ist es effizienter, dem Controller, der die Geometrie der Festplatte gut kennt, zu ermöglichen, die Anfrage so schnell wie möglich zu bearbeiten. Es scheint jedoch, dass „deadline“ die Leistung verbessert. Weitere Details zu den Planern finden Sie in der Dokumentation zum Quellcode des Linux-Kernels: linux/Documentation/block/*osched.txt. Außerdem habe ich einen Anstieg der Leseleistung bei gemischten Operationen (viele SchreibvorgĂ€nge) beobachtet.

„256“ > /sys/block/sdc/queue/nr_requests

Die Anzahl der Ein- und Ausgabeforderungen im Puffer, bevor sie an den Scheduler ĂŒbergeben werden. Die GrĂ¶ĂŸe der internen Warteschlange einiger Controller (queue_depth) ist grĂ¶ĂŸer als nr_requests des I/O-Schedulers, sodass der I/O-Scheduler kaum in der Lage ist, die Anfragen richtig zu priorisieren und zusammenzufĂŒhren. FĂŒr die Scheduler Deadline und CFQ ist es besser, wenn nr_requests doppelt so groß ist wie die interne Warteschlange des Controllers. Das ZusammenfĂŒhren und Umordnen von Anfragen hilft dem Scheduler, unter hoher Last reaktionsschneller zu sein.

echo «16» > /proc/sys/vm/page-cluster

Der Parameter page-cluster steuert die Anzahl der Seiten, die auf einmal in den Swap geschrieben werden. Im obigen Beispiel wird der Wert auf „16“ gesetzt, entsprechend der Stripe-GrĂ¶ĂŸe (stripe size) von RAID mit 64 KB. Das macht keinen Sinn bei swappiness = 0, aber wenn Sie swappiness auf 10 oder 20 gesetzt haben, wird Ihnen dieser Wert helfen, wenn die Stripe-GrĂ¶ĂŸe von RAID 64 KB betrĂ€gt.

blockdev —setra 4096 /dev/<devname> (-sdb, hdc oder dev_mapper)

Die Standardeinstellungen fĂŒr BlockgerĂ€te vieler RAID-Controller fĂŒhren oft zu einer katastrophalen Leistung. Das HinzufĂŒgen der oben genannten Option konfiguriert das vorzeitige Lesen fĂŒr 4096 * 512-Byte-Sektoren. Zumindest bei Streaming-Operationen erhöht sich die Geschwindigkeit, indem der integrierte Cache der Festplatte durch vorzeitiges Lesen wĂ€hrend des Zeitraums gefĂŒllt wird, den der Kernel zur Vorbereitung von I/O nutzt. Daten, die bei der nĂ€chsten Leseanfrage angefordert werden, können im Cache abgelegt werden. Ein zu großes vorzeitiges Lesen kann den zufĂ€lligen I/O fĂŒr große Dateien beeintrĂ€chtigen, wenn es potenziell nĂŒtzliche Disk-Zeit nutzt oder Daten außerhalb des Caches lĂ€dt.

Hier sind einige weitere Empfehlungen auf Dateisystemebene. Diese wurden jedoch noch nicht getestet. Stellen Sie sicher, dass Ihr Dateisystem die GrĂ¶ĂŸe des Stripes und die Anzahl der Festplatten im Array kennt. Zum Beispiel, dass es sich um ein RAID5-Array mit einer Stripe-GrĂ¶ĂŸe von 64K aus sechs Festplatten handelt (tatsĂ€chlich aus fĂŒnf, da eine Festplatte fĂŒr die ParitĂ€t verwendet wird). Diese Empfehlungen basieren auf theoretischen Annahmen und stammen aus verschiedenen Blogs/Artikeln von RAID-Experten.

-> ext4 fs, 5 Festplatten, 64K Stripe, Einheiten in 4K Blöcken
mkfs -text4 -E stride=$((64/4))
-> xfs, 5 Festplatten, 64K Stripe, Einheiten in 512-Byte-Sektoren
mkfs -txfs -d sunit=$((64*2)) -d swidth=$((5*64*2))

FĂŒr große Dateien kann man in Betracht ziehen, die oben angegebenen Stripe-GrĂ¶ĂŸen zu erhöhen.

ACHTUNG! Alles, was oben beschrieben ist, ist fĂŒr einige Anwendungsarten extrem subjektiv. Dieser Artikel garantiert keine Verbesserungen ohne vorheriges Testen der entsprechenden Anwendungen durch den Benutzer. Er sollte nur angewendet werden, wenn es notwendig ist, die allgemeine SystemreaktionsfĂ€higkeit zu verbessern oder wenn er aktuelle Probleme löst.

ZusÀtzliche Materialien:

Konfiguration des Linux-Kernels fĂŒr GlusterFS

Weiterlesen

Quelle: habr.com

ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server đŸ”„ ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server - ProHoster