Nova: Nowy sterownik Rust dla procesorów graficznych NVIDIA dostępny w systemie Linux 6.15

Nowa, rdza

Rok temu Red Hat ogłosiłdo ich pracy nad nowym sterownikiem open source do zarządzania procesorami graficznymi NVIDIA w systemach Linux,Nowy". W przeciwieństwie do swojego poprzednika, Nouveau, Nova opiera się na delegowaniu operacji inicjalizacji i kontroli do mikrokontrolera GSP (GPU System Processor) zintegrowanego z samą kartą graficzną.

A teraz, w ciągu kilku miesięcy (w przeciwieństwie do innych nowych projektów), wygląda na to, że sterownik osiągnął wystarczającą dojrzałość, aby zaproponować go jako zestaw poprawek do zintegrowania z jądrem Linux 6.15, gdyż jest to pierwotna wersja sterownika dla systemu Linux.

Nowa, to jest zaprojektowany jako moduł jądra Linux, który opiera się na podsystemie DRM do zarządzania interakcją z GPU z przestrzeni użytkownika. Jego rozwój postrzegany jest jako ewolucja Nouveau, przy czym kluczową różnicą jest to, że jest on przeznaczony wyłącznie dla procesorów graficznych z oprogramowaniem układowym GSP, co obejmuje modele z serii NVIDIA GeForce RTX 2000 opartej na mikroarchitekturze Turing.

Różnice w stosunku do Nouveau i zalety Nova

Nova dąży do rozwiązania problemów strukturalnych Nouveau, co wymaga gruntownego przeglądu w obszarach takich jak zarządzanie pamięcią (VMM/MMU) i blokady w kodzie. W przeciwieństwie do Nouveau, Nova korzysta z oprogramowania układowego GSP firmy NVIDIA, co upraszcza inicjalizację i kontrolę procesora graficznego, redukując złożoność kodu i eliminując potrzebę obsługi starszych kart.

Kod Nova jest napisane w języku Rust, język, który nie tylko zwiększa bezpieczeństwo poprzez minimalizację błędów w zarządzaniu pamięcią, ale także umożliwia tworzenie wielokrotnego użytku warstw i abstrakcji na potrzeby opracowywania innych sterowników.

Projekt Jest on wspierany przez różne równoległe inicjatywy, takie jak rust-device do tworzenia sterowników, rust-pci do interakcji z magistralą PCI i rust-drm do integracji z podsystemami DRM i GEM. Narzędzia te są również używane przy opracowywaniu drm-asahi, sterownika Rust dla procesorów graficznych Apple M1 i M2, co wskazuje na zbieżność infrastruktury sterowników graficznych napisanych w języku Rust.

Użycie języka Rdza w tym rozwoju nie jest przypadkiem, ponieważ Rust oferuje mechanizmy ułatwiające przegląd i refaktoryzację, co przyczynia się do większej stabilności projektu. Wprowadzenie tego języka do jądra Linux jest odpowiedzią na szerszą strategię, której celem jest unowocześnienie pisania modułów i uczynienie rozwoju bardziej dostępnym dla nowych współpracowników.

Nie jest to jedyna podejmowana obecnie próba zintegrowania Rusta z kernelem. Obecnie w tym języku opracowywane są również inne sterowniki i systemy, np. sterownik procesora graficznego Apple AGX, obsługa pamięci masowej NVMe, system plików PuzzleFS oraz różne implementacje zabezpieczeń i zarządzania urządzeniami. Rozwój języka Rust zyskuje coraz większą popularność w ekosystemie Linuksa, co oznacza znaczącą zmianę w sposobie, w jaki kwestie bezpieczeństwa i stabilności są uwzględniane w rozwoju jądra systemu operacyjnego.

Fazy ​​wdrażania

Obecnie Nova jest w pierwszej fazie wdrażania, włączył nova-core, moduł zawierający około 400 linii kodu, który tworzy abstrakcje niezbędne do komunikacji z oprogramowaniem sprzętowym GSP. Oprócz nova-core dodano także niezbędne łącza umożliwiające integrację z oprogramowaniem układowym NVIDIA.

Warto zaznaczyć, że, Początkowo planowano, że Nova pojawi się na Linuksie 6.14 z modułem nova-core składającym się z 232 linii kodu, ale ostatecznie nie został on uwzględniony, ponieważ Greg Kroah-Hartman wspomniał o pewnych szczegółach który wymagał polerowania.

Wraz z nowym potwierdzeniem, że zostanie on teraz uwzględniony, Teraz kontroler przejdzie do następnych faz w którym planuje się dodać:

  • nowa-drm: sterownik DRM (Direct Rendering Manager) umożliwiający zarządzanie interakcją z procesorem GPU z poziomu użytkownika.
  • VFIO z menedżerem vGPU: umożliwi wykorzystanie wirtualnych procesorów graficznych NVIDIA w środowiskach wirtualizacji.

Na koniec należy wyjaśnić, że Nova eW obecnym stanie nie jest to funkcjonalny kontroler i że łatki wysłane Stanowią one jedynie podstawę do rozpoczęcia rozwoju kontrolera, innymi słowy, to kod będzie stanowił podwaliny pod przyszły rozwój.