Przejdź do treści

Nowa poprawka Linuksa sprawia, że gra na Steam Decku jest jeszcze przyjemniejsza

3 minuty czytania

Społeczność Linuksa stale rozwija system, a na najnowszych, wciąż niezatwierdzonych poprawkach, skorzystają właściciele Steam Decków.

To, jak dobrze dana gra działa na sprzęcie, jest uzależnione nie tylko od jego czystej wydajności, ale także od tego, czy oprogramowanie potrafi wykorzystać moc zapewnianą przez podzespoły i prawidłowo je obsłużyć. Świetnym dowodem na poparcie tej tezy są ostatnie poprawki w obrębie Linuksa, za które możemy podziękować niejakiemu Davidowi Vernetowi. Za sprawą jego pracy, okazjonalne spadki klatek na Steam Deckach nie powinny już aż tak dawać się we znaki, albowiem według testów wykonanych na podstawie Civilization 6 wskaźnik 1% low uległ poprawie o 31,8%.

Problem z mikro-uśpieniami i ograniczonym budżetem energetycznym

Jak wyjaśnił Vernet, w trakcie wykorzystywania maszyny do gry wątki procesora bardzo często wchodzą w krótkie stany uśpienia, czekając na sygnały z karty graficznej. W dotychczasowym trybie pracy sterownika AMD P-State (EPP) każde takie uśpienie powodowało obniżenie częstotliwości pracy rdzenia. Po wybudzeniu procesor potrzebował chwili na ponowne podbicie zegarów, co objawiało się nagłymi skokami czasu generowania klatki, a co za tym idzie – nieprzyjemnym zacinaniem obrazu.

W przypadku przenośnych sprzętów, dokładnie takich, jak tytułowy Steam Deck, proste rozwiązania tego problemu okazują się nieskuteczne, a główną przyczyną tego stanu rzeczy jest brak ciągłego źródła zasilania, na które mogą liczyć tradycyjne pecety lub konsole stacjonarne.

Sztywne ustawienie parametru EPP na poziom „performance” wyeliminowałoby przycięcia, ale drastycznie zwiększyłoby pobór prądu na wszystkich rdzeniach, przekładając się na odczuwalnie krótszy czas pracy na baterii. Z drugiej strony, zwiększenie minimalnej częstotliwości rdzeni w układzie APU zakłócało precyzyjne zarządzanie wspólnym budżetem energetycznym CPU i GPU, powodując skutek odwrotny do zamierzonego i pogorszenie stabilności rozgrywki.

Inteligentne podbijanie wydajności pojedynczych rdzeni jako skuteczne rozwiązanie

Co więc postanowił zrobić David Vernet? Wprowadzić dynamiczny, opcjonalny mechanizm podbijania wydajności przypisany do konkretnych rdzeni (per-core EPP boost). Przygotujcie się na mocno techniczne wyjaśnienie tego zjawiska:

W tej serii wprowadzono natomiast opcjonalne przyspieszenie EPP dla poszczególnych rdzeni. Gdy parametr modułu `epp_boost` jest włączony, hak `update-util` pobiera próbkę czasu przebywania w stanie C0 każdego rdzenia (różnica MPERF w stosunku do różnicy TSC) maksymalnie raz na 10 ms. Jeśli próbka wskazuje, że rdzeń jest zajęty w co najmniej 50%, pole EPP w jego MSR_AMD_CPPC_REQ jest ustawiane na „performance” (0) i utrzymywane w tym stanie do momentu upływu 300 ms bez kolejnej próbki wskazującej zajętość; wówczas hook przywraca żądanie, które zarządzanie polityką ostatnio zapisało w cppc_req_cached.

David Vernet

Prawie 32% poprawy w testach

Skuteczność nowej metody przetestowano na Steam Decku w grze Civilization 6, o czym już wspomniano we wstępnie. Wyniki pokazały wzrost współczynnika 1% low o dokładnie 31,8%, a więc powód do zadowolenia bez wątpienia jest. Warto przy tym podkreślić, iż zmiana ta nie odnosi się do średniej liczby klatek na sekundę, lecz do wartości występującej podczas przycięć i nagłych spadków. W skrócie – nawet jeśli Steam Deck złapie chwilową czkawkę, nie powinna być już ona tak odczuwalna.

Jak podaje serwis Phoronix, omawiane rozwiązanie nie jest jeszcze dostępne w oficjalnych aktualizacjach systemu. Poprawki przechodzą obecnie proces weryfikacji i recenzji przez inżynierów AMD zajmujących się jąderem Linuksa. Po oficjalnym zatwierdzeniu projektu i wdrożeniu go do głównej gałęzi kernela zyskają na tym nie tylko posiadacze Steam Decka, ale również użytkownicy innych handheldów z procesorami AMD pracujących pod kontrolą systemu Linux.

0 komentarzy

Zostaw komentarz