Bufferbloat (zu Deutsch etwa „aufgeblähter Puffer“) beschreibt in der Informatik das Problem unnötig stark gefüllter Puffer in der Netzwerk-Hardware wie etwa Routern. Durch Bufferbloat entsteht eine unnötige Verzögerung für die zu verarbeitenden Pakete, außerdem kann der Puffer seine Aufgabe, Lastspitzen abzufangen, womöglich nicht mehr erfüllen. Bufferbloat wurde bereits in den frühen Tagen des Internets (damals noch „Problem der vollen Puffer“) erkannt. Bereits 1989 gab es erste Vorschläge, diesem Problem zu begegnen.[1] Mit CoDel und FQ-CoDel stehen mittlerweile zwar Warteschlangenalgorithmen zur Verfügung, welche dem Problem zumindest teilweise abhelfen. Im Großteil der kommerziell erhältlichen Router für Heimanwender sind diese allerdings noch nicht implementiert,[2] sodass das Bufferbloat-Problem hier weiter besteht.

Problem Bearbeiten

In einem Computernetzwerk gibt es zahlreiche Puffer. Allein an einem Router existiert eine Vielzahl an Puffern auf den verschiedenen Ebenen die ein Paket während des Routings durchläuft. Puffer sind grundsätzlich notwendig um kurzfristige Netzüberlast (sogenannte Bursts) abzufangen. Bufferbloat tritt immer an Flaschenhals-Routern (auch: Bottleneck-Routern) auf, also Router, bei denen die Bandbreite der eingehenden Leitungen größer ist als die Bandbreite der ausgehenden Leitungen. Da die eingehenden Pakete mit einer höheren Geschwindigkeit ankommen als sie weitergeleitet werden, füllen sich die Puffer mit der Zeit,[3] TCP erhöht in der Congestion Avoidance Phase langsam seine Senderate um die optimale Senderate zu erreichen. Dadurch wird der Puffer mit der Zeit immer weiter gefüllt und hat keine Chance seinen Pufferfüllstand abzubauen. Diese „standing queue“ ist der Bufferbloat. TCP kann das Problem nicht erkennen, da alle Pakete weiterhin ankommen und nur Paketverluste als Überlast im Netz wahrgenommen werden.

 
Vergrößerung der Latenz durch Erhöhung der Senderate bei Bufferbloat

Wie in der Abbildung zu sehen, kann eine Anwendung bei leerem Puffer durch Erhöhung der Senderate zunächst den eigenen Durchsatz steigern. Diese Steigerung ist solange möglich, bis die Senderate der Anwendung exakt der Geschwindigkeit am Flaschenhals-Link entspricht. Steigert die Anwendung ihre eigene Senderate weiterhin, dann kann der effektive Durchsatz nicht mehr erhöht werden, dieser ist ja durch die Flaschenhals-Geschwindigkeit begrenzt. Allerdings erhöht sich mit jeder weiteren Steigerung der Senderate die Verzögerung für jedes folgende Paket, da im Flaschenhals-Router zunächst alle vorhergehenden Pakete aus der Warteschlange weitergeleitet werden müssen.

Das Problem wird vor allem an unkoordinierten und nicht administrierten Puffern erzeugt. Verstärkt wurde das Problem in den letzten Jahren außerdem durch günstigen Speicher und durch die Tendenz der Hersteller, den Puffer größer zu dimensionieren, um Paketverluste zu vermeiden.

Durch ständig hohen Füllstand verliert der Puffer allerdings die Möglichkeit, Paket-Bursts abzufangen. Schlimmer ist allerdings der oben beschriebene Delay. Dieser führt dazu, dass Echtzeit-Anwendungen, wie etwa Internet-Telefonie, Streaming, IoT oder Gaming gestört werden. Diese Anwendungen sind auf eine geringe Latenz angewiesen, um ihren Service in guter Qualität zu erbringen.

Lösungsansätze Bearbeiten

Wie oben beschrieben, wurde das Bufferbloat-Problem vor allem durch günstigen großen Speicher verschärft. Eine Lösungsmöglichkeit ist daher die Puffer extrem zu verkleinern bzw. komplett auf Puffer zu verzichten. Dies wurde in der Vergangenheit bereits erfolgreich getestet, eignet sich jedoch nur für Spezialanwendungen in Hochleistungsnetzen. Ein Beispiel für ein Netzwerk ohne Puffer war das analoge Telefonnetz. Allgemein kommt es im Internet allerdings oft zu Burst-Situationen, weshalb auf Puffer nicht verzichtet werden kann.

Moderne Router setzen deswegen auf eine aktive Pufferverwaltung. Hier werden bei zu hohem Delay nach einer gegebenen Wahrscheinlichkeitsverteilung zufällig ausgewählte Pakete am Puffer verworfen bzw. markiert. Dadurch können Sender und Empfänger feststellen, dass es zu einer Überlast am Router gekommen ist und ihre Senderate entsprechend drosseln. Die in der Praxis relevantesten Algorithmen zur aktiven Pufferverwaltung sind RED, CoDel[4] und PIE.[5] Für die letzten beiden Algorithmen gibt es außerdem eine Erweiterung, welche eine faire Verteilung der Warteschlangen-Kapazität (FQ) auf alle Flüsse realisiert. Diese beiden Erweiterungen heißen FQ-CoDel[6] bzw. FQ-PIE.

Einzelnachweise Bearbeiten

  1. V. Jacobson: Reported in Minutes of the Performance Working Group. In: Proceedings of the Cocoa Beach Internet Engineering Task Force. 1989, OCLC 83313327 (englisch).
  2. Bjorn Ivar Teigen, Kai Olav Ellefsen, Tor Skeie, Jim Torresen: Known Performance Issues Are Prevalent in Consumer WiFi Routers. In: 2021 17th International Conference on Network and Service Management (CNSM). IEEE, Izmir 2021, ISBN 978-3-903176-36-2, S. 254–258, doi:10.23919/CNSM52442.2021.9615514 (englisch).
  3. Jim Gettys, Kathleen Nichols: Bufferbloat: Dark Buffers in the Internet: Networks without effective AQM may again be vulnerable to congestion collapse. In: Queue. Band 9, Nr. 11, November 2011, ISSN 1542-7730, S. 40–54, doi:10.1145/2063166.2071893 (englisch).
  4. Controlled Delay Active Queue Management. In: IETF Datatracker. 5. Januar 2018 (ietf.org [abgerufen am 12. August 2022]).
  5. Rong Pan, Preethi Natarajan, Fred Baker, Greg White: RFC 8033 – Proportional Integral Controller Enhanced (PIE): A Lightweight Control Scheme to Address the Bufferbloat Problem. 28. Februar 2017 (englisch).
  6. Toke Høiland-Jørgensen, Paul McKenney, Jim Gettys, Eric Dumazet: RFC 8290 – The Flow Queue CoDel Packet Scheduler and Active Queue Management Algorithm. 5. Januar 2018 (englisch).