Ubuntu 19.10 ponownie ratuje GNOME
Pamiętacie ten moment, kiedy stwierdziliście, że nowe GNOME 3.xx jest może i fajne, ale żałośnie wolne? Niektórzy nawet wymieniali z tego powodu swoje CPU, karty graficzne. Ale to wszystko były działania pozorne. W nowoczesnym GNOME jego twórcom jakimś cudem wymyka istota środowiska graficznego. Bo wydajność i jakość animacji to pierwsze na co zwrócimy uwagę. Przycinki i inne spowolnienia w trakcie poważnej pracy doprowadzą nas już do szewskiej pasji. Okazuje się, że deweloperzy związani z Ubuntu i firmą Canonical zrobili na przestrzeni ostatnich miesięcy więcej dla wydajności GNOME 3.xx, niż zrobiono przez cały okres trwania tego projektu.
Daniel Van Vugt, jeden z deweloperów Ubuntu, w brawurowym technicznie wpisie wyłożył kawę na ławę i opisał czym zajmował się jego zespół przed wydaniem Ubuntu 19.10. Zauważyli oni bowiem, że GNOME 3.32 z wersji 19.04 chociaż połatane, poprawione i z usuniętymi wyciekami pamięci, nadal jest w widocznym sposób wolniejsze od innych środowisk. Dlatego zaczęto analizować sytuacje, gdy GNOME Shell beztrosko przestawiał się w tryb „odpoczynku”, zamiast aktywnie dbać o render następnych klatek do zaktualizowania ekranu. To sytuacja odwrotna niż ta, która nas trapi na co dzień, kiedy CPU i GPU jest wykorzystywane ponad normę za sprawę „zakorkowanych” procesów i wydarzeń. W przypadku GNOME sytuacji nie pomaga fakt, że GNOME Shell i Mutter są jednowątkowe (potrafią korzystać z jednego rdzenia CPU). Wielu uważa, że głównym winowajcą jest Javascript użyte w tym środowisku. Ale stosunek kodu w C do Javascriptu to 90% do 10%.
Dzięki innowacyjnemu podejściu udało się zidentyfikować kilka momentów, które rzutowały na jakość funkcjonowania całego środowiska.
Po pierwsze zauważono, że jeżeli coś zakłóci wyliczanie i proces renderowania klatek, niektóre klatki zostają pominięte. W rezultacie użytkownik odczuwa to jako czkawkę na ekranie. Po naprawieniu tego błędu GNOME 3.34 trzyma fason oraz stałą liczbę klatek.
Kolejno, zauważono, że Xorg spóźnia się o jedną klatkę w porównaniu do sesji Waylanda. Stary, powolny Xorg? Niekoniecznie. Tutaj sprawcą było zbyt szybkie przystępowanie do renderowania kolejnej klatki. W wyniku system „nie wyrabiał” i całość była o jedną klatkę wolniejsza, niż powinna być. Po zwiększeniu odstępu czasowego pomiędzy renderowaniem klatek, wszystko wróciło do normy.
Okazało się, że Mutter (menedżer okien) jest bardzo sentymentalny i nadal niektóre jego elementy są odświeżane zgodnie z nomenklaturą sprzed dekady. Pamiętacie monitory kineskopowe? I tak np. Mutter limitował odświeżanie pozycji kursora do 60Hz. To powodowało, że inne komponenty systemu (np. sterowniki NVIDII) rozpędzając CPU do 100% w wyniku błędnej logiki zdarzeń.
Wszystkie powyższe wyliczenia, limity dla klatek, błędne założenia i ramy czasy powodowały, że Mutter kolejkował zdarzenia z urządzeń wskazujących i reagował na nie z widocznym opóźnieniem. To już przeszłość.
W widoczny sposób usprawniono też działanie sesji pod sterownikami NVIDII. W trybie przeszłym możemy już mówić o niemożność zsynchronizowania działań GPU i CPU. Mutter wykonywał swoje obliczenia, GPU próbowało „zaczekać” i… wiadomo. Jednak po powyższych poprawkach menedżer okien zachowuje się bardziej przewidywalnie i jego współpraca z GPU zyskała na jakości. W GNOME 3.34 sesja pod sterownikami NVIDII jest o wiele szybsza i płynniejsza.
Oczywiście powyższe to nie tylko buńczuczne przechwałki. Daniel Van Vugt jest przekonany (i zapewne wielu użytkowników też), że Ubuntu 19.10 i GNOME 3.34 jest o wiele szybsze od swojego poprzednika. Jednak zidentyfikowano kilka innych błędów, nad usunięciem których nadal trwają prace.
Teraz czas na fundamentalne pytanie. Czy powrót Ubuntu do GNOME to najlepsze co mogło spotkać Ubuntu… czy może projekt GNOME?