Nowy Linux całkiem odporny na luki Spectre, wytrzyma też dłużej na baterii

Strona główna Aktualności

O autorze

To mało ekscytujące wydanie, nawet w oczach samego Linusa Torvaldsa, który nie bacząc na połączenie Pierwszego Kwietnia i świąt Wielkiej Nocy wydał Linuksa 4.16. Znacznie ciekawsze rzeczy czekają na nas w 4.17, ale i tak warto skupić się na dojrzałych owocach ponad dwóch miesięcy pracy linuksowych deweloperów.

Linux 4.16 to niemal 15 tys. commitów, ponad 12 tys. zmienionych plików, ponad 25 MB kodu źródłowego. W tych wszystkich zmianach najważniejsze są dłuższy czas pracy urządzeń zasilanych bateryjnie, łatka na pierwszy wariant ataku Spectre, lepsza praca linuksowych gości w VirtualBoksie, możliwość indywidualnego szyfrowania maszyn wirtualnych pod hiperwizorem KVM na procesorach AMD, oraz zwiększenie bezpieczeństwa kernela poprzez domyślne włączenie opcjonalnych dotychczas zabezpieczeń.

Dłuższa praca z notebookiem

Nowa opcja konfiguracji kernela pozwala wreszcie na ustalanie polityk LPM (ATA Link Power Management). Pozwala to na czipsetach Intela kontrolować oszczędzanie energii przez dyski, zapewniając zmniejszenie jej zużycia o 1-1,5 W na jałowym biegu. Pozwala to wydłużyć pracę przeciętnego notebooka o nawet godzinę.

Wcześniej próby takiej kontroli na Linuksie kończyły się źle, najczęściej utratą danych. Jednak nowy programowalny tryb oszczędzania DIPM (Device Initiated Power Management) pozwolił na obejście tych problemów. Wykorzystano doświadczenia prowadzone przez Intela na Windowsie, konfigurując polityki ALPM dokładnie tak samo, jak konfiguruje je oficjalny intelowy sterownik na systemy Microsoftu. Teraz opiekunowie kerneli w ramach danej dystrybucji mogą po prostu nakazać automatyczne włączenie DIPM – przynajmniej na laptopach z mobilnymi czipsetami Intela. Pierwszą dystrybucją, która ma zapewnić wsparcie tego rozwiązania będzie Fedora 28.

Na wydłużenie czasu pracy urządzeń zasilanych bateryjnie wpłynie też druga opcja pozwalająca na automatyczne włączanie mechanizmu usypiania łączności Bluetooth, gdy tylko jest to możliwe. Do tej pory takie usypianie było możliwe tylko po ręcznej aktywacji. Teraz włączać będzie to sam kernel, przy okazji obniżając zużycie energii przez sam kontroler USB i pozwalając procesorowi na głębsze stany uśpienia. Według autora tego rozwiązania, pozwoli ono obniżyć zużycie energii o przynajmniej 0,4 W. Wbrew pozorom nie jest to mało, ultralekkie laptopy na jałowym biegu są dziś przecieć w stanie pobierać 5 W.

Spectre mniej straszne

Nowy kernel skuteczniej i bez takich strat w wydajności chroni przez pierwszym wariantem ataku Spectre (Bounds Check Bypass). Znaleziono potencjalnie podatne na Spectre fragmenty kodu i przepisano je tak, aby uniemożliwić spekulatywne wykonywanie, poprzez wywoływanie specjalnie do tego celu stworzonych makr. Teraz odczytanie zawartości pliku sys/devices/system/cpu/vulnerabilities/spectre_v1 zwraca ciąg __user pointer sanitization.

Prawdopodobnie na tych łatkach się nie skończy, poszukiwane są kolejne miejsca kernela mogące zostać zaatakowane przez Spectre, powstać ma opensource’owe narzędzie do automatycznego wskazywania takich lokalizacji.

Jeśli chodzi o drugą wersję ataku Spectre (Branch Target Injection), to wciąż korzysta się z techniki Return Trampoline (retpoline), która choć sprawdzała się w większości scenariuszy, zawodziła w przypadku wirtualizacji. W kernelu 4.16 retpoline zostało nieco ulepszone, wykorzystywane są też niektóre funkcje IBC (Indirect Branch Control), wprowadzone po ostatnich aktualizacjach mikrokodu procesorów Intela i AMD.

IBC zostało w całości przyjęte przez Windowsa, mimo jego poważnego wpływu na wydajność systemu, tymczasem większość linuksowych dystrybucji wolała trzymać się mniej kosztownej retpoline, mimo tego, że nie zapewniała ona bezpiecznej wirtualizacji i była niewystarczająca dla procesorów Skylake i późniejszych generacji. Teraz dzięki selektywnemu wybraniu niektórych mechanizmów IBC (dostępnych nawet bez wgrania mikrokodu) Linux eliminuje znane słabości repotline i pozwala bezpiecznie zwirtualizować Windowsa. Dodatkowo za pomocą jednego z mechanizmów z IBC chroni teraz też przed wymuszeniem zrzutu obrazu pamięci w razie awarii programu – w zrzutach takich może się pojawić wiele wrażliwych danych.

Nie oznacza to, że Spectre przestało być problemem – przykładowo Red Hat nie jest w ogóle przekonany do retpoline i od początku w RHEL-u stosuje wyłącznie zabezpieczenie IBC. Wciąż też pozostaje sporo do zrobienia w zakresie optymalizacji łatek nie tylko przeciw Spectre (szczególnie na innych niż x86-64 architekturach) ale też przeciwko Meltdown. Pozostają też problemy z 32-bitowymi systemami uruchamianymi na 64-bitowych procesorach, gdzie wydajność spadła najbardziej, a zabezpieczenia przed Meltdown wciąż nie wprowadzono. Niestety minie jeszcze sporo czasu, zanim deweloperzy będą mogli przestać się przejmować 32-bitową architekturą x86.

Domyślnie bezpieczniej

Oprócz zabezpieczeń przed Meltdown i Spectre, zadbano też o inne sprawy w tej dziedzinie. Wprowadzono od dawna rekomendowaną blokadę dostępu do pamięci fizycznej przez urządzenie /dev/mem.

Automatycznie jest także aktywowana ochrona stosu (Stack Protector), przynajmniej dla architektur i kompilatorów które to wspierają. Poczyniono także zmiany mające na celu zabezpieczenie wymiany danych między kernelem a przestrzenią użytkownika.

VirtualBox bez dodatków

Domyślny kernel 4.16 zawiera już wszystko co potrzeba, aby uruchomione w VirtualBoksie linuksowe maszyny wirtualne od razu mogły korzystać z akceleracji grafiki 3D, obsługiwały integrację schowka, a także działały w trybie zintegrowanym, w którym aplikacje systemu gościa wyświetlane są w okienkach na pulpicie gospodarza.

Wciąż trwają prace nad ulepszeniem jakości sterownika graficznego Vboxvideo, a także poprawieniem działania sterownika Vboxsf, pozwalającego na integrację systemów plików między gościem a gospodarzem. Gdy prace te zostaną ukończone, uruchamianie zwirtualizowanych linuksowych systemów będzie znacznie łatwiejsze i wygodniejsze – nie trzeba będzie kompilować specjalnych modułów do kernela, koniecznych dziś do wykorzystania wszystkich możliwości wirtualizacji.

Wirtualizacja grafiki na Intelu

Zmiany w sterownikach grafiki Intela pozwolą wreszcie wykorzystać technologię GVT-g, która pozwala przypisywać maszynom wirtualnym mechanizmy sprzętowej akceleracji grafiki dostępne systemowi-gospodarzowi. W teorii działało to już od Linuksa 4.8, ale nie było sposobu na efektywne przesłanie obrazu stworzonego w systemie-gościu do gospodarza. Teraz taki sposób powstał – nowa ścieżka przekierowania grafiki wykorzystuje współdzielenie buforów z bezpośrednim dostępem do pamięci.

