Kernel-Log – Was 2.6.38 bringt (3): Netzwerk
Der 38er-Kernel bringt eine neue Mesh-Implementierung, haufenweise neue und überarbeite LAN- und WLAN-Treiber und einige kleine Verbesserungen, die die Performance des Netzwerk-Subsystems steigern sollen.
- Thorsten Leemhuis
In der Nacht von Montag auf Dienstag hat Linus Torvalds die sechste Vorabversion von Linux 2.6.38 freigegeben. Er erwähnt dabei eine Korrektur für einen Fehler, der den Arbeitsspeicher durcheinander gebracht hat – vermutlich habe das Problem aber nur zwei Leute betroffen. Hinweise zum Veröffentlichungszeitpunkt von 2.6.38 gab er keine. Die zumeist wöchentlich veröffentlichte "Regression Reports" listen kürzlich 17 ungelöste Probleme, die 2.6.37 nicht zeigt; zudem waren noch 26 Fehler offen, die sich zwischen 2.6.36 und 2.6.37 eingeschlichen haben.
Das Kernel-Log nimmt die fortschreitende Entwicklung des 38er-Kernels zum Anlass, die Mini-Serie "Was 2.6.38 bringt" mit der Beschreibung der Neuerungen rund um Treiber und Infrastruktur für Netzwerk-Hardware fortzusetzen. Der erste Teil der Serie hatte sich mit den Änderungen rund um Grafik-Hardware beschäftigt, der zweite mit Dateisystemen; folgen werden in den kommenden Wochen noch Artikel zu Storage, Architektur- und Infrastruktur-Code sowie Treibern für Audio-, USB- und Video-Hardware.
LAN
Nach den bei 2.6.35 integrierten Techniken Receive Flow Steering (RFS) und Receive Packet Steering (RPS) hat Google-Entwickler Tom Herbert nun das Transmit Packet Steering (XPS) eingebracht (1, 2, 3). Darüber lässt sich bei Multiqueue-Netzwerkkarten eine Zuordnung zwischen Netzwerk-Queue und Prozessorkern festlegen, was die Effizienz der Prozessor-Caches in bestimmten Situationen verbessert und so den Datendurchsatz bei schnellen Netzwerkkarten steigert – die Idee dahinter ist somit die selbe wie bei RPS, nur das es nicht um das Empfangen, sondern das Senden von Netzwerkpaketen geht. Auf einem Testsystem mit 16 Prozessorkernen und einer Netzwerkkarte mit ebenso vielen Queues stieg die Sendeleistung durch XPS um 20 Prozent, wie Herbert im Commit-Kommentar erläutert – das Messverfahren war allerdings auch darauf ausgelegt, die Vorteile der Technik zu zeigen.
Wie schon bei 2.6.37 hat Eric Dumazet zahlreiche Low-Level-Optimierungen am Netzwerk-Code vorgenommen (u. a. 1, 2, 3, 4, 5). Er ist aber nicht der einzige Entwickler, der derzeit auf diesem Gebiet sehr aktiv ist – weitere Verbesserungen dieser Art finden sich über die Links im Abschnitt "Die kleinen Perlen" am Ende des Artikels. Google hat bei einigen Tests mit verschiedenen Betriebssystemen festgestellt, dass einige Standard-Vorgaben im TCP-Stack für moderne Internet-Kommunikation nicht unbedingt ideal sind. Eine daraufhin durch einen Google-Entwickler eingebrachte Änderung vergrößert das Initial Receive Window. Bei 2.6.39 soll ein darauf aufbauender Patch folgen, der auch das Initial Congestion Window vergrößert und dadurch Latenzen bei der Netzwerkkommunikation um 10 Prozent reduzieren soll; Hintergründe dazu finden sich in den Links zu den Patches sowie der LWN.net-Meldung "Increasing the TCP initial congestion window".
Bei den LAN-Treibern gab es zahlreiche kleinere Verbesserungen: cnic unterstützt nun etwa FCoE (Fibre Channel over Ethernet) auch beim Broadcom-Chip 57712, der VMware-Treiber Vmxnet3 bietet Multiqueue Support und ixgbe spricht auch die x540-Chips an.
WLAN
Die im Rahmen von open-mesh.org entwickelte und bislang im Staging-Bereich angesiedelte Mesh-Implementierung batman-adv (Better Approach To Mobile Ad-Hoc Networking Advanced) wurde so weit verbessert, dass sie mit 2.6.38 das Siegel "unreif" ablegt und vom Staging-Bereich in das Netzwerk-Subsystem umzieht (1, 2); einige Hintergründe zu Batman und Batman-adv liefert LWN.net in dem Artikel "Mesh networking with batman-adv".
Zum WLAN-Subsystem stieß der als experimentell gekennzeichnete Treiber rtl8192ce für Realteks 802.11n-PCIe-Chips RTL8188CE und RTL8192CE. Realtek hat diesen auf dem WLAN-Stack des Linux-Kernels aufbauenden Treiber ursprünglich selbst entwickelt; bei der Integration in den Linux-Kernel hat der langjährige Linux-WLAN-Entwickler Larry Finger geholfen; weitere Realtek-Treiber auf Basis des Linux-WLAN-Stack sind in Vorbereitung. Damit zeichnet sich langfristig eine Besserung der Lage bei WLAN-Treiber für Realtek-Chips ab, denn für die waren bislang häufig Treiber aus dem für unreifen Code gedachten Staging-Bereich nötig. Die arbeiten mit Programmen wie dem NetworkManager nicht perfekt zusammen und bleiben bei manchen Distributionen daher sogar außen vor.
Auch einige der WLAN-Treiber wurden um Unterstützung für neue Hardware erweitert – der Atheros-WLAN-Treiber ath9k spricht jetzt etwa den Chip AR9485 an (1, 2, 3) und iwlwifi unterstützt einige neue, in der aktualisierten Kconfig-Datei erwähnte WLAN-Chips von Intel wie die zweite Generation der 6000er-Chips. Der Treiber bietet jetzt auch Advance Power Management, was die Leistungsaufnahme bei Intels 6000g2b und dessen Nachfolgern reduzieren soll.
Die schon bei 2.6.37 im Treiber b43 ausgebaute, aber zu der Zeit noch unvollständige Unterstützung für einige 802.11n-WLAN-Chips von Broadcom wurde weiter überarbeitet und soll jetzt funktionieren (u. a. 1, 2, 3, 4); in dem Zuge wurde die b43-spezifische Konfigurations-Option zur Unterstützung von 802.11n-Chips umbenannt und verliert die Auszeichnung "Broken". Ähnlich verhält es sich bei den Rt2x00-Treibern für Ralink-Chips der RT30xx-Serie: Die anfangs rudimentäre und über Option zuschaltbare Unterstützung für die PCI-/PCIe-Chips RT3090, RT3091 und RT3092 sowie die USB-Chips RT3070, RT3071 und RT3072 ist nun regulärer Bestandteil der Treiber rt2800pci und rt2800usb. Eigene Optionen erhielt hingegen der noch rudimentäre Code zur Unterstützung der Ralink-Chips RT3370 (USB) und RT3390 (PCI/PCIe), denn er kann diese Chips noch nicht recht in Betrieb nehmen und richtet sich daher fürs erste nur an Tester und Entwickler.
Staccato und kleine Perlen
Staccato
- Der für Virtualisierung interessante Treiber macvlan bietet nun einen "Passthru"-Modus, in dem der Treiber viele Fähigkeiten des verwendenden Netzwerk-Chips weiterreicht, wodurch sich in Gastsystemen VLANs konfigurieren oder die MAC-Adresse verändern lassen.
- Mit der Policy-based Packet Dequeueing Infrastructure lässt sich beim Datagram Congestion Control Protocol (DCCP) die Priorität der ausgehenden Pakete beeinflussen.
- In das neu angelegte Verzeichnis drivers/nfc/ pflegten die Kernel-Hacker einen von Nokia-Entwicklern eingebrachten Treiber für den PN544 von NXP Semiconductors ein – ein Baustein für NFC (Near Field Communication), das für Bezahlsysteme interessant ist und in letzter Zeit wieder verstärkt Aufmerksamkeit auf sich zieht.
- Über das WLAN-Konfigurationsinterface nl80211 lassen sich nun auch die Antennen-Einstellungen verändern, sofern der Treiber das beherrscht; der WLAN-Stack MAC80211 bietet nun alles nötige für Hardware TX fragmentation offload.
- Einige weitere Informationen zu den Änderungen im Netwerk-Subsystem finden sich in einige der Git-Pull-Requests von Netzwerk-Subsystem-Verwalter David Miller (1, 2, 3, 4).
Die kleinen Perlen
Viele kleinere, aber keineswegs unbedeutende Neuerungen finden sich in der folgenden Liste mit den englischen Commit-Überschriften der jeweiligen Änderung. Die Einträge verlinken genau wie viele der Verweise im vorangegangenen Text auf das Webfrontend des von Linus Torvalds gepflegten Git-Zweigs mit den "offiziellen" Kernel-Quellen auf Kernel.org. Der über diese Links angezeigten Commit-Kommentar und der darunter ausgegebene Patch liefern zahlreiche weitere Informationen zur jeweiligen Änderungen.
Vor jedem Link finden sich in eckigen Klammern einige Buchstaben und Zahlen. Ein "C" kennzeichnet Patches mit Änderungen an Kconfig-Dateien, welche die Konfigurationsoptionen samt der zugehörigen Hilfetexte enthalten, die bei der Kernel-Konfiguration über "make menuconfig", "make xconfig" und ähnliche Werkzeuge angezeigt werden. Ein "D" steht bei Patches, die die Dokumentation verändern, die im Kernel-Zweig unterhalb von Documentation/ liegt. Ein "N" weist Änderungen aus, die eine neue Datei anlegen. Die Zahl vermittelt einen groben Eindruck zur Größe des Patches: eine "1" steht für Änderungen, die inklusive Kommentar zwischen 10 und 20 KByte groß sind, eine "2" für solche, die zwischen 20 und 30 KByte Umfang haben; Änderungen ohne Zahl sind kleiner als 10 KByte, Patches mit einer "9" hingegen 90 KByte oder größer.
LAN
- [
- [
2
] be2net: adding support for Lancer family of CNAs - [
- [
- [
N7
] bnx2x: add DCB support - [
5
] bnx2x: add FCoE ring - [
2
] bnx2x: adding dcbnl support - [
2
] bnx2x: Add Nic partitioning mode (57712 devices) - [
- [
- [
- [
D
] Documentation/networking/e1000e.txt: Update documentation - [
D
] Documentation/networking/e1000.txt: Update documentation - [
D
] Documentation/networking/igb.txt: update documentation - [
D
] Documentation/networking/igbvf.txt: Update documentation - [
D 1
] Documentation/networking/ixgbe.txt: Update ixgbe documentation - [
D
] Documentation/networking/ixgbevf.txt: Update documentation - [
D
] Documentation/networking: Update Intel Wired LAN docs - [
- [
2
] e1000: Add support for the CE4100 reference platform - [
- [
- [
- [
- [
- [
- [
- [
- [
- [
- [
2
] ixgbe: add support for x540 MAC - [
- [
- [
3
] ixgbe: cleanup flow director hash computation to improve performance - [
1
] ixgbe: further flow director performance optimizations - [
1
] ixgbe: rework Tx hang detection to fix reoccurring false Tx hangs - [
- [
- [
- [
- [
- [
- [
C 1
] net/fec: add dual fec support for mx28 - [
- [
- [
- [
- [
1
] qlcnic: Disable loopback support - [
- [
- [
- [
C 2
] r8169: remove the firmware of RTL8111D. - [
2
] r8169: use device dependent methods to access the MII registers. - [
- [
- [
- [
D
] stmmac: update the driver documentation - [
- [
- [
- [
- [
- [
- [
- [
- [
1
] via-rhine: hardware VLAN support - [
- [
- [
- [
1
] vxge: enable rxhash - [
WLAN
- [
C N1
] ath5k: Add AHB bus support. - [
- [
- [
C
] ath5k: Use generic EWMA library - [
- [
- [
- [
- [
- [
- [
- [
- [
2
] ath9k: rework tx queue selection and fix queue stopping/waking - [
- [
1
] b43: N-PHY: define registers names for 2056 radio - [
2
] b43: N-PHY: define registers names for 2056 radio - [
- [
5
] b43: N-PHY: fix values for PHY regs in channel tables of 2055 radio - [
- [
- [
1
] b43: N-PHY: update init tables - [
- [
- [
- [
- [
- [
- [
- [
D
] cfg80211: include CQM packet loss docs - [
N2
] cfg80211/mac80211: add mesh join/leave commands - [
1
] cfg80211/nl80211: separate unicast/multicast default TX keys - [
- [
- [
N9
] iwlagn: new RXON processing for modern devices - [
- [
- [
- [
- [
- [
- [
- [
- [
1
] iwlwifi: change default led mode for different devices - [
- [
- [
1
] iwlwifi: use antenna information in EEPROM - [
C N
] lib: Add generic exponentially weighted moving average (EWMA) function - [
- [
D
] mac80211: add doc short section on LED triggers - [
- [
- [
- [
- [
1
] mac80211: add throughput based LED blink trigger - [
D
] mac80211: document aggregation - [
D
] mac80211: document station handling - [
D
] mac80211: document workqueue - [
1
] mac80211: implement hardware offload for remain-on-channel - [
- [
- [
- [
1
] mac80211: Let userspace enable and configure vendor specific path selection. - [
D
] mac80211: publish docs for _ni functions - [
D
] mac80211: publish interface iteration docs - [
D
] mac80211: publish SMPS docs - [
D
] mac80211: publish some misc docs - [
D
] mac80211: publish some rate control docs - [
1
] mac80211: serialize rx path workers - [
- [
1
] mac80211: support separate default keys - [
- [
- [
- [
1
] nl80211/cfg80211: extend mgmt-tx API for off-channel - [
C
] nl80211/mac80211: Report signal average - [
- [
- [
C
] rt2x00: Clean up Kconfig for RT2800 devices. - [
- [
- [
- [
C
] wl1271: 11n Support, functionality and configuration ability - [
C N1
] wl1271_sdio_test: Add module for sdio RX/TX testing - [
- [
- [
- [
- [
Various
- [
- [
N
] Bluetooth: Add initial Bluetooth Management interface callbacks - [
N
] bonding: add the debugfs facility to the bonding driver - [
1
] bridge: add RCU annotation to bridge multicast table - [
N
] caif: bugfix - add caif headers for userspace usage. - [
C N1
] can: add driver for Softing card - [
C N5
] can: add driver for Softing card - [
C N2
] can: add slcan driver for serial/USB-serial CAN adapters - [
D
] clarify documentation for net.ipv4.igmp_max_memberships - [
D
] dccp: make upper bound for seq_window consistent on 32/64 bit - [
- [
- [
- [
- [
- [
- [
2
] net: Abstract away all dst_entry metrics accesses. - [
- [
- [
D
] net: change ip_default_ttl documentation - [
N
] net_dcb: add application notifiers - [
- [
- [
- [
- [
- [
- [
- [
- [
- [
- [
1
] qeth: support ipv6 query arp cache for HiperSockets - [
- [
C 3
] tipc: cleanup various cosmetic whitespace issues - [
- [
- [
- [
- [
- [
- [
- [
- [
- [
C
] tipc: Finish streamlining of debugging code - [
1
] tipc: Prune down link-specific debugging code - [
- [
3
] tipc: remove calls to dbg() and msg_dbg() - [
- [
- [
- [
- [
- [
2
] tipc: Remove prototype code for supporting inter-cluster routing - [
C 2
] tipc: Remove prototype code for supporting multiple clusters - [
C 2
] tipc: Remove prototype code for supporting multiple zones - [
2
] tipc: Remove prototype code for supporting slave nodes - [
- [
- [
- [
1
] tipc: Remove user registry subsystem - [
- [
- [
- [
- [
Weitere Hintergründe und Informationen rund um Entwicklungen im Linux-Kernel und dessen Umfeld finden sich in den vorangegangenen Kernel-Logs auf heise open. Neue Ausgaben des Kernel-Logs werden auf den Identi.ca- und Twitter-Konten "@kernellog" erwähnt; die englischen, bei den Kollegen von "The H" erscheinenden Übersetzungen auf den Identi.ca- und Twitter-Konten "@kernellog2". Gelegentlich zwitschert der Autor des Kernel-Logs unabhängig davon über einige Kernel-Log-Themen bei Identi.ca und Twitter als "@kernellogauthor". (thl). (thl)