Login
Newsletter
Werbung

Fr, 10. Oktober 2014, 16:53

Software::Kernel

Linux 3.18 erhält schnellere Netzwerk-Sendefunktion

Die Linux-Kernel-Entwickler fanden eine bisher übersehene Möglichkeit, das Versenden von Netzwerkpaketen weiter zu beschleunigen. Die Resultate dieser Arbeit sollten in Linux 3.18 zu sehen sein, mit dem Anfang Dezember zu rechnen ist.

Larry Ewing

Linux hat die funktionsreichste, beste und - mit Ausnahme vielleicht von FreeBSD, das diese Krone auch beansprucht - schnellste Netzwerkimplementation aller Betriebssysteme. Umso überraschender mag es erscheinen, dass das Netzwerk-Subsystem von Linux bisher eine große Gelegenheit zur Beschleunigung der Datenübertragungen ausgelassen hat. Bis Linux 3.17 wurde jedes Datenpaket in der Netzwerkschicht einzeln abgefertigt.

Beim Senden von Paketen müssen für jedes Paket nacheinander verschiedene Aktionen durchgeführt werden, darunter das Belegen von Sperren (möglicherweise verbunden mit Wartezeiten), Weitergabe des Pakets an den Treiber, Einreihen in eine der Sendewarteschlangen des Geräts und Initiieren des Transfers. Einige dieser Aktionen können recht zeitaufwendig sein, werden aber trotzdem für jedes Paket ausgeführt. Das wäre nicht in jedem Fall nötig, wenn man mehrere Pakete gemeinsam behandeln könnte. Dazu kommt, dass Netzwerkpakete die Eigenschaft haben, oft in größerer Zahl aufzutreten, wenn zum Beispiel ein Transfer größerer Datenmengen ansteht.

Der kommende Linux-Kernel 3.18 wird sich diese Eigenschaft zunutze machen, um den Datentransfer weiter zu optimieren. An der noch laufenden Arbeit sind mehrere Entwickler beteiligt, von denen jeder ein Stück zu dem Puzzle beiträgt. Nach ersten Patches, die wieder verworfen wurden, implementierte der Leiter des Netzwerk-Subsystems David Miller ein einfaches Flag namens xmit_more in der Datenstruktur sk_buff, die Datenpakete beschreibt. Dieses Flag zeigt an, ob auf ein Paket weitere Pakete folgen. Treiber, die dieses Flag auswerten, können den Start einer Übertragung verzögern, bis sie genug Pakete haben, um diese effizienter zu versenden. Einige Treiber wurden bereits geändert, aber wohl bei weitem nicht alle, und es mag auch Treiber geben, bei denen es sich nicht lohnt.

Mit dieser Änderung vermeiden die Kernel-Entwickler, neue Systemaufrufe oder neue Funktionen an der Treiber-Schnittstelle zu implementieren. Das System optimiert alles selbst, ohne dass die Anwendungen anzupassen wären. Die Änderungen waren insgesamt sehr klein, da die nötige Funktionalität größtenteils schon vorhanden war oder nur wenig dazu fehlte. Der Effekt der Änderungen wird jedoch groß sein. So kann nach ersten Messungen eine 40 Gbit-Netzwerkkarte vollständig ausgelastet werden, selbst wenn man auf die Hardware-Beschleunigung der Karte verzichtet. Zuvor dürfte das nur unter Zuhilfenahme der Hardware-Beschleunigung möglich gewesen sein. Bei langsameren Netzwerken ist zwar keine Beschleunigung zu erwarten, aber hier dürfte die Änderung die CPU-Auslastung senken.

Werbung
Kommentare (Insgesamt: 8 || Alle anzeigen )
Re[3]: Benchmark (bumbum, Mo, 13. Oktober 2014)
Re[2]: Benchmark (dgrat, So, 12. Oktober 2014)
Re: Benchmark (Hä?, So, 12. Oktober 2014)
Benchmark (dgrat, So, 12. Oktober 2014)
Re: Schön zu haben, aber wohl nur für Großnetzwerke spürbar? (Herzlos, Sa, 11. Oktober 2014)
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung