Linux-Kernel: Google baut Mini-Treiber-Schicht für unbekannten Apex-Chip

Bereits Anfang April fragte der Google-Entwickler Simon Que auf der Linux-Kernel-Mailingliste(öffnet im neuen Fenster) nach der Vorgehensweise, um einen speziellen Treiber für ein Gerät namens Apex zu erstellen. Der Nachricht zufolge handelt es sich dabei um ein externes PCIe-Board mit einem anwendungsspezifischen Custom-Co-Prozessor samt MMU und einer DMA-Schnittstelle, um Daten mit dem Hostsystem auszutauschen. Die daraus offenbar hervorgegangenen Arbeiten hat der Kernel-Betreuer Greg Kroah-Hartman nun in den Staging-Bereich des Kernels eingepflegt(öffnet im neuen Fenster) .
Entstanden ist dafür das Treiber-Framework Gasket, was für "Google ASIC Software, Kernel Extensions, and Tools" steht. Die Idee des Frameworks ist es laut der Beschreibung, ein generisches und flexibles System zu erstellen, das kleine Kernel-Treiber unterstützten soll. Diese Kernel-Treiber können dann lediglich Geräte öffnen und schließen, den Speicher der PCI Base Address Registers (BAR) zuweisen, einige sehr wenige Ioctls(öffnet im neuen Fenster) verwalten und die Übersetzung der Seitentabellen übernehmen.
Sämtliche andere Funktionen werden von Userspace-Code übernommen. Interessant daran ist, dass bei der Verwendung des Gasket-Frameworks angenommen wird, dass immer nur genau ein Prozess Schreibzugriff auf den dazugehörigen Geräte-Knoten bekommt. Der bisher erste und einzige Gasket-Treiber ist ebenfalls Teil des nun eingepflegten Codes. Dabei handelt es sich um den Treiber für den Apex-Chip.
Mini-Treiber für Spezialhardware
Dass hier ein großer Teil der eigentlichen Logik nicht im Kernel umgesetzt wird, sondern eben im Userspace, ist je nach Anwendungszweck des Chips nicht unbedingt ungewöhnlich. Der ursprünglichen Idee zufolge wollte Google die Treiber-Unterstützung zunächst über das Userspace-I/O-System des Kernels(öffnet im neuen Fenster) umsetzen (UIO). Dieses ist für Situationen geschaffen worden, in denen für die Hardwareunterstützung nur ein sehr kleiner Kernel-Treiber notwendig ist, der zudem nicht mit dem Rest der Kernels und seinen Subsystemen interagiert. Auch hier übernimmt eine Userspace-Anwendung große Teile der Funktion.
Bei Apex handelt es sich offenbar um eine derartige Spezialhardware. Da die Funktionen von UIO aber den Bedürfnissen von Google wohl nicht genügten, ist Gasket entstanden. So ist insbesondere die Verwendung und Unterstützung einer MMU oder des Direktzugriffs per DMA mit UIO eben nicht vorgesehen.
Apex als Beschleunigerchip
Der beschriebene Aufbau des Treibers und des Gerätes sowie allen voran die Bezeichnung Gasket, in der wiederum die Abkürzung ASIC vorkommt, verweisen ziemlich klar darauf, dass Google mit Apex eine ganz bestimmte Anwendung mit Hilfe dieses Chips beschleunigt. Aus einer ersten Version des Treiber-Codes(öffnet im neuen Fenster) , die aus einem internen Chromium-Repository stammt, geht außerdem hervor, dass das Team zuvor offenbar wie üblich die endgültige Funktionsweise des Chips mit Hilfe eines FPGA erarbeitet hat.
Die tatsächliche Funktion von Apex, also was der Chip genau beschleunigen soll, geben die Patches allerdings nicht preis. Vor allem die Mitwirkung des Chromium-Teams, das bei Google für die Open-Source-Unterstützung der Chromebooks zuständig ist, weist jedoch daraufhin, dass Apex künftig in den Google-Laptops genutzt werden könnte. In dem Smartphone Pixel 2 verwendet Google bereits einen dedizierten Baustein zum Beschleunigen der Bildverarbeitung , für den Google mit Intel kooperiert hat. Die Desktop-Variante dieser Technik soll Intel unter dem Namen Monette Hill erstellen .