Dzięki tej nowej ścieżce kompozytor grafiki na hoście będzie mógł łatwo wykorzystać obraz z maszyny-gościa w okienku na swoim pulpicie, tak samo jakby np. korzystał z grafiki 3D. Można w ten sposób też przesłać obraż bezpośrednio na drugi monitor w trybie pełnoekranowym, a nawet zdalnie po sieci do zdalnego systemu z wykorzystaniem protokołu Spice.

Całe rozwiązanie działa już na hiperwizorze KVM z odpowiednim zmodyfikowanym Qemu. W ciągu najbliższych miesięcy powinno stać się stałą częścią linuksowej wirtualizacji. Już teraz mówi się o wykorzystaniu tego do obsługi wirtualnych pulpitów czy strumieniowania gier z chmury.

Sieci i dyski

Sporo się dzieje w zakresie ulepszania popularnego systemu plików XFS. Mechanizmy odwrotnego mapowania i referencyjnejgo linkowania przestały być eksperymentalne. By zadziałać, potrzebują uaktualnionych narzędzi do obsługi systemu plików, ale testy już pokazują, że skopiowanie pliku z opcją --reflink pozwala zaoszczędzić mnóstwo czasu: zamiast kopiować zawartość pliku, XFS tworzy jedynie nowy wpis w systemie plików z kopią metadanych, wskazujących na ten sam blok danych – tak jak to jest np. w systemach ZFS i Btrfs. Wciąż jako eksperymentalny pozostaje mechanizm automatycznych napraw systemu plików bez konieczności odmontowywania partycji.

Protokół CIFS używany w windowsowych sieciach lokalnych obsługuje teraz zasoby udostępniane po najnowszym SMB3, w których dane są rozprowadzane poprzez rozproszony system plików (DFS). Pojawiło się też eksperymentalne wsparcie dla SMB3 Direct, pozwalające klientowi bezpośrednio czytać i pisać na wyznaczonych obszarach pamięci serwera poprzez mechanizm zdalnego bezpośredniego dostępu (RDMA). Pozwala to na bardzo szybką komunikację między klientem i serwerem, praktycznie bez narzutów.

Na pewno też Linux 4.16 powinien znacznie przyspieszyć przy wszystkich operacjach na małych obciążeniach I/O. Zmiana w kodzie obsługującym pole i_version dla i-węzłów (czyli struktur opisujących pliki w systemie) sprawiła, że w popularnym benchmarku FIO uzyskano wynik o 244% lepszy niż przed zmianą. Zmiana jest naprawdę trywialna: i_version było zwiększane o 1 przy każdej zmianie danych i-węzła czy metadanych. Jednak ta inkrementacja do niczego nie była potrzebna, i teraz po zakończeniu tej bezsensownej aktualizacji pola, operacje odczytu i zapisu dla wielu małych plików powinny gwałtownie przyspieszyć. Dobra to wiadomość, szczególnie biorąc pod uwagę spadki wydajności I/O po zastosowaniu łatek na Meltdown i Spectre.

Sterowniki

Nowy kernel obsługuje teraz karty GeForce 1030, lepiej sobie radzi ze wsparciem dla procesorów Cannon Lake Intela, dodaje wsparcie dla dziesiątków urządzeń z procesorami ARM (w tym popularnego Orange Pi R1), obsługuje nowe sterowniki dźwiękowe (w tym coraz częściej stosowany Allwinner A83T) i wprowadza sporo poprawek dla laptopów firm takich jak Dell, Lenovo i Asus.

Bardziej szczegółowe informacje na temat kernela 4.16 znajdziecie niebawem na kernelnewbies.org.

© dobreprogramy

Komentarze