Linux: Kdbus schafft es nach über 2 Jahren in Kernel 4.1

Update Ferdinand Thommes
31 Kommentare
Linux: Kdbus schafft es nach über 2 Jahren in Kernel 4.1
Bild: Dave Conner | CC BY 2.0

Der in rund zwei Monaten erscheinende Kernel 4.1 wird als eine seiner wichtigen Neuerungen die Integration von Kdbus aufweisen können, wenn das IPC-Framework D-Bus nach Jahren der Entwicklung vom Userspace in den Kernel wandert. Hinter dem Projekt steht Kernel-Entwickler Greg Kroah-Hartman.

D-Bus ist die derzeit aktuelle Interprozesskommunikation (IPC), die den Datenaustausch von verschiedenen Applikationen untereinander und mit Systemkomponenten vorwiegend auf Desktopsystemen mit grafischer Oberfläche regelt. Sie ist ihren Vorgängern DCOP und CORBA deutlich überlegen, hat jedoch auch seit Jahren nicht abstellbare Probleme. Diese resultieren größtenteils in der Langsamkeit des vom freedesktop.org-Projekt entwickelten D-Bus. Zu den Vorteilen von D-Bus zählt, dass er über alle Desktop-Umgebungen hinweg funktioniert.

Um insbesondere die Probleme mit der Geschwindigkeit zu beheben, versuchte Kernel-Entwickler Greg Kroah-Hartman (GKH) rund zwei Jahre lang den Umzug von D-Bus vom Userspace in den Kernel vorzubereiten. Auch Kai Sievers und Daniel Mack von den Systemd-Entwicklern waren maßgeblich an der Implementation beteiligt, die nun mit Kernel 4.1 abgeschlossen werden soll. Selbst nachdem die Patches für den Kernel vorlagen, dauerte es noch über ein Jahr und vier Revisionen, um die Technik reifen zu lassen.

Andere Ansätze der vergangenen Jahre, einen High-Level-IPC-Mechanismus im Kernel zu etablieren, scheiterten dagegen alle, da sie den Qualitätsansprüchen der Entwickler nicht genügten. So wurde beispielsweise versucht, das Android-Kernel-Modul Binder umzufunktionieren, das auch Anteil bei der Implementation von Kdbus hatte. Einen Überblick verschafft ein Artikel über einen Vortrag von GKH.

Die Vorteile von Kdbus sind nicht von der Hand zu weisen. So tragen D-Bus-Nachrichten derzeit keine Zeitstempel. Zudem eignet sich D-Bus, bedingt durch sein Dasein im Userspace, nur bedingt zur Übertragung größerer Datenmengen. Das liegt an exzessiven Kopieraktionen. Lennart Poettering hat in einem Vortrag zu Kdbus vorgerechnet, dass für einen Vorgang bis zu zehn Kopiervorgänge vonnöten sind. Zudem ist im frühen Bootprozess D-Bus ebenso wenig aktiv wie in der späten Shutdown-Phase. Die Geschwindigkeit etwa eines Methodenaufrufs samt Antwort schrumpft von 200 ms bei D-Bus auf 6 ms bei Kdbus.

Das extra für Kdbus geschriebene Memfds dagegen ermöglicht einen Datenaustausch, der ganz ohne Kopiervorgänge auskommt, da hier lediglich noch ein File Descriptor (FD) mit einem Verweis auf einen Speicherbereich versendet wird. Laut den Entwicklern lohnt sich das allerdings erst ab Meldungen mit mehr als 512 KB.

Einige Teile von D-Bus verbleiben im Userspace und werden von Systemd bereitgestellt. Das bedeutet aber auch, dass Kdbus nur für Systeme mit Systemd verfügbar sein wird.

Update

Nach dem Vorschlag von GKH, Kdbus in den offiziellen Kernel 4.1 aufzunehmen, ist eine noch anhaltende Diskussion entflammt. Während zwei Entwickler sicherheitsrelevante und technische Argumente anbringen, die GKH gewillt ist, zu diskutieren, gleitet die Diskussion ansonsten in das Lager der Systemd-Gegner ab. Ein Vorschlag zur Lösung der Probleme ist eine persönliche Diskussionsrunde auf einer der Kernel-Konferenzen im Jahresverlauf. Derzeit hat der Patch zu Kdbus zwei Ablehnungen (NACK), Torvalds hat noch nicht explizit Stellung bezogen. Es bleibt also abzuwarten, ob Kdbus es in Kernel 4.1 schafft.