Der Linux Packet Scheduler

Der Linux Packet Scheduler ist eine KernelKomponente ähnlich Netfilter, dient im Gegensatz zu dieser aber der Steuerung und Kontrolle des Netzwerkverkehrs durch gezielte Änderung der Reihenfolge bzw. Verzögerung einzelner Pakete. Um also Traffic-Shaping, Traffic-Prioritisation, Traffic-Control, Bandbreitenmanagement, QoS (Quality of Service), TOS (Type of Service), etc. zu betreiben, muss man lediglich den Packet-Scheduler seines LinuxRouters richtig konfigurieren. ;-)

Die Filterung von Netzwerkverkehr ist nicht nur der Ports (i.e. Ebene 3) möglich, es gibt z.B. das Netfilter-Modul L7-Filter, das den Traffic auf Anwendungsebene (i.e. Ebene 7) analysiert und klassifiziert.

Grundlagen zum Traffic-Shaping finden sich auch auf der Seite FortgeschrittenesRouting.

Traffic Shaper kann man z.B. für ADSL-Verbindungen einsetzen, um zu verhindern, dass die Leitung z.B. durch einen Upload dicht gemacht wird.

In der c't 24/2002, Seite 224, findet sich eine sehr gute und verständliche Einführung in das Bandbreiten-Management (Traffic Shaping). Das fertige Skript gibt es hier.

fli4l/OptQos setzt sich mit QoS unter Linux allgemein und besonders mit dem QoS-Modul von fli4l auseinander.

Per Hand

Beispiel für tbf:

tc qdisc add dev ppp0 root tbf rate 110kbit latency 50ms burst 1540

kann man den ausgehenden Verkehr an seinem DSL-Router so verändern, dass man mit ssh auch noch arbeiten kann, wenn man eigentlich die ganze (Upload-)Bandbreite für ftp oder scp benutzt.

Seit kurzem gibt es Snitch - ein Tool das die Einrichtung von Regeln zum Traffic-Shaping vereinfachen soll.

Grundlagen

Die einfachste Methode stellt die Beeinflussung des Queueing-Algorithmus qdisc (Queueing Discipline) dar. Dazu gibt es folgende Möglichkeiten:

pfifo_fast

Das ist der Standard-Queueing-Algorithmus, hierbei werden alle Packete in der Reihefolge in der sie den Kernel erreichen auch versendet. Das TOS Flag eines Paketes wird allerdings beachtet.

tbf

tbf (Token Bucket Filter) ist ein Queueing-Algorithmus, der Packete mit einer bestimmten Geschwindigkeit durchlässt, mit der Möglichkeit kurzzeitige Spitzen zu erlauben.

sfq

sfq (Stochastic Fairness Queueing) ist eine einfache Implementierung der "fairen" Queueing-Algorithmen, d.h. alle Packete werden nach einem statistischen Verfahren möglichst gleichberechtigt behandelt.

Einsatzgebiete:

Um die Bandbreite auf einfache Weise zu begrenzen: tbf

Bei stark ausgelasteter Leitung, wenn man nicht will, dass eine Verbindung andere blockiert: sfq

Daneben gibt es noch die Klassenbasierten Algorithmen:

cbq

Class Based Queueing ist derzeit noch der Standard und für seine Komplexität bekannt.

htb

htb Hierarchical Token Bucket ist ab v2.4.20 im LinuxKernel enthalten und hat die gleiche Zielsetzung wie cbq, ist aber wesentlicher einfacher in der Anwendung. Für ältere Kernel- und iproute-Versionen gibt es Patches.1

fli4l/OptQos informiert über die Anwendung von htb, insbesondere in Bezug auf fli4l.

Wonder Shaper

Wenn man auf etwas Bandbreite verzichtet, kann man selbst während man schnelle Downloads durchführt noch gut nebenher surfen oder mit ssh arbeiten. Das Wundermittel hierzu nennt sich Wonder Shaper und ist ein Skript, das aus den Grunddaten der Verbindung ein ausgefeiltes Queueing-System einrichtet. Bei T-DSL empfehlen sich folgende Werte (am Anfang von wshaper eintragen):

DOWNLINK=650
UPLINK=110
DEV=ppp0

Und hier gibts den Wonder Shaper: http://lartc.org/wondershaper

Tip: Wenn man sehr kurze Latenzzeiten benötigt, z.B. für Spiele (siehe KategorieSpiele), empfiehlt es sich, DOWNLINK noch etwas niedriger zu machen (probieren geht hier über studieren).

Advanced

Eine nette HowTo, welche sich direkt auf ADSL bezieht: ADSL Bandwidth Management HOWTO (eng.) Diese enthält das Script myshaper, welches auf dem oben vorgestellten Wonder Shaper basiert und versucht, seine Sache noch besser zu machen.

Ein sehr ausführliches HOWTO ist das Linux Advanced Routing And Traffic Control HOWTO. Es ist eine sehr detaillierte Dokumentation. Man sollte aber den Teil mit CBQ überspringen und sich mehr mit HTB und SFQ beschäftigen.

Im Linux Magazin gibt es in der Ausgabe 02/2005 einen Artikel über Traffic Shaping im Userspace mit Trickle. Damit kann man ohne aufwendige Änderungen am System und ohne root-Rechte die Bandbreitennutzung von Programmen einstellen.

  1. Bei neueren RedHat-Kerneln (>=2.4.18-14) ist es auch bereits enthalten (iproute muss man aber aktualisieren). (1)

LinuxPacketScheduler (zuletzt geändert am 2012-12-05 09:27:35 durch stgt-4d039efc)