Poniedzielnik: wieści ze świata OpenSource. Numer 62 4


Open SourceWieści ze świata Open Source: 21 – 27 sierpnia 2012

W tym tygodniu pojawił się bardzo ciekawy zestaw patchy dla linuksowego kernela. Andi Kleen przygotował ogromną serię poprawek umożliwiającą skompilowanie kernela z opcją Link Time Optimization. Co to oznacza? Zapraszam do lektury.

Link Time Optimization w kernelu Linuksa

Link Time Optimization (LTO) to specjalna technika umożliwiająca kompilatorowi optymalizację kodu maszynowego programu już po jego skompilowaniu, w czasie linkowania ze sobą poszczególnych części w jeden plik wykonywalny. Hmm, a może spróbuję bardziej po naszemu?

Procesy kompilacji i linkowania same w sobie są niesamowicie wręcz skomplikowane. Nie tylko zachodzi tu zwykłe przepisanie kodu źródłowego (zrozumiałego dla ludzi…a przynajmniej niektórych ludzi) na kod maszynowy (zrozumiały dla komputera). Kompilator musi wziąć pod uwagę jaki procesor będzie wykonywał ten kod. Czy ten procesor ma znane błędy, które trzeba obejść? Czy kazać mu wykonać daną funkcję w ten, czy inny sposób? Który z nich będzie bardziej wydajny? Każda linijka kodu źródłowego przynosi dylematy, które kompilator musi rozważyć, często analizując inne partie kodu (które mają swoje dylematy). Bez tego skompilowane programy byłby znacznie mniej wydajne, lub nie uruchamiałby się wcale. Ale nie wszystko da się przewodzić mając do dyspozycji jedynie kod źródłowy.

Kod źródłowy praktycznie każdego programu składa się z wielu części. Jeden moduł odpowiada za funkcję X, inny za funkcję Y. Jeden moduł umożliwia łączenie się programu z internetem, inny odpowiada za przyjmowanie poleceń od użytkownika, a procedura wykonywania każdego polecenia jest zapisana w osobnym module dla każdego z nich. Taka struktura jest najwygodniejsza dla wszystkich, których to dotyczy – czyli programistów. W procesie kompilacji każda część jest kompilowana osobno. Kiedy wszystkie pliki z takimi obiektami są gotowe, proces kompilacji przechodzi w fazę linkowania. Linker bierze poszczególne obiekty i łączy je ze sobą w jeden plik wykonywalny – czyli coś co potem możemy uruchomić i normalnie używać.

Technika LTO umożliwia przeprowadzenie kolejnej porcji optymalizacji właśnie na etapie linkowania. Mając do dyspozycji zarówno kod źródłowy jak i kod maszynowy linker może lepiej przewidzieć jak program będzie działał, jak będzie zajmował pamięć i jakie procedury wykonywał. Mając te dane może dokonać modyfikacji skompilowanych obiektów i dopiero wtedy je połączyć.

Czy gra jest warta świeczki? To zależy. Kilka benchmarków, szczególnie tych obciążających procesor i pamięć, pokazało pozytywne wyniki zastosowania LTO. Od niewielkich wzrostów wydajności (na granicy błędu statystycznego) aż po gigantyczny, 34% wzrost wyniku w BYTE Unix Benchmark. Nie obyło się też bez regresji jednym z testów – benchmark korzystający z LTO było wolniejszy od tego skompilowanego bez LTO. Plus dochodzi do tego 2-4 krotne wydłużenie czasu kompilacji, ale to wykonuje się raz i zostaje na całe życie.

A teraz wyobraźcie sobie, jak kompilowanym programem jest jądro systemu operacyjnego. Linux ma piętnaście milionów linii kodu. Kernel działa na bardzo niskim poziomie – właściwie na samym sprzęcie. Jakakolwiek optymalizacja odbije się na szybkości działania całego systemu. Nawet niech to będzie kilka procent. W skali całego systemu użytkownik tego nie zauważy. Ale już bateria w laptopie tak. Tak samo serwery, dla których każda zaoszczędzona milisekunda jest ważna.

Włącznie LTO w kernelu to ciągle pieśń przyszłości, zapewne w okolicach kernela 3.7, lub nawet 3.8 – czyli przyszły rok. Ale warto poczekać, nawet dla tych paru procent w skali całego systemu.

Źródła:
LKML – zgłoszenie patcha
Wikipedia – Link Time Optimalization
GCC Wiki – LTO
Phoronix – Benchmarki LTO

W skrócie

Intel wydał PowerTop 2.1, aktualizację popularnego programu analizującego zużycie energii, popularnego wśród notebookowców;

W najnowszej odsłonie Humble Android Bundle dodano cztery gry: Anomaly – Warzone Earth, Osmos, EDGE i World of Goo;

Canonical wydało aktualizację Ubuntu Precise Pangolin. Wersja 12.04.1 to normalny PP z zaktualizowanymi wszystkimi pakietami. Obrazy instalacyjne zostały zaktualizowane, zaś istniejące instalacje Pangolina zostaną zaktualizowane do wersji 12.04.1 podczas normalnej aktualizacji systemu;

Biały Dom otworzył źródła swojego systemu petycji We Are People;

Nowy sterownik od Nvidii (304.43) dodaje obsługę kilku nowych kart graficznych (w tym  GTX 660 Ti ) a także naprawia szereg błędów występujących w starszej wersji (np. zawieszanie się aplikacji podczas rozszerzania filmu na YouTube przy użyciu akceleracji sprzętowej)


Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.

4 komentarzy do “Poniedzielnik: wieści ze świata OpenSource. Numer 62