Wydanie jądra Linux 5.1

Po dwóch miesiącach prac Linus Torvalds przedstawił wydał jądro Linux 5.1. Wśród najbardziej zauważalnych zmian: nowy interfejs do asynchronicznego wejścia/wyjścia io_uring, możliwość użycia NVDIMM jako pamięci RAM, wsparcie dla współdzielonej pamięci w Nouveau, wsparcie dla skalowalnego monitorowania bardzo dużych systemów plików przez fanotify, możliwość dostosowania poziomów kompresji Zstd w Btrfs, nowy handler cpuidle TEO, realizacja wywołań systemowych w celu rozwiązania problemu 2038 roku, możliwość uruchamiania z urządzeń device-mapper bez initramfs, moduł LSM SafeSetID, wsparcie dla kombinowanych live-patchy.

Podstawowe nowości:

  • Podsystem dyskowy, wejście/wyjście i systemy plików
    • Wprowadzono nowy interfejs dla asynchronicznego wejścia/wyjścia — io_uring, który wyróżnia się wsparciem dla pollingu wejścia/wyjścia oraz możliwością pracy zarówno z buforowaniem, jak i bez buforowania. Przypominamy, że wcześniej proponowany mechanizm asynchronicznego wejścia/wyjścia „aio” nie obsługiwał buforowanego wejścia/wyjścia, mógł działać tylko w trybie O_DIRECT (bez buforowania i pomijając pamięć podręczną), miał problemy z występowaniem blokad z powodu oczekiwania na dostępność metadanych oraz wykazywał duże przeciążenia z powodu kopiowania danych w pamięci.

      W ramach API
      io_uring deweloperzy starali się wyeliminować wady starego interfejsu aio. wydajności io_uring jest bardzo zbliżony do SPDK i znacznie wyprzedza libaio w pracy z włączonym pollingiem. Aby wykorzystać io_uring w końcowych aplikacjach pracujących w przestrzeni użytkownika, przygotowano bibliotekę liburing, dostarczającą wysokopoziomowe opakowanie nad interfejsem jądra;

    • W mechanizmie śledzenia zdarzeń w systemie plików fanotify() dodano wsparcie dla śledzenia sytuacji zmiany superbloku i struktury dirent (zdarzenia tworzenia, usuwania i przenoszenia katalogów). Przedstawione możliwości pomagają rozwiązać problemy ze skalowalnością, które pojawiały się przy tworzeniu rekurencyjnych śledzeń zmian w bardzo dużych systemach plików przy użyciu mechanizmu inotify (zmiany dirent można było wcześniej śledzić tylko przez inotify, ale
      wydajność w warunkach rekurencyjnego śledzenia dużych zagnieżdżonych katalogów pozostawiała wiele do życzenia). Teraz podobne monitorowanie można skutecznie przeprowadzać przez fanotify;
    • W systemie plików Btrfs dodano możliwość ustawienia poziomu kompresji dla algorytmu zstd, który można uznać za optymalny kompromis między szybkim, ale nieskutecznym lz4 a wolnym, ale dobrze kompresującym xz. Na podobnej zasadzie, jak wcześniej można było ustawić poziom kompresji przy użyciu zlib dla zstd, dodano wsparcie dla opcji montażu „-o compress=zstd:level”. W testach minimalny pierwszy poziom zapewnił kompresję danych w stosunku 2,658:1 przy prędkości kompresji 438,47 MB/s, prędkości dekompresji 910,51 MB/s i zużyciu pamięci 780 MB, a maksymalny poziom 15 — w stosunku 3,126:1, ale przy prędkości kompresji 37,30 MB/s, dekompresji 878,84 MB/s i zużyciu pamięci 2547 MB;
    • Dodano możliwość uruchamiania z systemu plików, umieszczonego na urządzeniu device-mapper, bez użycia initramfs. Począwszy od obecnego wydania jądra urządzenia, device-mapper można bezpośrednio wykorzystać w procesie uruchamiania, na przykład jako partycję z głównym systemem plików. Konfiguracja partycji odbywa się przy użyciu parametru uruchamiania „dm-mod.create”. Wśród dozwolonych do uruchomienia modułów device-mapper znajdują się: „crypt”, „delay”, „linear”, „snapshot-origin” i „verity”;
    • Do ukierunkowanego na pamięci Flash systemu plików F2FS dodano flagę F2FS_NOCOW_FL, pozwalającą na wyłączenie trybu copy-on-write dla określonego pliku;
    • Z jądra usunięto system plików Exofs, stanowiący variant ext2, dostosowany do pracy z urządzeniami pamięci masowej OSD (Object-based Storage Device). Usunięto również wsparcie dla protokołu SCSI dla podobnych urządzeń przechowywania obiektów;
  • Wirtualizacja i bezpieczeństwo
    • Do prctl() dodano opcję PR_SPEC_DISABLE_NOEXEC do zarządzania spekulacyjnym wykonywaniem instrukcji dla wybranego procesu. Nowa opcja pozwala selektywnie wyłączyć spekulacyjne wykonywanie dla procesów, które mogą być potencjalnie atakowane za pomocą ataku typu Spectre. Blokowanie działa do pierwszego wywołania exec();
    • Wdrożono moduł LSM SafeSetID, umożliwiający systemowym usługom bezpieczne zarządzanie użytkownikami bez podnoszenia uprawnień (CAP_SETUID) i bez uzyskiwania uprawnień użytkownika root. Przydzielanie uprawnień odbywa się przez definiowanie w securityfs reguł opartych na białej liście dozwolonych powiązań (w formie „UID1:UID2”);
    • Dodano niskopoziomowe zmiany niezbędne do zorganizowania stosu modułów bezpieczeństwa (LSM). Wprowadzono parametr uruchamiania jądra „lsm”, który umożliwia zarządzanie tym, które moduły są ładowane i w jakiej kolejności;
    • Do podsystemu audytu dodano wsparcie dla przestrzeni nazw plików;
    • Rozszerzono możliwości wtyczki GCC structleak, która pozwala na blokowanie potencjalnych wycieków zawartości pamięci. Zapewniono inicjalizację dowolnych zmiennych, które są używane w kodzie za pomocą odniesienia na stosie;
  • Subsystem sieciowy
    • Dla gniazd zrealizowano nowa opcja „SO_BINDTOIFINDEX”, podobna do
      „SO_BINDTODEVICE”, ale przyjmująca jako argument indeksowy numer interfejsu sieciowego zamiast nazwy interfejsu;
    • Do stosu mac80211 dodano możliwość przypisania jednemu urządzeniu wielu BSSID (adresów MAC). W ramach projektu optymalizacji wydajności WiFi do stosu mac80211 dodano uwzględnienie rozkładu czasu w eterze i możliwość rozdzielania czasu w eterze między kilka stacji (w trybie punktu dostępowego, przydzielanie mniejszego czasu transmisji wolnym stacjom bezprzewodowym, zamiast równomiernego rozdzielenia czasu między wszystkie stacje);
    • Dodano mechanizm „devlink health«, który zapewnia powiadomienia o problemach z interfejsem sieciowym;
  • Pamięć i usługi systemowe
    • Zrealizowano bezpieczna dostawa sygnałów, z uwzględnieniem możliwości ponownego wykorzystania PID. Na przykład przy wykonaniu wywołania kill mogła wystąpić sytuacja, w której bezpośrednio po wysłaniu sygnału docelowy PID mógł zostać zwolniony z powodu zakończenia pracy procesu i zajęty przez inny proces, a w efekcie sygnał byłby przesyłany do innego procesu. Aby wyeliminować takie sytuacje, dodano nowe wywołanie systemowe pidfd_send_signal, które korzysta z deskryptorów plików z /proc/pid, aby zapewnić stabilne powiązanie z procesem. Nawet jeśli PID zostanie ponownie użyty podczas przetwarzania wywołania systemowego, deskryptor pliku nie zmieni się i można go bezpiecznie wykorzystać do wysłania sygnału do procesu;
    • Dodano możliwość użycia urządzeń pamięci trwałej (persistent-memory, na przykład NVDIMM) jako RAM. Do tej pory w jądrze podobne urządzenia były obsługiwane jako urządzenia pamięci masowej, ale teraz można je także stosować jako dodatkową pamięć operacyjną. Funkcja ta została wprowadzona w odpowiedzi na prośby użytkowników, którzy są gotowi zaakceptować osłabioną wydajność i chcą używać standardowego API zarządzania pamięcią jądra Linux zamiast istniejących systemów alokacji pamięci w przestrzeni użytkownika, działających na mmap dla pliku dax;
    • Dodano nowy sterownik bezczynności CPU (cpuidle, który decyduje, kiedy można przełączyć CPU w głębokie tryby oszczędzania energii; im głębszy tryb — tym większe oszczędności, ale czas wybudzenia z tego trybu jest dłuższy) — TEO (Timer Events Oriented Governor). Do tej pory oferowano dwa sterowniki cpuidle — „menu” i „ladder”, które różnią się heurystyką. W sterowniku „menu” występują znane problemy z podejmowaniem decyzji heurystycznych, dlatego zdecydowano się na przygotowanie nowego sterownika. TEO jest prezentowany jako alternatywa dla sterownika „menu”, umożliwiająca osiągnięcie wyższej wydajności przy zachowaniu tego samego poziomu zużycia energii.
      Aktywacja nowego sterownika jest możliwa za pomocą parametru ładowania „cpuidle.governor=teo”;
    • W ramach prac nad usunięciem problemów roku 2038, spowodowanych przepełnieniem 32-bitowego typu time_t, w skład włączono wywołania systemowe, które oferują dla architektur 32-bitowych 64-bitowe liczniki czasu. W efekcie, 64-bitowa struktura time_t może być teraz stosowana na wszystkich architekturach. Analogiczne zmiany wdrożono również w podsystemie sieciowym dla opcji timestamp gniazd sieciowych;
    • Wprowadzono system gorącego nakładania poprawek na jądro (live patching) dodano możliwość „Atomic Replace” do atomowego zastosowania serii zmian w jednej funkcji. Ta możliwość pozwala na dystrybucję skondensowanych poprawek, obejmujących wiele zmian, zamiast dość skomplikowanego procesu nakładania na żywo w ściśle określonej kolejności. Jeśli wcześniej każda kolejna zmiana musiała polegać na stanie funkcji po poprzedniej zmianie, teraz można dystrybuować kilka zmian związanych z jednym stanem początkowym (tzn. osoby zajmujące się utrzymywaniem mogą wspierać jedną skondensowaną poprawkę względem podstawowego jądra zamiast łańcucha powiązanych ze sobą poprawek);
    • Ogłoszono przestarzałe wsparcie dla formatu plików wykonywalnych a.out i
      usunięto kodeks do generowania plików core w formacie a.out, który jest w stanie porzuconym. Format a.out od dawna nie jest stosowany w systemach z Linuxem, a generowanie plików a.out dawno nie jest wspierane przez nowoczesne narzędzia w konfiguracjach Linuxa domyślnie. Ponadto, loader dla plików a.out może być w pełni zrealizowany w przestrzeni użytkownika;
    • Mechanizm weryfikacji programów BPF zyskał możliwość określania i usuwania nieużywanego kodu. Do jądra włączono również poprawki z obsługą spinlocków dla podsystemu BPF, które oferują dodatkowe możliwości zarządzania równoległym wykonaniem programów BPF;
  • Sprzęt
    • W sterowniku Nouveau dodano wsparcie dla heterogenicznego zarządzania pamięcią, które umożliwia dostęp CPU i GPU do wspólnych, synchronizowanych obszarów pamięci. System pamięci wirtualnej współdzielonej (SVM, shared virtual memory) zrealizowano na bazie podsystemu HMM (Heterogeneous memory management), co pozwala na używanie urządzeń z własnymi jednostkami zarządzania pamięcią (MMU, memory management unit), które mogą uzyskiwać dostęp do pamięci głównej. Dzięki HMM można także zorganizować wspólną przestrzeń adresową między GPU a CPU, w której GPU może uzyskać dostęp do pamięci głównej procesu. Obsługa SVM jest na razie włączona tylko dla GPU rodziny Pascal, chociaż wsparcie zapewniono także dla GPU Volta i Turing. Ponadto, w Nouveau dodano nowy ioctl do zarządzania migracją obszarów pamięci procesów do pamięci GPU;
    • W sterowniku DRM Intel dla GPU Skylake i nowszych (gen9+) włączono domyślnie tryb fastboot, eliminujący zbędne zmiany trybów podczas uruchamiania. Dodano nowe identyfikatory urządzeń oparte na mikroarchitekturach Coffelake i Ice Lake. Dla chipów Coffelake dodano wsparcie GVT (wirtualizacja GPU). Dla wirtualnych GPU zrealizowano wsparcie VFIO EDID. Dla paneli LCD MIPI/DSI dodano wsparcie dla elementów ACPI/PMIC. Zrealizowano nowe tryby TV 1080p30/50/60 TV;
    • W sterowniku amdgpu dodano wsparcie dla GPU Vega10/20 BACO. Zrealizowano rozwiązania zarządzania energią Vega 10/20 oraz tabele zarządzania wentylatorem Vega 10. Dodano nowe identyfikatory PCI dla urządzeń GPU Picasso. Dodano interfejs zarządzania planowanymi zależnościami w celu wyeliminowania blokad wzajemnych;
    • Dodano sterownik DRM/KMS dla przyspieszaczy operacji ekranowych ARM Komeda (Mali D71);
    • Dodano wsparcie dla paneli ekranowych Toppoly TPG110, Sitronix ST7701, PDA 91-00156-A0, LeMaker BL035-RGB-002 3.5 oraz Kingdisplay kd097d04;
    • Dodano wsparcie dla kodeków dźwiękowych Rockchip RK3328, Cirrus Logic CS4341 i CS35L36, MediaTek MT6358, Qualcomm WCD9335 oraz Ingenic JZ4725B, a także platformy dźwiękowej Mediatek MT8183;
    • Dodano wsparcie dla kontrolerów NAND Flash STMicroelectronics FMC2, Amlogic Meson;
    • Dodano wsparcie dla przyspieszaczy dla systemów sprzętowych Habana AI;
    • Dodano wsparcie dla gigabitowych kontrolerów Ethernet NXP ENETC oraz bezprzewodowych interfejsów MediaTek MT7603E (PCIe) i MT76x8.

Jednocześnie Fundacja Wolnego Oprogramowania Ameryki Łacińskiej utworzyła
wariant całkowicie wolne jądro 5.1Linux-libre 5.1-gnu, oczyszczone z elementów firmware'ów i sterowników zawierających komponenty lub fragmenty kodu, których zastosowanie jest ograniczone przez producenta. W nowej wersji wyłączono ładowanie blobów w sterownikach mt7603 i goya. Zaktualizowano kod czyszczenia blobów w sterownikach i podsystemach wilc1000, iwlwifi, soc-acpi-intel, brcmfmac, mwifiex, btmrvl, btmtk oraz touchscreen_dmi. Zaprzestano czyszczenia blobów w bootloaderze firmware lantiq xrx200 z powodu jego usunięcia z jądra.

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster