Wolne kontra niewolne - test wydajności systemów operacyjnych

Zdaje sobie sprawę, że ten wpis wygląda jak podjęcie rzuconej rękawicy i rzucenie się z szabelką do obrony kawałka kodu. W rzeczywistości za powstaniem tego wpisu stoi zupełnie inny, znacznie prostszy i mniej ambitny powód – ciekawość. Otóż nie dawno jeden z blogerów opublikował wpis porównujący wydajność, a jakże, Windowsa i Linuksa, który można znaleźć tutaj. Po przeczytaniu wpisu i porównaniu testów, oraz przeczytania komentarzy różnie akceptujących wyniki, w mojej głowie narodziło się pytanie: „Ciekawe jakie ja uzyskam wyniki”. A skoro mamy niedzielę w późnojesiennej porze roku i wolnego czasu, przynajmniej mi, póki co nie brakuje – pomyślałem dlaczego nie. I tak narodził się ten wpis.

Platforma testowa i oprogramowanie

Platformą testową będzie mój osobisty PC z następującą konfiguracją sprzętową: procesor: AMD Ryzen 5 1400, grafika: Radeon RX 570 4GB, RAM: 2x4 GB DDR4 3000MHz.

Resztę konfiguracji uznałem za nie znaczącą, jako, że nie wpływa znacząco na wynik testów. Tutaj chciałbym dodać, że żaden z tych komponentów nie jest podkręcany – wszystkie pracują na fabrycznych parametrach i pod tym względem nic nie modyfikowałem. Jeżeli chodzi o systemy operacyjne, to w moim wpisie zetrą się ze sobą Windows 10 w wersji 1903 oraz openSUSE Tumbleweed. Oba systemy mają zainstalowane najnowsze aktualizacje i brak programów działających w tle poza niezbędnymi programami systemowymi. Po instalacji programów do testów każdy z systemów został zrestartowany i po restarcie dostał odpowiednio długi czas na to by wszystko spokojnie załadować i wykonać to co muszą wykonywać po restarcie i testy zostały rozpoczęte dopiero jak menedżer zadań pokazywał brak większej aktywności na procesorze.

Jeżeli chodzi o przeglądarki, których będą dotyczyć 2 z 4 testów, to po stronie Windowsa jest to Google Chrome 78.0.3904.108, a po stronie Linuksa Chromium 78.0.3904.97. W tym wypadku można by się zapytać czemu nie jest to Google Chrome w obu przypadkach – używam Chromium na Linuksie, bo jest dostępny w repozytoriach i nie muszę go osobno pobierać. Obie przeglądarki są budowane z tego samego kodu, a Chrome różni się głównie paroma dodatkami typu wbudowany system aktualizacji czy integracja z usługami Google. Nie sądzę, żeby któraś zawierała jakieś istotne zmiany wpływające znacząco na wynik testów. Oczywiście Chromium na Linuksie ma włączoną akcelerację. Niestety nie jest to domyślne ustawienie, co jest istotnie problemem, lecz włączenie akceleracji jest proste (kwestia przestawienia jednej opcji w ustawieniach przeglądarki) oraz uczyni test sprawiedliwym. Poza tą jedną kwestią, systemy są niemodyfikowane w stopniu wpływającym na wydajność. Przeglądarki będą uruchamiać testy w trybie prywatnym, który m.in. wyłącza dodatki, więc minimalizuje wpływ czynników zewnętrznych na test.

Do testu zaprzęgnąłem 4 benchmarki – Geekbench 5, Basemark Web 3.0 oraz Speedometer 2.0. Czwartym będzie test karty graficznej, benchmark Unigine Valley. Wybrałem ten z trzech powodów – jest darmowy, wieloplatformowy oraz podoba mi się jego sceneria. Tyle ze wstępu, czas zaczynać grzanie sprzętu.

Geekbench 5

Na pierwszy rzut poszedł Geekbench 5. Ten oferuje ładne GUI na Windowsa i konsolowy interfejs na Linuksa, lecz przeprowadzane testy są w obu przypadkach identyczne. Zamykamy więc wszystkie nie potrzebne aplikacje, uruchamiamy test i czekamy na wyniki. Po zakończeniu testu w konsoli na Linuksie pojawia się link, a na Windowsie automatycznie otwiera się przeglądarka, przekierowująca do wyników testów.

