Kernel-Log – Was 3.9 bringt (3): Treiber & Netzwerk

Linux 3.9 enthält Treiber für neue Grafikchips von AMD und im Sommer erwartete WLAN-Chips von Intel. Durch Änderungen am Netzwerk-Subsystem soll der Kernel den Netzwerkverkehr nun besser auf mehrere Prozessorkerne verteilen können.

In Pocket speichern vorlesen Druckansicht 4 Kommentare lesen
Lesezeit: 44 Min.
Von
  • Thorsten Leemhuis
Inhaltsverzeichnis

Bei der Freigabe der siebten Vorabversion von Linux 3.9 macht Linus Torvalds keine Andeutungen, wann er 3.9 veröffentlichen will. Da aber die meisten der aufgenommenen Korrekturen laut Torvalds klein waren, könnte der RC7 die letzte Vorabversion des Kernels 3.9 sein, wie es Torvalds schon beim RC6 angedeutet hatte.

Sofern keine schwerwiegenden Fehler mehr auftauchen, könnte der Linux-Kernel 3.9 schon am nächsten Wochenende, mit ziemlicher Sicherheit aber noch im April erscheinen. Die folgende Beschreibung zu den Neuerungen an Treibern und Netzwerk-Unterstützung soll daher nun die Kernel-Log-Mini-Serie "Was 3.9 bringt" abschließen. Die ersten beiden Teile der Serie hatten sich bereits mit den den Änderungen beschäftigt, die die Kernel-Entwickler in den Bereichen Dateisysteme und Storage sowie Plattform- und Infrastuktur-Code vorgenommen haben.

Der Radeon-Grafiktreiber des Kernel unterstützt nun die Oland-Grafikchips, die auf Radeon-HD-Karten der Serien 8500 und 8600 sitzen (u. a. 1, 2, 3). Auch Unterstützung für AMDs in Kürze erwarteten APUs der Richland-Generation stieß zum Kernel (1, 2). Als Deprecated (überholt) gilt nun der Code, über den der Radeon-Treiber von X.org früher die Bildschirmauflösung und einige andere Grafikeigenschaften direkt setzen konnte. Aktuelle Versionen des X.org-Treibers beherrschen dieses UMS (User Mode-Setting) aber ohnehin nicht mehr und sind für diese Aufgaben auf das KMS (Kernel-based Mode-Setting) des Radeon-Treibers im Kernel angewiesen.

Der Nouveau-Treiber erhielt einige experimentelle Funktionen zur automatischen oder manuellen Lüfterregelung bei den GPUs NV40 und NV50, die auf den GeForce-Grafikchips 6xxx bis 9xxx und 1xx bis 3xx sitzen (u. a. 1, 2, 3, 4). Nvidia-Entwickler Aaron Plattner hat die "prime helpers" eingebracht, über die Treiber Teilfunktionen des DMA-Buffer-Sharing-Mechanismus Dma_buf/Prime nutzen können, um diese nicht immer wieder neu implementieren zu müssen. Dma_buf/Prime ist für Hybridgrafiklösungen oder Embedded-Hardware interessant, damit mehrere Chips gemeinsam per DMA auf einen Speicherbereich zugreifen können; das vermeidet unnötiges, Zeit kostendes Kopieren von Daten durch den Prozessor. Die Kernel-Schnittstellen zur Nutzung von Dma_buf/Prime tragen allerdings eine Kennzeichnung, die klarstellt, dass nur GPL-kompatibler Code sie nutzen darf, daher verwendet Nvidia sie im proprietären Treiber nicht. Der von Plattner eingebrachte Code trägt keine solche Kennzeichnung; die Beta eines neuen Grafiktreibers von Nvidia nutzt die Schnittstelle schon, um damit erstmals Optimus-Unterstützung zu bieten.

Der Grafiktreiber für Intels kommende Haswell-Prozessoren soll deren Grafikkern nun stromsparender konfigurieren, wenn nur eine Display-Pipe mit dem Embedded-DisplayPort (EDP) verwendet wird, wie es bei manchem Notebook der Fall ist. Der Grafiktreiber für OMAP-Prozessoren von Texas Instruments beherrscht nun Power-Management besser und unterstützt jetzt den OMAP5. Der Treiber ist zudem zu den anderen KMS-Grafiktreibern umgezogen; bislang war er im Staging-Bereich zu Hause, wo unausgegorener Kernel-Code liegt.

Durch größere Änderungen an den Locking-Mechanismen der Grafiktreiber soll das Bild beim Prüfen auf angeschlossene Bildschirme nicht mehr für einen kurzen Moment einfrieren, wie es bei den derzeit aktuellen Linux-Versionen der Fall ist. Einige weitere Änderungen am wichtigsten Subsystem für Grafiktreiber nennt der Kommentar mit dem Merge, der das Gros der Änderung für dieses Subsystem gebracht hat.

TCP- und UDP-Sockets unterstützten jetzt die Option SO_REUSEPORT, durch die mehrere Sockets auf demselben Port lauschen können. Verschiedene Threads eines Webservers können dadurch jeweils einen eigenen Socket öffnen, der auf Port 80 lauscht; dort eingehende Verbindungen verteilt der Kernel gleichmäßig auf die Sockets. Das soll zu einer besseren Verteilung der Arbeit auf die zur Verfügung stehenden Prozessor-Kerne führen.

