Tuning von Tor unter Linux - Heavy/High Load TOR Relays- Optimierung der Leistung

Tuning von Tor unter Linux - Heavy/High Load TOR Relays- Optimierung der Leistung

Ich betreibe zur Zeit einige Tor-Systeme und habe einige Zeit damit verbracht, als freiwilliger Helfer Web Server zu betreiben. Ich möchte hier einige meiner Beobachtungen teilen, wie man Tor und Linux optimiert, um eine bessere Leistung zu erzielen und bestimmte Arten von bösartigem Datenverkehr zu blockieren.

Die hohe Belastung des Tor-Relay-Prozesses wird durch mehrere Faktoren verursacht, die mit der hohen Netzwerklast und den rechenintensiven Aufgaben zusammenhängen, die der Prozess bewältigen muss. Im Detail sieht es wie folgt aus, was in einem Linux-Prozess passiert, der als Tor-Relay fungiert:

1. **Verarbeitung des Netzwerkverkehrs**:
   - Verbindungsaufbau und -verwaltung: Tor-Server sind ständig damit beschäftigt, Verbindungen zu anderen Servern und Clients aufzubauen und zu verwalten. Dazu müssen TCP-Verbindungen verwaltet werden. Das verbraucht CPU-Ressourcen.
   - Ver- und Entschlüsselung: Jeder Datenstrom, der das Tor-Netzwerk durchläuft, wird mehrfach verschlüsselt. Der Server muss also eingehende Daten entschlüsseln und ausgehende Daten verschlüsseln. Diese kryptographischen Operationen sind sehr rechenintensiv.
   - Daten weiterleiten: Relays müssen Datenpakete empfangen und an den nächsten Knoten im Netzwerk weiterleiten. Dies erfordert schnelle Lese- und Schreiboperationen auf den Netzwerkschnittstellen.

2 kryptographische Aufgaben:
   - RSA-Verschlüsselung/Entschlüsselung: Wenn Verbindungen aufgebaut werden, verwendet Tor RSA für die Schlüsselvereinbarung. RSA-Operationen sind sehr CPU-intensiv.
   - AES-Verschlüsselung/Entschlüsselung: Tor verwendet AES, um Datenströme zu verschlüsseln. AES ist effizient, aber die Rechenanforderungen summieren sich bei großen Datenmengen.
   - HMAC-Berechnungen: HMACs (Hash-based Message Authentication Codes) werden verwendet, um die Integrität und Authentizität der Daten zu gewährleisten, was ebenfalls Rechenleistung erfordert.

3 Datenbank- und Speichermanagement:
   - Routing-Tabellen und Netzwerkstatus: Tor-Relays müssen große Routing-Tabellen und Netzwerkstatusinformationen verwalten und regelmäßig aktualisieren. Diese Informationen werden normalerweise in Speicherstrukturen abgelegt, die effizient durchsucht und aktualisiert werden müssen.
   - Caching**: Relays halten häufig verwendete Daten im Speicher, um die Leistung zu verbessern. Dies erfordert jedoch ein effizientes Speichermanagement und erhöht den Speicherbedarf.

4 Prozess- und Thread-Management:
   - Multithreading: Tor-Relays verwenden oft mehrere Threads, um die parallelen Verbindungen und Aufgaben zu verarbeiten. Dies führt zu einer zusätzlichen CPU-Belastung durch die Verwaltung und Synchronisation der Threads.
   - Event loop handling: Tor verwendet ein ereignisgesteuertes Programmiermodell, in dem viele kleine Aufgaben gleichzeitig ausgeführt werden. Die Verwaltung dieser Ereignisse und die Zeitplanung verursachen ebenfalls eine gewisse Last.

Zusammenfassend kann man sagen, dass die Hauptgründe für die hohe Belastung eines Tor-Relay-Prozesses die intensive Nutzung der CPU für kryptographische Operationen, die Verwaltung vieler gleichzeitiger Netzwerkverbindungen und die ständige Aktualisierung und Verwaltung von Routing- und Statusinformationen sind. Diese Aufgaben sind sowohl rechen- als auch speicherintensiv und können die Systemressourcen stark beanspruchen.

Die Datei /etc/sysctl.conf wird verwendet, um die Leistung des Linux-Kernels einzustellen. Im Folgenden sind die Werte aufgeführt, die ich seit Jahren für meine Relays verwende. Ich werde auf die Details der einzelnen Werte eingehen. Die hier angegebenen Einstellungen wurden von mir und anderen Tor-Relay-Betreibern vorgeschlagen und wurden im Laufe der Zeit angepasst, während ich die Leistung beobachtete und Verbesserungen sah.

Dies sind meine erfolgreich getesteten Einstellungen ohne die Netzwerkoptimierungen. Die Netzwerkoptimierungen werden in einem anderen Artikel folgen.

net.core.somaxconn=20480
vm.min_free_kbytes=65536
fs.file-max=64000
kernel.sysrq=0
vm.vfs_cache_pressure=150
vm.swappiness=10
vm.dirty_ratio=10
vm.dirty_background_ratio=5
vm.dirty_expire_centisecs=2000
vm.dirty_writeback_centisecs=800

Die Datei `/etc/sysctl.conf` wird verwendet, um Kernelparameter zur Laufzeit zu konfigurieren. Hier sind die Details der von Ihnen erwähnten Einstellungen:

1. **`net.core.somaxconn=20480`**:
   - Dieser Parameter legt die maximale Länge der Warteschlange für wartende Verbindungen auf einem Socket im Listenstatus fest (voreingestellt: 128). Der Standardwert ist oft 128. Ein höherer Wert wie 20480 kann helfen, eine größere Anzahl eingehender Verbindungen zu verarbeiten, was für Server mit hoher Last nützlich ist.

2. **`vm.min_free_kbytes=65536`**:
   - Dieser Parameter gibt die minimale Menge an freiem Speicher in Kilobyte an, die dem System immer zur Verfügung stehen sollte. Damit wird verhindert, dass das System aufgrund von Speichermangel abstürzt. Ein höherer Wert kann die Systemleistung verbessern, insbesondere bei hoher Last.

3. **`fs.file-max=64000`**:
   - Diese Einstellung gibt die maximale Anzahl von Dateideskriptoren an, die das System insgesamt öffnen kann. Ein höherer Wert erlaubt es, mehr Dateien gleichzeitig zu öffnen, was für Systeme mit vielen gleichzeitigen Dateizugriffen wichtig ist.

4. **`kernel.sysrq=0`**:
   - Diese Einstellung deaktiviert die Schlüsselfunktion SysRq, die spezielle Befehle direkt an den Kernel senden kann. Dies kann aus Sicherheitsgründen deaktiviert werden, um unbefugten Zugriff auf Kernel-Funktionen zu verhindern.

5. **`vm.vfs_cache_pressure=150`**:
   - Dieser Parameter steuert, wie aggressiv das System Speicher für den VFS (Virtual File System) Cache zurückfordert. Ein Wert von 150 bedeutet, dass das System den VFS-Cache aggressiver leert, was mehr Speicher für andere Anwendungen freisetzen kann, aber auch die Leistung von Dateisystemoperationen beeinträchtigen kann.

6. **`vm.swappiness=10`**:
   - Dieser Parameter bestimmt, wie oft das System versucht, Speicher in den Swap-Bereich auszulagern. Ein niedrigerer Wert (z.B. 10) bedeutet, dass das System weniger aggressiv auslagert, was die Leistung verbessern kann, wenn genügend RAM verfügbar ist.

7. **`vm.dirty_ratio=10`**:
   - Dieser Parameter gibt den Prozentsatz des Gesamtspeichers an, der "schmutzig" sein darf (d.h. Speicher, der geändert, aber noch nicht auf die Festplatte geschrieben wurde), bevor das System beginnt, Daten auf die Festplatte zu schreiben. Ein Wert von 10% bedeutet, dass das System aggressiver beim Schreiben der Dirty Pages vorgeht.

8. **`vm.dirty_background_ratio=5`**:
   - Dieser Parameter gibt den Prozentsatz des Gesamtspeichers an, der "schmutzig" sein darf, bevor der Hintergrundschreibprozess beginnt, die Dirty Pages auf die Festplatte zu schreiben. Ein Wert von 5% bewirkt, dass der Schreibprozess häufiger im Hintergrund abläuft.

9. **`vm.dirty_expire_centisecs=2000`**:
   - Diese Einstellung gibt die Zeit in Hundertstelsekunden an, wie lange Daten im Speicher als "schmutzig" behandelt werden, bevor sie auf die Festplatte geschrieben werden müssen. Ein Wert von 2000 bedeutet, dass Daten, die länger als 20 Sekunden "schmutzig" sind, auf die Festplatte geschrieben werden.

10. **`vm.dirty_writeback_centisecs=800`**:
    - Diese Einstellung legt fest, wie oft (in Hundertstelsekunden) der Hintergrundprozess ausgeführt wird, der Dirty Pages auf die Festplatte schreibt. Ein Wert von 800 bedeutet, dass dieser Prozess alle 8 Sekunden ausgeführt wird.

Zusammenfassend lässt sich sagen, dass diese Einstellungen zur Optimierung der Systemleistung und -stabilität beitragen, insbesondere bei Servern mit hoher Auslastung oder speziellen Anforderungen.

Die detaillierten Informationen sind unten aufgeführt.


net.core.somaxconn=20480

Die Einstellung net.core.somaxconn=20480 legt fest, dass bis zu 20.480 eingehende Verbindungen in der Warteschlange eines lauschenden Sockets gehalten werden können. Dies ist besonders bei stark belasteten Servern nützlich, da es hilft, Verbindungsverluste zu vermeiden und die Systemleistung bei hohem Netzwerkverkehr zu verbessern. Diese Konfiguration setzt jedoch voraus, dass das System über ausreichende Ressourcen verfügt, um diese hohe Anzahl von Verbindungen effizient zu verwalten. Standardmäßig ist net.core.somaxconn in vielen Linux-Distributionen auf einen Wert von etwa 128 oder 256 eingestellt. Der Wert 20480 ist daher eine deutliche Erhöhung, die für spezielle Hochlastszenarien konfiguriert ist.

Bei dem Parameter handelt es sich um einen Parameter im Linux-Kernel, der die maximale Anzahl an wartenden Verbindungen angibt, die für einen lauschenden Socket in die Warteschlange gestellt werden können. Er betrifft sowohl TCP- als auch UDP-Sockets und verwaltet die Größe des Listening Backlogs, d.h. die Anzahl der eingehenden Verbindungen, die darauf warten, von der Anwendung angenommen zu werden.

Befindet sich ein Socket im Listening-Status, kann er eingehende Verbindungen annehmen. Wenn die Anwendung diese Verbindungen nicht schnell genug annimmt, können sie sich in einer Warteschlange ansammeln. Der Parameter `net.core.somaxconn` bestimmt die maximale Größe dieser Warteschlange, auch Listen Backlog genannt.

