Inżynier Nvidii naprawił błąd w jądrze systemu Linux, który powodował spadki wydajności kart graficznych... AMD (zarówno zintegrowanych, jak i dedykowanych). Co ciekawe, ta sama osoba przypadkowo wcześniej wprowadziła problem, dokonując zmian mających na celu zwiększenie przestrzeni PCI BAR do ponad 10 TiB. Niestety, zmiana ta błędnie oznaczała niektóre karty jako ograniczone, co skutkowało spadkiem ich wydajności.
W duchu open source obowiązuje niepisana zasada: jeśli coś zepsujesz - napraw to. Jądro systemu Linux jest otwartym projektem, do którego każdy może wnosić zmiany, ale każda z nich podlega przeglądowi. Od odpowiedzialnych twórców oczekuje się również naprawy skutków ich działań. W tym przypadku, mimo konkurencji między AMD a Nvidią na rynku GPU, FOSS (Free and Open Source Software) pokazuje, że współpraca ponad podziałami jest możliwa.
Co dokładnie się stało?
Błąd pojawił się po zatwierdzeniu zmiany mającej na celu zwiększenie przestrzeni PCI BAR - przydatnej zwłaszcza w systemach z dużą ilością pamięci. Zmiana ta wpłynęła m.in. na zmienną odpowiedzialną za losowe umieszczanie danych jądra w pamięci (KASLR entropy), a także sztucznie rozszerzyła zakres fizycznej pamięci dostępnej dla jądra systemu aż do 64 TiB (zmienna direct_map_physmem_end).
Poprawka została już wdrożona i trafi do jądra Linuksa w wersji 6.15-rc1.
W Linuksie pamięć dzielona jest na strefy: jedną z nich jest zone_device, powiązana z GPU. W przypadku Radeonów, przy inicjalizacji tej pamięci, zmienna max_pfn, reprezentująca dostępny adres RAM, była błędnie zwiększana do 64 TiB. Ponieważ GPU nie mogły rzeczywiście adresować tak dużego obszaru, system oznaczał je jako ograniczone, co wymuszało korzystanie wyłącznie ze strefy DMA32 - ograniczonej do 4 GB pamięci, co wyjaśniało utratę wydajności.
Na szczęście poprawka została już wdrożona i trafi do jądra Linuksa w wersji 6.15-rc1. Stabilne wydanie 6.15 powinno pojawić się pod koniec maja lub na początku czerwca.

Pokaż / Dodaj komentarze do: Błąd w Linux kernel ograniczał wydajność kart Radeon - winny był inżynier Nvidii