Zestawione zostały ze sobą wyniki obu systemów (na górze Linux, na dole Windows), gdzie wartość z lewej strony to wynik testów przeprowadzanych na jednym rdzeniu, a wartość z prawej strony te same testy przeprowadzane na wielu rdzeniach. Z racji tego, że procesor Ryzen 5 1400 jest wielordzeniowy (4 rdzenie i 8 wątków) to oczywistym jest, że wynik wielu rdzeni powinien znacząco od odbiegać od jednego rdzenia. I tak faktycznie jest. Natomiast jeżeli chodzi o systemy – w tym teście myślę, że można stwierdzić iż oba systemy są podobnie, lub nawet tak samo, wydajne. Wprawdzie patrząc na liczby widać, że Linux osiągnął nieco wyższy wynik, ale to wynik wyższy o zaledwie niecałe 5% w scenariuszu jednordzeniowym i nieco ponad 8% w scenariuszu wielordzeniowym. Tak niskie wahania wartości mogą być spowodowane wieloma czynnikami niekoniecznie mającymi związek z samymi systemami operacyjnymi. Szczegółowe wyniki dla obu systemów są dostępne tutaj i tutaj.

Po wyłączeniu benchmarku szybki rzut oka na menedżer zadań w celu upewnienia się czy jakiemuś procesowi nie przypomniało się, że ma coś arcyważnego do zrobienia i lecimy do kolejnego testu – testu przeglądarek.

Basemark Web 3.0

Przeglądarka, jak wspominałem we wstępie, została uruchomiona w trybie prywatnym. Podobnie jak w poprzednim teście, wszystkie aplikacje zostały zamknięte wraz ze zbędnymi kartami przeglądarki. Test został uruchomiony i po paru minutach zakończony od razu prezentując wyniki.

Jak widać w podpisach, górna wartość to wynik Linuksa, dolna Windowsa. Tutaj ponownie systemy skończyły z niemal identycznymi wynikami dając zaledwie kilka procent przewagi Linuksowi. Ponownie jest to na tyle niska różnica, że ciężko odbierać ją jako przewagę któregoś ze systemów. Bez zbędnego przedłużania restartuję przeglądarkę, ponownie sprawdzam czy nic w tle nie wpływa negatywnie na wydajność i przechodzę do ostatniego testu przeglądarek.

Speedometer 2.0

Przeglądarka ponownie uruchomiona w trybie prywatnym, tylko z jedną kartą, więc uruchamiam test i czekam na wyniki, które podobnie jak wcześniej, od razu pojawiają się w oknie.

W tym teście żaden system nie uzyskał nawet minimalnej przewagi. Różnica w punktach wynosi 0.09, a więc wartość mieszczącą się w progu błędu statystycznego. Podobnie jak wcześniej, na górze wynik Linuksa, na dole Windowsa. Robimy to co wcześniej i przechodzimy do ostatniego testu – testu graficznego.

Unigine Valley

Muszę osobiście przyznać, że ten test ciekawił mnie najbardziej. Czasem głosi się, że sterowniki do kart graficznych Radeon nie są najlepszej jakości nawet na Windowsie, a są jeszcze gorsze na Linuksie. Ciekawi mnie więc porównanie. Po stronie Windowsa zainstalowany zainstalowany jest sterownik od AMD, po stronie Linuksa używam otwartoźródłowego sterownika zawartego w jądrze. W obu przypadkach jakość grafiki została ustawiona na High, z antyaliasingiem 4x, pełny ekran z natywną rozdzielczością 1920x1080 i API OpenGL. Dlaczego OpenGL? Bo test OpenGL vs DirectX nie mówiłby kompletnie nic. Poza wydajnością systemów czy sterowników doszłyby jeszcze takie zmienne jak jakość implementacji DirectX w porównaniu do OpenGL w sterowniku czy wydajność renderera DirectX w porównaniu do OpenGL w silniku Unigine. OpenGL jest tutaj wspólnym mianownikiem, dlatego właśnie on zostanie wzięty pod lupę.

Zastanawiający jest fakt dlaczego Windows 10 został wykryty przez benchmark jako Windows 8, ale zakładam, że po prostu nie został zaktualizowany do wykrywania 10, gdyż samo narzędzie ma już swoje lata. Wyniki ponownie (Windows po lewej, Linux po prawej) niemal identyczne, co pokazuje, że optymistycznie wydajność OpenGL na kartach AMD pod Linuksem nie jest zła (a pesymistycznie jest tak samo zła na Windowsie).

Bonus: Unigine Valley DX11