Der Standardwert für `net.core.somaxconn` wird normalerweise von der Linux-Distribution festgelegt und kann variieren, typischerweise etwa 128 oder 128 multipliziert mit `sysctl_somaxconn()`. Wenn Sie `net.core.somaxconn` erhöhen, können Sie dem Kernel erlauben, mehr wartende Verbindungen in die Warteschlange zu stellen, was nützlich ist, um hohe Verbindungsraten oder Stoßverkehr zu bewältigen.

Es ist wichtig zu beachten, dass `net.core.somaxconn` nicht die Gesamtzahl der Verbindungen begrenzt, sondern nur die Anzahl der Verbindungen, die in die Warteschlange gestellt werden können. Die tatsächliche Anzahl der Verbindungen, die verwaltet werden können, hängt von anderen Faktoren ab, wie z.B. der Fähigkeit der Anwendung, Verbindungen zu akzeptieren, und den verfügbaren Systemressourcen, wie z.B. Dateideskriptoren und Speicher.

**Empfehlungen und Überlegungen:**.
- Erhöhen Sie diesen Wert, wenn Ihr System eine hohe Anzahl eingehender Verbindungen verarbeitet. Ein Webserver mit hoher Auslastung könnte beispielsweise von einem Wert von 1024 oder höher profitieren.
- Überprüfung: Wenn Ihr Server bei einer hohen Anzahl eingehender Verbindungen Verbindungsabbrüche oder Netzwerkinstabilitäten erfährt, sollten Sie diesen Wert erhöhen.


vm.swappiness=10

Die Einstellung vm.swappiness=10 weist den Linux-Kernel an, den Swap-Speicher so wenig wie möglich zu nutzen und stattdessen den physischen Arbeitsspeicher so weit wie möglich zu bevorzugen. Dies kann die Systemleistung und die Reaktionsfähigkeit verbessern, insbesondere in Umgebungen, die schnelle Speicherzugriffszeiten erfordern. Dies ist eine geeignete Einstellung für Systeme mit ausreichend RAM und für Anwendungsfälle, bei denen schnelle Antwortzeiten wichtig sind: Bei sehr niedrigem Swap besteht die Gefahr, dass das System schneller an die Grenzen des physischen Speichers stößt und möglicherweise nicht in der Lage ist, neue Speicheranforderungen zu erfüllen, bevor der Swap verwendet wird.

Der Parameter `vm.swappiness` im Linux-Kernel bestimmt die Priorität, die dem Auslagern von Laufzeitspeicher im Vergleich zum Löschen von Seiten/Pages aus dem Systemseitencache eingeräumt wird.

Der Swappiness-Wert reicht von 0 bis 100, wobei ein niedriger Wert bedeutet, dass der Kernel versucht, das Auslagern so weit wie möglich zu vermeiden, während ein höherer Wert bedeutet, dass der Kernel bereitwilliger Speicherseiten auslagert.

Das Verhalten des Kernels hängt von der aktuellen Systemauslastung und der spezifischen Implementierung ab, ist aber im Allgemeinen gleich:

- vm.swappiness = 0`: Der Kernel wird das Auslagern von Prozessen aus dem physischen Speicher minimieren.
- vm.swappiness = 100`: Der Kernel wird aggressiv Prozesse aus dem physischen Speicher auf die Swap-Disk auslagern.

Zum Beispiel wird ein System mit einem Swappiness-Wert von 60 häufiger Pages auslagern als ein System mit einem Wert von 10. Ein niedrigerer Swappiness-Wert verzögert die Nutzung des Auslagerungsspeichers, was in der Regel die Reaktionsfähigkeit des Systems verbessert.

Es ist wichtig zu beachten, dass das Setzen von `vm.swappiness = 0` das Auslagern nicht vollständig deaktiviert. Das System wird immer noch Swap Space benutzen, wenn es nötig ist, z.B. wenn der Speicher knapp wird.


vm.min_free_kbytes=65536

Die Einstellung vm.min_free_kbytes=65536 sorgt dafür, dass der Linux-Kernel immer mindestens 64 MB RAM frei hält. Dies dient als Sicherheitspuffer zur Verbesserung der Systemleistung und -stabilität, insbesondere bei hoher Last oder intensivem Speicherbedarf. Es hilft Engpässe zu vermeiden und stellt sicher, dass das System schnell auf Speicheranforderungen reagieren kann.

Die Einstellung `vm.min_free_kbytes` im Linux-Kernel beeinflusst, wie viel freien Speicher (in Kilobyte) das System immer verfügbar halten soll. Hier sind einige wichtige Aspekte und der Einfluss dieser Einstellung:

Freier Speicher: vm.min_free_kbytes gibt die minimale Menge an freiem Speicher an, die das System versucht, immer verfügbar zu halten. Fällt der freie Speicher unter diesen Wert, ergreift der Kernel Maßnahmen, um Speicher freizugeben, z.B. das Verschieben von Pages in den Auslagerungsspeicher oder das Löschen von Pages aus dem Pages-Cache.

Speicherverwaltung: Eine höhere Einstellung von `vm.min_free_kbytes` kann helfen, Engpässe in der Speicherverwaltung zu vermeiden, insbesondere bei hoher Last oder auf Systemen mit vielen parallelen Prozessen. Sie stellt sicher, dass immer ein gewisser Puffer an freiem Speicher vorhanden ist, um Speicheranforderungen schnell zu erfüllen.

Systemstabilität: Die Reservierung von mehr freiem Speicher kann das System stabiler machen, da kritische Prozesse weniger wahrscheinlich aufgrund von Speichermangel blockieren oder abstürzen.

