Wer schon einmal beobachtet hat, wie sein eigenes Netzwerk gelegentlich ohne erkennbaren Grund ins Stottern gerät, sollte hier weiterlesen. Die Ursache könnte Bufferbloat sein.
Der Ausdruck Bufferbloat bezeichnet ein Phänomen, bei dem in paketvermittelten Netzen ein Übermaß an Pufferung zu hohen Latenzen und Schwankungen in der Paketlaufzeit (Jitter) führt. Ein Problem, von dem jeder betroffen sein kann, der nicht aktiv vorbeugt. Die gute Nachricht ist aber: Die Aussetzer lassen sich mit heutigen Linux-Systemen gut in den Griff bekommen.
Was ist Bufferbloat?
Bufferbloat entsteht, wenn sich Traffic mit hohem Bandbreitenbedarf (wie Video Streaming, Backup oder Dropbox-Nutzung) mit Traffic mischt, der aus vielen kleinen Paketen besteht, und wenn dabei übermäßig viele Pakete in verschiedenen Puffern landen. Das passiert besonders bei Hosts, die mehrere Workloads parallel abarbeiten (etwa durch mehrere virtuelle Maschinen), oder in Situationen, in denen sich unterschiedliche Hosts eine Netzwerkanbindung teilen.
Der High-Bandwith-Traffic füllt dabei die Warteschlangen und erzeugt gleichzeitig einen Flaschenhals. Es gehen aber wegen der Puffer keine Pakete verloren. Daher wiederum setzen jene Mechanismen nicht ein, die sonst bei Netzwerküberlastung regulierend eingreifen, denn diese Mechanismen werden durch Paketverluste angestoßen. In der Folge verhungern viele der kleinen Pakete in Warteschlangen. Dabei entstehen hohe Latenzen, die Remote-Desktops oder VoIP unbenutzbar machen.
Das Problem muss der Admin auf verschiedenen Ebenen angehen: auf dem Host, den Virtualisierungsschichten, der Netzwerkhardware, beim Provider. Dieser Artikel konzentriert sich auf Lösungen für Linux-Hosts.
Bufferbloat vermeiden
Als wirksame Vorbeugung gegen Bufferbloat hat sich die korrekte Einstellung des Algorithmus für die Warteschlange des Netzwerks erwiesen (Queueing Discipline). Die gegenwärtig beste Einstellung ist FQ-Co Del (Fair Queue Codel), die zweitbeste Co Del (Controlled Delay). Es gibt derzeit aber noch zahlreiche andere Queueing Disciplines, hauptsächlich aus historischen Gründen. Einige arbeiten mit parallelen Warteschlangen jeweils für Traffic hoher Priorität, Bulk Traffic und den Rest. Andere wie RED wirken aktiv auf den Sender zurück und bitten ihn, die Geschwindigkeit zu drosseln.
Wieder andere Mechanismen, zum Beispiel Hierarchical Token Bucket, brauchen eine aufwändige Konfiguration und eher statische Workloads, um gut zu funktionieren. Viele diese Algorithmen waren zurzeit ihrer Entstehung eine gute Wahl, können das heutige Bufferbloat-Problem mit Desktop-Rechnern aber nicht mehr lösen.
Wartezeit im Blick
Als wirkungsvoll hat sich dagegen der von Kathie Nichols und Van Jacobson erfundene Mechanismus Controlled Delay [1] erwiesen. Co Del beobachtet den Füllungsgrad des Buffers und hat dabei besonders die vorderen Elemente im Blick, die im Begriff sind, die Warteschlange wieder zu verlassen.
Waren sie bis zu diesem Zeitpunkt schon zu lange (das heißt in der Regel länger als 5 Millisekunden) in der Queue, werden sie einfach verworfen. Der dadurch ausgelöste Paketverlust triggert dann wiederum die Mechanismen der TCP Congestion Control. Über das so genannte Sliding Window wirkt dabei der Empfänger auf den Sender zurück und lässt ihn so lange pausieren, bis wieder Speicherplatz auf der Empfängerseite frei ist.
Der Algorithmus FQ-Co Del [2] schaltet dem Codel-Verfahren eine Reihe paralleler Warteschlangen vor, die den Traffic sortieren. Er ist ebenfalls eine wirksame Vorbeugung gegen Bufferbloat.
Queueing Discipline konfigurieren
Wer schließlich überprüfen will, welcher Algorithmus für die Queueing Discipline bei ihm momentan eingestellt ist, der kann das folgende Kommando dafür benutzen:
cat /proc/sys/net/core/default_qdisc
Konfiguriert wird die zu verwendende Queueing Discipline in einer Datei aus den Verzeichnissen »/usr/lib/sysctl.d« , »/run/sysctl.d/« oder »/etc/sysctl.d/« , beispielsweise in dem File »/usr/lib/sysctl/50-default.conf« . In ihm sollte sich eine Zeile finden wie:
net.core.default_qdisc = fq_codel
Damit wäre FQ-Co Del eingestellt. Diese Konfiguration wird mit dem nächsten Reboot wirksam.
IT Best Practices
Das Projekt “IT Best Practices” http://itbestpractices.info ist ein von Alan Robertson ins Leben gerufenes Open-Source-Projekt, das es sich zum Ziel gesetzt hat, frei verfügbare Praxisanleitungen der IT zusammenzutragen und jedermann zugänglich zu machen. Ein besonderer Schwerpunkt soll dabei auf der IT-Sicherheit liegen, sodass viele der Verfahrensweisen dem Härten von Systemen dienen. Die in diesem Zusammenhang aufgestellten Regeln sollen maschinell verifizierbar sein.
Das Projekt möchte die Verfahrensweisen auch erklären, überlässt das Implementieren von Lösungen jedoch den diversen Tools. Das Linux-Magazin wird in Zusammenarbeit mit dem Projekt in loser Folge einige der Best Practices übersetzen und veröffentlichen.