Laut dem Google-Entwickler Tom Herbert, der diese Erweiterung programmiert hat, kann der neue Ansatz einen bislang in bestimmten Situationen entstehenden Flaschenhals vermeiden, wenn lediglich ein Thread die neuen Verbindungen annimmt und dann an andere Threads verteilt. Der neue Ansatz soll zudem eine stark ungleichmäßige Verteilung der Arbeit auf Prozessorkerne verhindern, die laut Herbert entstehen kann, wenn mehrere Threads auf einem einzelnen Socket lauschen. Details zu diesen Problemen und anderen Aspekten des Ansatzes liefern der Kommentar im Merge von SO_REUSEPORT und ein LWN.net-Artikel.

Linux 3.9 wird einen Treiber für Intels WLAN-Bausteine der 7000er-Serie mitbringen, die offenbar die schnellen Übertragungsmodi von IEEE 802.11ac unterstützen sollen (1, 2). Das Unternehmen scheint sie in einigen Monaten einführen zu wollen – vermutlich im Paket mit Haswell-basierten Notebook-Prozessoren, die im Sommer auf den Markt kommen dürften.

Das Radarsystem des Deutschen Wetterdienstes leidet inzwischen erkennbar unter Störungen fehlerhafter WLAN-Basen: Vor allem um den Standort Berlin-Tempelhof sind zahlreiche Speichen erkennbar, die Niederschlag anzeigen, wo keiner fällt.

(Bild: http://www.heise.de/artikel-archiv/ct/2013/07/090_WLAN-Kabel)

Der Mesh-Stack bietet jetzt grundlegende Unterstützung für Stromsparfunktionen. Die Kernel-Entwickler haben die Funktionen zur Erkennen eines Radars erweitert (1, 2, 3); damit verbessern sie die Unterstützung für Dynamic Frequency Selection (DFS), damit die WLAN-Hardware bestimmte Frequenzbereiche im 5-GHz-Bereich meidet, wenn dort ein Radar gestört würde.

Zum Ethernet-Subsystem stieß ein Treiber für den Baustein AX88179, den verschiedene Hersteller in USB-3.0-Gigabit-LAN-Hardware einsetzen. Der Netzwerkstack beherrscht jetzt das in IEEE 802.1Q-2011 spezifizierte Multiple Registration Protocol (MRP), das aus dem Protokoll Generic Attribute Registration Protocol (GARP) hervorgegangen ist (1 2). Damit können Server, Router und Switches untereinander Informationen zu VLANs (MVRP) und Multicast-Gruppen (MVRP) im LAN austauschen.

Netpoll arbeitet nun auch mit IPv6 und der Connection-Tracking-Code von Netfilter unterstützt nun "connection labels". Die Kernel-Entwickler haben zudem einige alte Treiber entfernt, die vermutlich kaum noch genutzt wurden oder ohnehin nicht mehr funktionierten; darunter Treiber für den 3com 3c501 sowie die Treiber eepro und eexpress für ISA-LAN-Chips von Intel. Weitere Änderungen am Netzwerksubsystem listet der Kommentar zum Merge, der die wichtigsten Änderungen dieses Subsystems für Linux 3.9 enthalten hat.

Größere Umbauarbeiten sollen den Treibercode zur Konfiguration der in vielen modernen Desktop-PCs und Notebook verwendeten HD-Audio-Codecs schlanker und robuster machen. Neu ist Unterstützung für den Sound-Chip Creative CA0132, den unter anderem Gigabyte auf seinem High-End-Mainboard G1.Sniper 3 verbaut (1, 2). Weitere wichtige Änderungen an den Audio-Treibern erwähnt der Kommentar eines Git-Merge.

Zum Media-Subsystem mit seinen Treibern für Video-Hardware stieß unter anderem ein Treiber für den Tuner TS2020 von Montage Technology . Mit den Änderungen an den Platform-Treibern stieß ein Treiber zum Kernel, der eChromebooks verschiedener Hersteller unterstützt; darunter auch das Chromebook Pixel (1, 2, 3). Ebenfalls neu ist ein Treiber für APA-I2C-Trackpads von Cypress; ein solches steckt in Samsungs ARM Series 3 Chromebook, das derzeit ein beliebtes Testobjekt bei Linux-Entwicklern mit Interesse an ARM ist. Neu ist auch ein Treiber für das Cypress PS/2 Trackpad, das Dell in seinem Ultrabook mit Ubuntu 12.04 verbaut. Das USB-Subsystem bringt nun Unterstützung für das SRW-S1 Steering Wheel von Steelseries mit.

Im Staging-Bereich haben die Entwickler unter anderem den alten Zcache-Code gelöscht und durch Zcache2 ersetzt (u. a. 1, 2, 3, 4, 5, 6); wie der Vorläufer versucht auch die neue Ausführung den Page-Cache sowie Daten, die sonst in den Swap-Speicher verlagert werden müssten, komprimiert im Arbeitsspeicher abzulegen.