Leistung: Eine zu niedrige Einstellung kann sich negativ auf die Systemleistung auswirken, da der Kernel gezwungen ist, häufiger dringend Speicher freizugeben. Dies kann zu einer höheren Auslastung des Swap-Speichers und zu einer höheren CPU-Last führen. Eine zu hohe Einstellung kann hingegen dazu führen, dass mehr Speicher ungenutzt bleibt, was die Effizienz verringert.

Empfehlung
- Für Systeme mit hoher Speicherauslastung oder hohen Anforderungen an die Ausfallsicherheit kann es sinnvoll sein, `vm.min_free_kbytes` zu erhöhen.
- Die genaue Einstellung sollte den spezifischen Anforderungen und der Beobachtung der Systemleistung angepasst werden.

Zusammenfassung
Die Einstellung `vm.min_free_kbytes` ist ein wichtiger Parameter zur Steuerung des Speichermanagements im Linux-System, der dazu beiträgt, ein Minimum an freiem Speicher zu gewährleisten, um die Systemstabilität und -leistung unter Lastbedingungen zu verbessern.

fs.file-max=64000

Die Einstellung fs.file-max=64000 legt fest, dass das Linux-System maximal 64.000 Datei-Deskriptoren gleichzeitig offen halten kann. Dies hilft, die Kapazität des Systems zu erhöhen, um viele gleichzeitige Verbindungen oder geöffnete Dateien zu unterstützen. Diese Konfiguration ist besonders nützlich für Server mit hoher Auslastung und Anwendungen mit intensiven E/A-Anforderungen. Es ist jedoch wichtig, diese Einstellung entsprechend den spezifischen Anforderungen und Ressourcen Ihres Systems zu optimieren und regelmäßig zu überwachen.

- Dateideskriptoren: Ein Dateideskriptor ist ein abstrakter Schlüssel, der eine geöffnete Datei oder einen geöffneten Socket repräsentiert. Jeder geöffneten Datei, jedem Netzwerk-Socket und jedem anderen I/O-Objekt wird ein eindeutiger Dateideskriptor zugewiesen.

- Maximale Anzahl geöffneter Dateien: Der Wert fs.file-max=64000 legt fest, dass das System maximal 64.000 Datei-Deskriptoren gleichzeitig offen halten kann. Dies ist eine Obergrenze, die verhindert, dass zu viele Dateien oder Sockets gleichzeitig geöffnet sind, was zur Instabilität des Systems führen könnte.

- Auswirkung auf die Systemleistung: Erhöhte Kapazität: Eine höhere maximale Anzahl offener Dateien kann die Kapazität des Systems erhöhen, um eine größere Anzahl gleichzeitig laufender Anwendungen und Prozesse zu unterstützen, die Dateien und Sockets öffnen müssen.

- Systemressourcen: Eine Erhöhung dieses Limits kann jedoch auch dazu führen, dass mehr Systemressourcen (z.B. Speicher) für die Verwaltung dieser Dateideskriptoren benötigt werden.

Anwendungsszenarien:
Server mit hohem Datenverkehrsaufkommen: Server, die viele gleichzeitige Verbindungen oder viele gleichzeitig geöffnete Dateien verwalten müssen, z. B. Webserver, Datenbankserver oder Dateiserver.
Anwendungen mit hoher I/O-Last: Anwendungen, die eine große Anzahl von Dateien oder Netzwerkverbindungen gleichzeitig verarbeiten, profitieren von einer höheren Anzahl zulässiger Dateideskriptoren.

Einschränkungen und Empfehlungen:
Systemoptimierung: Es ist wichtig, die Anzahl der maximalen Dateideskriptoren auf Basis der Anforderungen Ihrer Anwendungen und der verfügbaren Systemressourcen zu optimieren. Eine zu hohe Einstellung kann zu unnötigem Ressourcenverbrauch führen.

Überwachung: Es wird empfohlen, die Verwendung von Dateideskriptoren zu überwachen, um sicherzustellen, dass das System nicht regelmäßig die festgelegten Grenzen erreicht, was ein Indikator dafür sein könnte, dass die Grenze weiter erhöht werden sollte.

kernel.sysrq=0

Die SysRq-Taste ist eine spezielle Tastenkombination, die direkt mit dem Kernel kommuniziert und verschiedene Notfallbefehle ausführen kann. Diese Befehle können verwendet werden, um das System neu zu starten, Prozesse zu beenden, Speicherinformationen anzuzeigen und andere kritische Aktionen durchzuführen. Beeinflussung von kernel.sysrq=0:

Deaktivierung:

Die Einstellung kernel.sysrq=0 deaktiviert alle SysRq-Funktionen. Das bedeutet, dass keine SysRq-Befehle ausgeführt werden können, auch wenn die entsprechende Tastenkombination verwendet wird.

Die Einstellung kernel.sysrq=0 deaktiviert alle SysRq Tastenkombinationen, so dass diese Notfallbefehle nicht verwendet werden können. Dies kann die Systemsicherheit erhöhen, da das Risiko eines Missbrauchs der SysRq-Funktionen minimiert wird. Dies bedeutet jedoch auch, dass nützliche Diagnose- und Notfallbefehle nicht zur Verfügung stehen, was insbesondere in sicheren Produktionsumgebungen von Bedeutung sein kann.

vm.vfs_cache_pressure=150

Die Einstellung vm.vfs_cache_pressure=150 im Linux-Kernel beeinflusst, wie aggressiv das System den Cache der Datenstrukturen des Virtual File System (VFS) verwaltet. Hier sind die Details und die Auswirkungen dieser speziellen Einstellung:

VFS Cache: Das Virtual File System (VFS) ist eine Abstraktionsschicht, die dem Kernel hilft, mit verschiedenen Dateisystemen umzugehen. Der VFS-Cache speichert Metadaten und andere Dateisysteminformationen, um den Zugriff auf Dateien und Verzeichnisse zu beschleunigen.

 Parameter
 vfs_cache_pressure: Dieser Parameter steuert, wie aggressiv der Kernel den VFS-Cache im Vergleich zu anderen Caches (z.B. dem Page-Cache) verkleinert. Ein höherer Wert bedeutet, dass der Kernel den VFS-Cache aggressiver verkleinert, während ein niedrigerer Wert bedeutet, dass der VFS-Cache im Vergleich zu anderen Caches eher erhalten bleibt.

Bedeutung des Wertes 150:
Erhöhte Aggressivität: Mit der Einstellung vm.vfs_cache_pressure=150 wird der VFS-Cache aggressiver verkleinert als mit der Standardeinstellung (die normalerweise 100 ist). Das bedeutet, dass der Kernel den VFS-Cache schneller freigibt, um den Speicher für andere Zwecke zu verwenden.

Auswirkung auf die System-Performance:
Speicherfreigabe: Ein höherer Wert (z.B. 150) veranlasst den Kernel, den Speicher im VFS-Cache schneller freizugeben. Dies kann nützlich sein, wenn der verfügbare Speicher begrenzt ist und andere Anwendungen oder Caches mehr Speicher benötigen.

Geringere Cache-Effizienz: Eine aggressivere Freigabe des VFS-Cache kann die Effizienz des Dateizugriffs verringern, da weniger Dateisystem-Metadaten im Cache gehalten werden. Dies kann zu häufigeren Zugriffen auf das Dateisystem führen, was die Leistung von dateiintensiven Anwendungen beeinträchtigen kann.

Systembalance: Ein Wert von 150 bedeutet eine Priorisierung des Speichers für andere Anwendungen und Caches auf Kosten eines kleineren VFS-Caches.

Anwendungsszenarien:
Systeme mit begrenztem RAM: Auf Systemen mit begrenztem RAM kann ein höherer Wert für vfs_cache_pressure sinnvoll sein, um sicherzustellen, dass genügend Speicher für andere Caches und Anwendungen zur Verfügung steht.
Anwendungen mit geringem Dateizugriff: Systeme, die weniger auf Dateisystemzugriffe angewiesen sind, können einen höheren Wert verwenden, um mehr Speicher für andere Zwecke freizugeben.
Server mit vielen gleichzeitigen Prozessen: Server, auf denen viele gleichzeitige Prozesse mit hohem Speicherbedarf laufen, können von einer aggressiveren Speicherfreigabe profitieren.

Zusammenfassung
Die Einstellung vm.vfs_cache_pressure=150 gibt an, dass der Linux-Kernel den VFS-Cache aggressiver freigibt, um Speicher für andere Zwecke freizugeben. Dies kann nützlich sein, um die Speichernutzung auf Systemen mit begrenztem RAM zu optimieren, geht aber auf Kosten der Effizienz des Dateizugriffs-Caches. Dieser Wert priorisiert die Freigabe von VFS-Cache-Speicher, was in bestimmten Szenarien von Vorteil sein kann, insbesondere wenn der Speicher knapp ist.

vm.dirty_ratio=10


Der Standardwert für den Parameter vm.dirty_ratio im Linux-Kernel ist normalerweise 20, aber dieser Wert kann je nach Linux-Distribution und -Version leicht variieren.

Der Standardwert von 20 % bedeutet, dass der Kernel beginnt, Daten aus dem Speicher auf die Festplatte zu schreiben, sobald 20 % des verfügbaren Arbeitsspeichers durch Dirty Pages belegt sind.

Die Einstellung vm.dirty_ratio=10 im Linux-Kernel beeinflusst das Verhalten des Systems in Bezug auf das Zwischenspeichern von Daten, die auf die Festplatte geschrieben werden sollen (sogenannte "dirty pages"). Hier sind die Details und der Einfluss dieser spezifischen Einstellung:


Dirty Pages: Dirty Pages sind Speicherseiten/Pages, die geändert wurden, deren Änderungen aber noch nicht auf die Festplatte geschrieben wurden. Diese Seiten werden im Speicher zwischengespeichert, um Schreibvorgänge zu optimieren und die Systemleistung zu verbessern.

Parameter
vm.dirty_ratio: Dieser Parameter gibt den Prozentsatz des gesamten verfügbaren Speichers an, der von Dirty Pages belegt werden darf, bevor der Kernel beginnt, diese Daten auf die Festplatte zu schreiben.

Bedeutung des Wertes 10:
10% des RAM: Die Einstellung vm.dirty_ratio=10 gibt an, dass bis zu 10% des gesamten verfügbaren Speichers von Dirty Pages belegt werden dürfen, bevor der Kernel beginnt, diese Daten auf die Festplatte zu schreiben.

Auswirkung auf die System-Performance:
Frühere Schreiboperationen:

Ein niedrigerer Wert für vm.dirty_ratio bedeutet, dass das System früher beginnt, Daten auf die Festplatte zu schreiben. Dies kann zu häufigeren, aber kleineren Schreiboperationen führen.

Geringeres Risiko von Datenverlusten: Ein niedrigerer Wert kann das Risiko von Datenverlusten im Falle eines plötzlichen Systemabsturzes oder Stromausfalls verringern, da weniger ungesicherte Daten im Speicher gehalten werden.

Speicherverfügbarkeit: Es wird weniger Speicher für Dirty Pages reserviert, so dass mehr Speicher für andere Anwendungen zur Verfügung steht. Dies kann insbesondere für Systeme mit begrenztem Arbeitsspeicher von Vorteil sein.

Anwendungsszenarien:

Systeme mit begrenztem Arbeitsspeicher: Systeme mit begrenztem Arbeitsspeicher können von einem niedrigeren vm.dirty_ratio-Wert profitieren, da mehr Speicher für andere Anwendungen und Caches zur Verfügung steht.

Systeme, die anfälliger für Stromausfälle sind: Systeme, die anfälliger für plötzliche Stromausfälle oder Abstürze sind, können von einem niedrigeren Wert profitieren, da das Risiko von Datenverlusten verringert wird.

Anwendungen mit geringerem Schreibbedarf: Systeme, die keine intensiven Schreibvorgänge ausführen, können einen niedrigeren Wert verwenden, um die Speicherverfügbarkeit zu maximieren.

Zusammenfassung
Die Einstellung vm.dirty_ratio=10 legt fest, dass bis zu 10% des gesamten verfügbaren Speichers von Dirty Pages belegt sein dürfen, bevor der Kernel beginnt, diese Daten auf die Festplatte zu schreiben. Diese Einstellung veranlasst den Kernel, früher mit dem Schreiben zu beginnen, wodurch das Risiko von Datenverlusten verringert wird und mehr Speicher für andere Anwendungen zur Verfügung steht. Dies ist besonders nützlich für Systeme mit begrenztem Arbeitsspeicher oder erhöhtem Risiko von Stromausfällen.


vm.dirty_background_ratio

Der Standardwert für den Parameter vm.dirty_background_ratio im Linux-Kernel ist normalerweise 10, was bedeutet, dass der Kernel beginnt, im Hintergrund Dirty Pages auf die Festplatte zu schreiben, sobald 10% des gesamten verfügbaren Speichers durch Dirty Pages belegt sind.

Zusammenfassung

Voreinstellung: 10
Bedeutung: Der Kernel beginnt im Hintergrund, Dirty Pages auf die Festplatte zu schreiben, sobald 10% des verfügbaren Speichers durch diese Pages belegt sind.

Dieser Standardwert stellt sicher, dass Schreiboperationen gleichmäßig verteilt werden und der Speicher effizient genutzt wird, was die Reaktionsfähigkeit des Systems verbessert und das Risiko plötzlicher Lastspitzen durch große Schreiboperationen verringert.

Die Einstellung vm.dirty_background_ratio=5 im Linux-Kernel beeinflusst das Verhalten des Systems beim Caching und beim Schreiben von Daten auf die Festplatte im Hintergrund (sogenannte "dirty pages"). Hier sind die Details und der Einfluss dieser spezifischen Einstellung:

Dirty Pages: Dirty Pages sind Speicherseiten, die geändert wurden, deren Änderungen aber noch nicht auf die Festplatte geschrieben wurden. Diese Seiten werden im Speicher zwischengespeichert, um Schreibvorgänge zu optimieren und die Systemleistung zu verbessern.

Parameter
vm.dirty_background_ratio: Dieser Parameter gibt den Prozentsatz des gesamten verfügbaren Speichers an, der von Dirty Pages belegt werden darf, bevor der Kernel beginnt, diese Daten im Hintergrund auf die Festplatte zu schreiben.

Bedeutung des Wertes 5:
5% des RAM: Die Einstellung vm.dirty_background_ratio=5 legt fest, dass der Kernel beginnt, Dirty Pages im Hintergrund auf die Festplatte zu schreiben, sobald 5% des gesamten verfügbaren Speichers durch Dirty Pages belegt sind.

Auswirkung auf die Systemperformance:
Früheres Schreiben im Hintergrund: Ein niedriger Wert für vm.dirty_background_ratio bedeutet, dass das System früher damit beginnt, Dirty Pages im Hintergrund auf die Festplatte zu schreiben. Dies verhindert, dass sich zu viele Dirty Pages im Speicher ansammeln und sorgt für eine gleichmäßigere Verteilung der Schreiblast.

Systemreaktionsfähigkeit: Durch das frühzeitige Schreiben von Dirty Pages im Hintergrund werden plötzliche, große Schreibvorgänge vermieden, was die Systemreaktionsfähigkeit verbessern kann.

Speicherverfügbarkeit: Es wird weniger Speicher für Dirty Pages reserviert, so dass mehr Speicher für andere Anwendungen zur Verfügung steht. Dies kann insbesondere für Systeme mit begrenztem Hauptspeicher von Vorteil sein.

Zusammenspiel mit vm.dirty_ratio:
vm.dirty_ratio: Dieser Parameter gibt den Prozentsatz des Speichers an, ab dem der Kernel gezwungen wird, alle Dirty Pages auf die Festplatte zu schreiben, um Speicher freizugeben.
Kombination: Wenn vm.dirty_background_ratio auf 5% und vm.dirty_ratio auf 20% gesetzt ist, beginnt der Kernel, dirty pages im Hintergrund zu schreiben, sobald 5% des RAM belegt sind. Wenn 20% erreicht sind, werden die Schreibvorgänge intensiviert, um sicherzustellen, dass der Speicher nicht überbeansprucht wird.

