Wczoraj opublikowałem testy porównawcze z sześciu dystrybucji Linuksa na HP Dev One, ekscytującym nowym laptopie z Linuksem wprowadzonym przez HP we współpracy z System76, który korzysta z ich dystrybucji Pop!_OS. Z tych testów wynika, że ​​jednym z dziwacznych ustaleń było to, że wydajność kompresji Zstd w Arch Linux jest po prostu do niczego, ale niektórzy zainteresowani programiści zanurkowali i odkryli dość dziwacznego winowajcę, dlaczego ich wydajność Zstd jest tak słaba w porównaniu z innymi dystrybucjami Linuksa w tej samej wersji.

Wydajność pliku binarnego zstd dostarczanego przez Arch Linux okazała się boleśnie powolna w porównaniu z innymi dystrybucjami Linuksa na tym samym laptopie… O wiele wolniejsza niż inne dystrybucje Linuksa testowane na tym samym dokładnym sprzęcie i we wszystkich dystrybucjach używających ich system binarny Zstd dla tych testów:

Ale wyniki były powtarzalne, powtarzane wiele razy, a ja stoję za testami. Chociaż jestem rozciągnięty, aby związać koniec z końcem (rozważ wyłączenie blokowania reklam! Lub dołączenie do Phoronix Premium w celu oglądania bez reklam i innych korzyści), nie miałem czasu/zasobów, aby głębiej zagłębić się w ten konkretny problem z rutynowym (prawie codziennie) napotykaniem podobnych osobliwości wydajności z różnym sprzętem/oprogramowaniem w systemie Linux.

Na szczęście niektórzy chętni programiści Arch Linux przyjrzeli się temu z tego artykułu i odkryli dość zaskakujący powód, dla którego ich wydajność Zstd była skandalicznie niska:

System kompilacji (tak jakby). Co? Nie, nie ma różnicy w flagach kompilatora do dostrajania optymalizacji lub poziomu… Arch Linux używa systemu budowania CMake Zstd do budowania swojego pakietu, podczas gdy Ubuntu i inne dystrybucje Linuksa często używają zwykłego kompilacji Makefile dostarczanego przez Zstd. Zstd dostarcza również obsługę systemu budowania Meson. Deweloperzy Arch Linux odkryli, że używanie CMake do budowania Zstd doprowadziło do wolniejszej kompresji Zstd, ale przy użyciu konwencjonalnej kompilacji make wydajność była zgodna z oczekiwaniami (Meson również uległ regresji).

Więc jak u licha system kompilacji zakłóca wynikową wydajność binarną, jeśli nie jest to różnica poziomów optymalizacji? W tym miejscu robi się jeszcze dziwniej i jest to kolejny przykład wpływu, jaki obsługa wielu systemów kompilacji może mieć na projekt…

System kompilacji CMake dla Zstd kończy się dodaniem „-std=c99“, gdzie, podobnie jak inne systemy kompilacji, nie określa się używania standardu C99. Raczej zaskakujące, że specyfikacja tego standardu C99 jest tym, co ostatecznie spowodowało tę dużą różnicę w wydajności… Ale dlaczego określenie C99 powoduje tak większą różnicę w wydajności, prawdopodobnie jest to spowodowane pewnym problemem/różnicą w wątkach, ale w tej chwili nie ma nie wydaje się być solidnym wyjaśnieniem. W każdym razie jest to błąd Zstd, który zapewnia różne podstawowe zachowanie w zależności od tego, który z obsługiwanych systemów kompilacji jest używany.

Deweloperzy przetestowali kompilację opartą na CMake bez określenia”-std=c99″i uzyskali podobną wydajność jak pliki binarne Zstd produkowane przez alternatywne systemy kompilacji. Alternatywnie, ustawienie C11 zamiast tego też było w porządku.

Wielka praca włożona przez programistów/współtwórców Arch Linux (Arvid Norlander, Antonio Rojas itp.) jest przedstawiona za pośrednictwem ich Zgłoszenie błędu Arch Linux, a także zgłoszenie go do Zstd jako problem nadrzędny. Mamy nadzieję, że Zstd z kolei zmieni standardową wersję języka C, aby CMake pasował do zachowania innych systemów kompilacji lub lepiej ujednolicił obsługę rzeczy.

Arch Linux ma przynajmniej proste obejście, więc powinien być w stanie wkrótce dostarczyć użytkownikom poprawkę, aby zapewnić znacznie lepszą wydajność.

Categories: IT Info