Eine Gruppe von Forschern aus Cambridge und London hat einen neuen Ansatz für Netzwerk-Stacks umgesetzt. Die bisher bekannten Stacks sind eher Generallisten, sie können alles. Sind dabei aber eher für lange Verbindungen und große Transfers ausgelegt. Die Datenübertragungen sind heute im Netz aber oftmals eher klein (Stichwort Ajax, RTC, Twitter, …).
Die Forscher legen ihren Gedanken zugrunde, das die meisten Services im Netz auf speziell dafür abgestellten Maschinen laufen. Teilweise würden sogar mehrere Maschinen für einen einzigen Dienst laufen. All diese Maschinen mit dem kompletten Allrounder-Stack auszustatten ist ineffizient. Eine Spezialisierung sei angebracht. Ein Problem der Allrounder-Technik sei weiterhin, das die Informationen in vielen Schritten verarbeitet werden, und somit jedes Byte oft angefasst und kopiert wird.
Die Forscher sind nun bei gegangen, und haben den Speicher der Netzwerkkarte in den Speicher für den Userspace gemapt. Die Kombination aus Anwendungs-Speicher und Netzwerk-Stack-Speicher nennen sie „Cross-Layer-Optimization“. Zusätzlich werden die zu liefernden Inhalte im voraus geladen und paketiert. Nun müssen bei einer Anfrage nur noch die fertigen Pakete in das Netz geschickt werden. Das entlastet die CPU und hilft bei der Auslastung des Netzwerks.
Ein weitere Optimierung ergibt sich, wenn mit Data Direct I/O die Netzwerkkarten über den PCIe-Bus direkt auf den Last-Level-Cache des Prozessors zugreifen können. Diesen Ansatz nennen sie „Zerocopy“.
Der Webserver nennt sich „Sandstorm“ und ist nur für statische Inhalte gedacht. Diese Aufgabe erledigt er aber nach Angaben der Forscher um ein vielfaches besser als alle anderen Webserver.
Nach Angaben der Wissenschaftler sind bisherige Konstellationen nicht in der Lage Gigabit-Leitungen wirklich auszulasten, da die Prozessorlast zu hoch sei.
In einem konkreten Fall sollte ein herkömmlicher Webserver 8 KByte große Dateien ausliefern. Die CPU-Last betrug dabei zwar 85 Prozent, doch die Auslastung der 10-Gigabit/s-Leitung nur rund 50 Prozent. (heise)
Interessanter sind die Ergebnisse auf der modernen Hardware, die Data Direct I/O unterstützt und somit DMA-Zugriffe über PCIe von der Netzwerkkarte direkt auf den Last-Level Cache (LLC) des Prozessors zulässt. Sandstorm kann dadurch eine einzelne 10-Gigabit-Ethernet-Karte bei nur 13 Prozetn CPU-Last vollständig ausnutzen, skaliert linear bis zu sechs Netzwerkkarten und erreicht damit einen Datendurchsatz von 55 GBit/s bei 73 Prozent CPU-Last. Die konventionellen Stacks kommen den Forschern zufolge nicht über 16 GBit/s bei vier Netzwerkkarten. (golem)
Die Ausarbeitung findet sich unter: Network Stack Specialization for Performance (pdf, englisch)