Już miałem kończyć testy, kiedy do głowy przyszedł mi kolejny pomysł. Skoro benchmark i tak już był uruchomiony, to czemu by nie sprawdzić czy wynik z API DirectX 11 będzie lepszy od tego jaki osiągnął OpenGL? Uruchomiłem benchmark i patrząc na renderujące się scenerie stwierdziłem, że ciekawie byłoby to porównać z DX11 pod Linuksem. W tym momencie można by się zapytać: „Zaraz, ale jak to DX11 pod Linuksem?”. Tutaj z pomocą przychodzi DXVK.

DXVK to otwartoźródłowa implementacja API DirectX 10 oraz DirectX 11 na bazie wieloplatformowego API Vulkan. Założenie projektu jest takie, by instrukcje API Microsoftu tłumaczyć na Vulkana, który dzięki swojej przenośności, pozwoli na uruchamianie aplikacji używających DX10 lub DX11 na innym niż Windows systemie operacyjnym. Projekt DXVK jest wspierany przez m.in. Valve i chociaż nie jest pierwszym podejściem do implementacji DirectX poza Windowsem, to póki co wydaje się być rozwiązaniem najbardziej kompletnym i przede wszystkim najbardziej wydajnym. Projekt kompiluje się do formy biblioteki DLL która zastępuje oryginalne biblioteki API DirectX. Oczywiście projekt nie ma zastosowania na Windowsie, który wspiera implementowane API natywnie, ale jak najbardziej ma zastosowanie na innych systemach dzięki Wine, który pozwala uruchomić część aplikacji i gier z systemu Microsoftu na innych systemach. Ponieważ mam zainstalowane Wine w wersji staging 4.19, a moje GPU wspiera Vulkana, pobrałem DXVK w najnowszej wersji 1.4.5. Następnie utworzyłem czystą „butelkę” Wine w wersji 32 bitowej, zainstalowałem tam DXVK (służy do tego skrypt pobierany wraz z bibliotekami), przeniosłem instalacje benchmarku Valley z Windowsa i uruchomiłem. Program uruchomił się bez zająknięcia, więc czas na testy z takimi samymi ustawieniami jak wcześniej tylko z API DirectX 11.

Może to wyglądać na porównanie Windowsa 7 i Windowsa 8/10, lecz w rzeczywistości pod systemem oznaczonym jako Windows 7, kryje się Linux z Wine, które od kilku wersji domyślnie udaje Windowsa 7. Można to zobaczyć w komórce tabeli z nazwą karty graficznej, w której widnieje „LLVM 9.0.0”, który nie jest używany pod Windowsem, a właśnie pod Linuksem w otwartoźródłowych sterownikach jako kompilator. Tutaj wynik okazuje się niezłym zaskoczeniem. Oczywistym było od początku, że Windows zatriumfuje, gdyż na nim DX11 działa natywnie, bez translacji, jednak DX11 tłumaczony na Vulkana osiągnął około 90% wyniku Windowsa, co biorąc pod uwagę fakt zachodzącej translacji, jest wynikiem zaskakująco dobrym. Co więcej, wynik niemal zrównał się z natywnym OpenGL, co jeszcze bardziej pokazuje potencjał tego projektu. Oczywiście nie oznacza to, że każda gra uruchomiona pod Wine uzyska 90% wydajności Windowsa. Ciągle jestem zdania, że do gier Windows nadaje się lepiej.

Zakończenie

Jak interpretować wyniki? W sumie to nijak. Oba systemy okazały się niemal identycznie szybkie, a system operacyjny to coś znacznie więcej niż liczby w benchmarkach. Zdaje sobie sprawę, że na innych konfiguracjach różnica może być zupełnie inna i jeden z dwóch systemów może zdecydowanie wyprzedzać drugi, ale niestety nie mam dostępu do wszystkich istniejących konfiguracji sprzętowych ani tyle czasu by to sprawdzić. Przede wszystkim pozostaje mi być zadowolonym, że mój PC nie zmienia znacząco swojej wydajności pod innym systemem, co jest istotne z racji tego, że pracuje na obu testowanych systemach. Odpowiadając więc na pytanie który system jest lepszy, bo i takie pytanie musi się pojawić, odpowiem prosto: Ten, na którym lepiej Ci się pracuje.

Odnośniki

Strona Geekbench

Strona Basemark Web 3.0

Strona Speedometer 2.0

Strona Unigine Valley

Strona projektu DXVK