Daniel Almeida, der sich mit der Entwicklung von Videocodecs bei Collabora beschäftigt, hat im Mailingliste der Linux-Kernel-Entwickler eine erste Implementierung des Tyr-Treibers für die ARM Mali-GPUs veröffentlicht. Dieser nutzt eine CSF (Command Stream Frontend) Technologie für Modelle wie Mali G310, G510 und G710. Der Treibercode ist in Rust geschrieben und umfasst etwas mehr als 600 Zeilen. Die Entwicklung des Tyr-Treibers erfolgt in Zusammenarbeit zwischen den Mitarbeitern von Collabora, Arm und Google.
Als Grundlage für den neuen Treiber wurden Komponenten des abstrakten Treibers rust_platform_driver sowie des Nova-Treibers, der für NVIDIA-GPUs entwickelt wurde und in Rust verfasst ist, verwendet. Letzterer wurde teilweise in den Kernel 6.15 integriert. Die Funktionalität zur Interaktion mit der Mali-GPU wurde aus dem bestehenden DRM-Treiber Panthor (Direct Rendering Manager), geschrieben in C, portiert. Die uAPI des Tyr-Treibers ist identisch mit der uAPI des Panthor-Treibers, was die Verwendung bereits bestehender Komponenten im Userspace ermöglicht.
Die CSF-Technologie, die ab der 10. Generation von Mali-GPUs zum Einsatz kommt, zeichnet sich durch die Auslagerung bestimmter Treiberfunktionen in die Firmware und die Einführung eines neuen Modells zur Durchführung von Aufgaben auf der GPU aus. In GPUs mit CSF-Schnittstelle wird anstelle des Modells, das auf der Übermittlung von Arbeitsketten basiert, ein auf Kommandoströmen basierendes Modell verwendet, bei dem der Kommandostrom von der Firmware geplant wird. Zur Organisation der Scheduler-Arbeiten ist ein separater Mikrocontroller Cortex-M7 in die GPU integriert, während für die Ausführung der CSF-Instruktionen eine spezielle Kommandowartungseinheit (Command Execution Unit) vorgesehen ist.
Die Funktionalität von Tyr liegt derzeit hinter dem Panthor-Treiber zurück, doch die Entwickler haben den Plan, die Lücke schrittweise zu schließen, bis ein Gleichgewicht zwischen den Treiberfähigkeiten erreicht ist. Fehlende Funktionen erfordern die Integration zusätzlicher Abstraktionen in den Kernel, um Treiber in Rust zu erstellen, weshalb die Entwicklung des Tyr-Treibers mit der Hinzufügung dieser Abstraktionen in den Kernel synchronisiert wird. Zum Beispiel fehlen im Kernel derzeit die Möglichkeiten zum Mapping von Speicher in Rust-Treibern für GPUs, die in einem noch nicht angenommenen Patch-Set für GPUVM entwickelt werden.
Quelle: opennet.ru