Einsatzszenarien:
Systeme mit begrenztem Arbeitsspeicher: Systeme mit begrenztem Arbeitsspeicher können von einem niedrigeren Wert für vm.dirty_background_ratio profitieren, da dadurch sichergestellt wird, dass der Arbeitsspeicher effizient genutzt wird und Schreibvorgänge für Dirty Pages früher beginnen.
Allgemeine Systemoptimierung: Systeme, die eine gleichmäßige Schreiblast und eine bessere Reaktionsfähigkeit erfordern, profitieren von einem niedrigeren Wert, da plötzliche Lastspitzen durch große Schreiboperationen vermieden werden.

Zusammenfassung
Die Einstellung vm.dirty_background_ratio=5 legt fest, dass der Linux-Kernel beginnt, Dirty Pages im Hintergrund auf die Festplatte zu schreiben, sobald 5% des gesamten verfügbaren Arbeitsspeichers durch Dirty Pages belegt sind. Diese Einstellung trägt dazu bei, die Schreiblast gleichmäßiger zu verteilen und die Reaktionsfähigkeit des Systems zu verbessern, indem sichergestellt wird, dass weniger Dirty Pages im Speicher gehalten werden und der Speicher effizienter genutzt wird.

Die Kombination von vm.dirty_ratio=10 und vm.dirty_background_ratio=5 in meiner Konfiguration gewährleistet eine effiziente Speicherverwaltung und verbessert die Reaktionsfähigkeit des Systems. Der Kernel beginnt frühzeitig (bei 5% Belegung) mit dem Schreiben von Dirty Pages im Hintergrund und intensiviert das Schreiben, wenn 10% des RAM belegt sind. Dadurch wird sichergestellt, dass der Speicher effizient genutzt wird und genügend RAM für andere Anwendungen zur Verfügung steht, während gleichzeitig das Risiko von Datenverlusten verringert wird.


vm.dirty_expire_centisecs

Der Standardwert für den Parameter vm.dirty_expire_centisecs im Linux-Kernel ist normalerweise 3000 Centisekunden, was 30 Sekunden entspricht.

Dieser Wert bedeutet, dass Dirty Pages (geänderte Speicherseiten, die noch nicht auf die Festplatte geschrieben wurden) als "verfallen" angesehen und auf die Festplatte geschrieben werden sollten, wenn sie 30 Sekunden lang im Speicher gehalten wurden.

Zusammenfassung:

Voreinstellung: 3000 Centisekunden (30 Sekunden)
Bedeutung: Veraltete pages werden nach 30 Sekunden als "abgelaufen" betrachtet und auf die Festplatte geschrieben.

Dieser Standardwert stellt einen Kompromiss zwischen Systemleistung und Datensicherheit dar. Indem Dirty Pages bis zu 30 Sekunden im Speicher gehalten werden, können Schreibvorgänge optimiert und die Systemleistung verbessert werden, während gleichzeitig das Risiko eines Datenverlusts im Falle eines plötzlichen Systemabsturzes begrenzt wird.

Die Einstellung `vm.dirty_expire_centisecs=2000` im Linux-Kernel bestimmt, wie lange Dirty Pages (modifizierte Speicherseiten, die noch nicht auf die Festplatte geschrieben wurden) im Speicher verbleiben dürfen, bevor sie als "abgelaufen" betrachtet und vom Kernel zum Schreiben auf die Festplatte ausgewählt werden. Hier sind die Details und Auswirkungen dieser speziellen Einstellung:

Dirty Pages:

Dirty Pages sind Speicherseiten, die geändert wurden, deren Änderungen aber noch nicht auf die Festplatte geschrieben wurden. Sie werden im Speicher zwischengespeichert, um Schreibvorgänge zu optimieren und die Systemleistung zu verbessern.

Parameter:vm.dirty_expire_centisecs`: Dieser Parameter gibt die maximale Zeit in Hundertstelsekunden (1/100 einer Sekunde oder Centisekunden) an, die Dirty Pages im Speicher verbleiben dürfen, bevor sie als "verfallen" betrachtet und auf die Festplatte geschrieben werden.

Der Wert 2000 bedeutet 2000 Centisekunden: Die Einstellung `vm.dirty_expire_centisecs=2000` legt fest, dass dirty pages spätestens nach 2000 Centisekunden (20 Sekunden) als abgelaufen betrachtet und auf die Festplatte geschrieben werden.

Auswirkung auf die System-Performance:
 Schnellere Schreibvorgänge: Ein niedrigerer Wert (im Vergleich zum Standardwert von 3000 centisecs) bedeutet, dass Dirty Pages schneller als "abgelaufen" betrachtet und früher auf die Festplatte geschrieben werden. Dies kann die Datenintegrität erhöhen, da Änderungen schneller auf die Festplatte geschrieben werden.

Geringeres Risiko von Datenverlusten: Das frühere Schreiben von Dirty Pages verringert das Risiko von Datenverlusten im Falle eines plötzlichen Systemabsturzes oder Stromausfalls.
Mehr Schreibvorgänge: Dies kann jedoch zu häufigeren Schreibvorgängen führen, was die Leistung beeinträchtigen kann, insbesondere auf Systemen mit hoher Schreiblast.

Anwendungsszenarien:
 Datensicherheit: In Umgebungen, in denen Datensicherheit und -konsistenz wichtig sind (z. B. bei Datenbankservern), könnte ein niedrigerer Wert verwendet werden, um sicherzustellen, dass Änderungen schnell auf die Festplatte geschrieben werden.
 Systeme mit instabiler Stromversorgung: Systeme, die anfälliger für plötzliche Stromausfälle oder Abstürze sind, können von einem niedrigeren Wert profitieren, da das Risiko von Datenverlusten verringert wird.

Zusammenfassung
Die Einstellung `vm.dirty_expire_centisecs=2000` legt fest, dass Dirty Pages nach spätestens 2000 Centisekunden (20 Sekunden) als abgelaufen betrachtet und auf die Festplatte geschrieben werden. Dies erhöht die Schreibhäufigkeit und verbessert die Datensicherheit, da Änderungen schneller persistiert werden. Diese Einstellung ist besonders nützlich in Umgebungen, die ein hohes Maß an Datensicherheit erfordern oder in denen das Risiko von Datenverlusten minimiert werden muss.


vm.dirty_writeback_centisecs
Der Standardwert für den Parameter vm.dirty_writeback_centisecs im Linux-Kernel ist normalerweise 500 centisecs, was 5 Sekunden entspricht.

Dieser Parameter gibt das Zeitintervall an, in dem der Kernel periodisch den Hintergrund-Daemon (pdflush) aufruft, um Dirty Pages (geänderte Speicherseiten/Pages, die noch nicht auf die Festplatte geschrieben wurden) auf die Festplatte zu schreiben.

Zusammenfassung
Standard: 500 Centisekunden (5 Sekunden)
Bedeutung: Der Kernel ruft den Background Daemon alle 5 Sekunden auf, um Dirty Pages auf die Festplatte zu schreiben.

Dieser Standardwert stellt sicher, dass Schreiboperationen regelmäßig durchgeführt werden, um eine Überlastung des Speichers mit Dirty Pages zu vermeiden und gleichzeitig eine gute Balance zwischen Systemleistung und Datensicherheit zu gewährleisten.


Niedriger Wert

Ein niedriger Wert bedeutet, dass der Hintergrund-Daemon häufiger aktiviert wird, um korrupte Pages auf die Festplatte zu schreiben.

Vorteile

Datenintegrität: Häufigeres Schreiben auf die Festplatte kann das Risiko eines Datenverlusts im Falle eines plötzlichen Systemabsturzes oder Stromausfalls verringern.
Stabilere Leistung: Kleinere, häufigere Schreibvorgänge können durchgeführt werden, was zu einer gleichmäßigeren Verteilung der Schreiblast führt und mögliche Leistungseinbußen aufgrund großer, plötzlicher Schreibvorgänge vermeidet.

Nachteilige Aspekte:

Erhöhte Schreibaktivität: Häufigere Schreibvorgänge auf die Festplatte können zu einer erhöhten Schreibaktivität führen, die die Leistung herkömmlicher Festplatten (HDD) beeinträchtigen und die Lebensdauer von SSDs verkürzen kann.
Erhöhte CPU-Belastung: Häufige Aufrufe des Hintergrund-Daemons können die CPU-Belastung erhöhen, was die Leistung anderer Prozesse beeinträchtigen kann.

Hoher Wert

Ein hoher Wert bedeutet, dass der Hintergrund-Daemon seltener aktiviert wird, um "Dirty" Pages auf die Festplatte zu schreiben.

Vorteile

Geringere Schreibaktivität: Durch weniger häufige Schreibvorgänge kann die Schreiblast auf der Festplatte verringert werden, was insbesondere die Lebensdauer von SSDs verlängern kann.
Geringere CPU-Belastung: Wenn der Hintergrund-Daemon seltener aufgerufen wird, kann die CPU-Last verringert werden, so dass mehr Ressourcen für andere Prozesse zur Verfügung stehen.

Nachteilige Aspekte:

Mögliche Leistungseinbußen: Weniger häufige, aber größere Schreibvorgänge können zu plötzlichen Leistungseinbußen führen, insbesondere wenn viele korrupte Pages auf einmal geschrieben werden müssen.
Erhöhtes Risiko von Datenverlusten: Wenn weniger häufig auf die Festplatte geschrieben wird, erhöht sich das Risiko von Datenverlusten im Falle eines plötzlichen Systemabsturzes oder Stromausfalls.

Zusammenfassung

Niedriger Wert: Besser für Datenintegrität und stabile Leistung, aber höhere Schreibaktivität und CPU-Last.
Hoher Wert: Besser für geringere Schreibaktivität und CPU-Belastung, aber mögliche Verschlechterung der Leistung und erhöhtes Risiko von Datenverlusten.

Die optimale Einstellung hängt von den spezifischen Anforderungen Ihres Systems ab. Für Systeme, die auf maximale Datensicherheit und konsistente Leistung angewiesen sind, ist ein niedrigerer Wert von Vorteil. Für Systeme, die Schreibaktivitäten minimieren und CPU-Ressourcen schonen müssen, ist ein höherer Wert besser geeignet. Es ist wichtig, die Auswirkungen der Änderung zu überwachen und gegebenenfalls anzupassen.

Zusammenfassung
Die Einstellung vm.dirty_writeback_centisecs=800 legt fest, dass der Hintergrund-Daemon alle 8 Sekunden aufgerufen wird, um Dirty Pages auf die Festplatte zu schreiben. Diese Einstellung wirkt sich auf die Häufigkeit und Größe der Schreibvorgänge und damit auf die Systemleistung, die CPU-Belastung und die Datenintegrität aus. Dieser Wert bietet einen Kompromiss zwischen häufigen Schreibvorgängen (für eine bessere Datenintegrität) und weniger häufigen Schreibvorgängen (für eine geringere Schreibaktivität und CPU-Auslastung).