Login
Newsletter
Werbung

Mo, 16. März 2015, 17:55

Software::Kernel

D-Bus bald offiziell im Kernel

Die Implementierung des Protokolls D-Bus für den Linux-Kernel könnte im Juni dieses Jahres nach jahrelangen Arbeiten endlich offiziell werden. Greg Kroah-Hartman hat einen entsprechenden Patch vorgestellt, der in Linux 4.1 integriert werden soll.

Larry Ewing

D-Bus ist ein Nachrichtenbus-System, mit dem Anwendungen auf einfache Weise miteinander kommunizieren können. Es stellt sowohl einen System-Daemon (für Ereignisse wie »neues Gerät hinzugefügt« oder »Druckwarteschlange geändert«) als auch einen Sitzungs-Daemon pro eingeloggtem Benutzer (für allgemeine Kommunikation zwischen Anwendungen) bereit. D-Bus wurde unter dem Dach von freedesktop.org entwickelt und ist mindestens seit 2005 ein Standard für Linux-Systeme.

Während D-Bus sich zur Steuerung von Anwendungen bewährt hat, ist es zur Übertragung von nennenswerten Datenmengen nicht geeignet, da es nicht effizient genug ist. Es ist so gesehen keine vollständig brauchbare Interprozess-Kommunikation. Diese existiert unter Linux zwar in Form von anderen Mechanismen, aber konkurrierende Systeme einschließlich Android sind hierbei bereits weiter und bringen eine vollständige und leichter zu programmierende Implementation mit. Nachdem dieses Problem erkannt wurde, gab es mehrere Anläufe, D-Bus in den Kernel zu verlagern, da dies die Effizienz enorm steigern würde. Doch erst der dritte Versuch, der maßgeblich von Lennart Poettering, Kay Sievers und Daniel Mack entwickelt und von Greg Kroah-Hartman unterstützt wurde, konnte schließlich technisch überzeugen.

Leicht hatte es aber auch diese, kdbus genannte, Implementation nicht. Vorgestellt wurde sie in den Grundzügen bereits vor 14 Monaten, nach der Komplettierung wurde sie insgesamt viermal als Patch auf der Kernel-Mailingliste vorgestellt und diskutiert. Dabei wurden zahlreiche Verbesserungsvorschläge gemacht, die zur gründlichen Überarbeitung vieler Teile des Codes führten. Das ist jedoch der normale Weg für Änderungen, die tiefgreifend sind, und soll sicherstellen, dass das Design keine Schwächen aufweist, die man nicht mehr ändern kann.

Die zuletzt vorgelegte Version des Patches wurde bis auf geringfügige Korrekturen nicht mehr kritisiert, was Greg Kroah-Hartman nun dazu veranlasste, Stephen Rothwell um die Aufnahme in den Test-Kernel Linux-next zu bitten, die prompt vollzogen wurde. Damit wird der Patch, während die Testphase für Linux 4.0 noch läuft, bereits für die Version 4.1 getestet. Nach der Freigabe von Linux 4.0 plant Kroah-Hartman, den Patch sofort für die Aufnahme in Linux 4.1 an Linus Torvalds zu senden, der keinen Anlass sehen dürfte, die Änderung abzulehnen. Denn dass kdbus kommt, ist längst klar. Unklar war nur, wann die Implementation reif genug sein würde.

Zahlreiche Gründe, warum kdbus sinnvoll ist, sind in Kroah-Hartmans Patch aufgezählt. Die meisten wurden bereits 2014 von Lennart Poettering in Vorträgen erläutert. Unter anderem ist D-Bus als Daemon zu langsam für große Datenmengen. Es werden keine Zugriffsrechte-Informationen mit übertragen, ebenso fehlen Zeitstempel. Es ist in der frühen Bootphase nicht verfügbar, die Verbindung mit Sicherheits-Frameworks wie SELinux erfolgt in Benutzerprozessen und es gibt Race-Conditions bei der Aktivierung und Deaktivierung von Diensten.

kdbus soll mit all den genannten Problemen aufräumen und die effiziente Übertragung von Datenmengen selbst im Gigabyte-Bereich ermöglichen. kdbus wurde als Gerätetreiber implementiert, um den Netzwerkstack zu umgehen. Namen werden ähnlich wie beim bisherigen D-Bus registriert, und Nachrichten besitzen einen Timeout. Statt bis zu zehn Kopiervorgänge in D-Bus werden Nachrichten bei kdbus nur zweimal kopiert, und es gibt auch eine Option für das Übertragen ohne Kopieren, die aber nur bei größeren Nachrichten lohnt. Möglich macht das der speziell für kdbus entwickelte memfd-Mechanismus. memfd hat Ähnlichkeiten mit Shared Memory, das mit mmap allokiert wurde, da es über einen Dateideskriptor verwaltet wird. Dieser Deskriptor kann jedoch »versiegelt« werden, wonach sein Inhalt nicht mehr änderbar ist. Android besitzt einen ähnlichen Mechanismus namens »ashmem«. Nachrichten werden erst versiegelt und dann verschickt, das Senden lässt sich so beliebig oft wiederholen. Ein Proxy-Server, der als Daemon-Prozess läuft, kann den bisherigen D-Bus-Daemon ersetzen und für die Kompatibilität mit Anwendungen sorgen, die noch nicht das kdbus-API benutzen.

kdbus hat das Potential, in zahlreichen bestehenden Anwendungen eingesetzt zu werden, die bisher speziell entwickelte Mechanismen verwenden mussten, weil D-Bus zu langsam war. Durch diese Vereinheitlichung wird redundanter Code eingespart und die Fehlerquellen werden reduziert. Genannt werden in der kdbus-Dokumentation das Authentifikations-Framework von Tizen, PulseAudio, Wayland und Logging-Daemonen. Zudem werden Latenzen beim Booten reduziert und Operationen ermöglicht, die bisher nicht auf sichere Weise möglich waren.

Werbung
Kommentare (Insgesamt: 19 || Alle anzeigen )
Re: Gut geschriebener Artikel (JumpLink, Mi, 18. März 2015)
Liest sich wie ein Marketing-Flyer (Martin Steigerwald, Di, 17. März 2015)
Re: Kommentare ausblenden (mw, Di, 17. März 2015)
Re[2]: Gut geschriebener Artikel (happyholidayeveryone, Di, 17. März 2015)
Re[2]: Gut geschriebener Artikel (glasen, Di, 17. März 2015)
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung