Wydanie jądra Linuksa 5.2

Po dwóch miesiącach prac nad Linusem Torvaldsem wprowadzono wydanie jądra Linux 5.2. Wśród najbardziej zauważalnych zmian: tryb pracy Ext4 nie uwzględnia wielkości liter, osobne wywołania systemowe do montowania systemu plików, sterowniki dla GPU Mali 4xx/6xx/7xx, możliwość obsługi zmian wartości sysctl w programach BPF, mapowanie urządzeń moduł dm-dust, ochrona przed atakami MDS, obsługa Sound Open Firmware dla DSP, optymalizacja wydajności BFQ, udostępnienie podsystemu PSI (Pressure Stall Information) w systemie Android.

Nowa wersja zawiera 15100 1882 poprawek od XNUMX programistów,
rozmiar poprawki - 62 MB (zmiany dotyczyły 30889 plików, dodano 625094 linii kodu, usunięto 531864 linii). Około 45% wszystkich przedstawionych w 5.2
zmiany dotyczą sterowników urządzeń, około 21% zmian dotyczy
nastawienie do aktualizacji kodu specyficznego dla architektur sprzętowych, 12%
związane ze stosem sieciowym, 3% z systemami plików i 3% z wewnętrznymi
podsystemy jądra. 12.4% wszystkich zmian przygotował Intel, 6.3% Red Hat, 5.4% Google, 4.0% AMD, 3.1% SUSE, 3% IBM, 2.7% Huawei, 2.7% Linaro, 2.2% ARM , 1.6% - Oracle.

Głównym innowacje:

  • Podsystem dyskowy, wejścia/wyjścia i systemy plików
    • Dodano dla Ext4 wsparcie działa bez rozróżniania wielkości liter w nazwach plików, co jest aktywowane tylko w odniesieniu do poszczególnych pustych katalogów przy użyciu nowego atrybutu „+F” (EXT4_CASEFOLD_FL). Gdy ten atrybut jest ustawiony na katalogu, wszystkie operacje na plikach i podkatalogach w środku będą wykonywane bez uwzględnienia wielkości liter, w tym wielkość liter będzie ignorowana przy wyszukiwaniu i otwieraniu plików (np. plików Test.txt, test.txt i test.TXT w takich katalogach będą uważane za takie same). Domyślnie w systemie plików nadal rozróżniana jest wielkość liter, z wyjątkiem katalogów z atrybutem „chattr +F”;
    • Ujednolicono funkcje przetwarzania znaków UTF-8 w nazwach plików, które są wykorzystywane przy wykonywaniu operacji porównywania ciągów i normalizacji;
    • XFS dodaje infrastrukturę do monitorowania stanu systemu plików i nowy ioctl do sprawdzania stanu systemu. Zaimplementowano eksperymentalną funkcję sprawdzania liczników superbloków w trybie online.
    • Dodano nowy moduł mapowania urządzeń „dm-kurz„, który pozwala symulować pojawienie się uszkodzonych bloków na nośniku lub błędów podczas odczytu z dysku. Moduł pozwala uprościć debugowanie i testowanie aplikacji oraz różnych systemów pamięci masowej w obliczu możliwych awarii;
    • Przeprowadzone Znaczące optymalizacje wydajności harmonogramu we/wy BFQ. W warunkach dużego obciążenia we/wy dokonano optymalizacji dopuszczać Skróć czas operacji takich jak uruchamianie aplikacji nawet o 80%.
    • Dodano serię wywołań systemowych do montowania systemów plików: fsopen(), otwarte_drzewo(), fspick(), fsmount(), fsconfig() и move_mount(). Te wywołania systemowe umożliwiają oddzielne przetwarzanie różnych etapów montowania (przetwarzanie superbloku, uzyskiwanie informacji o systemie plików, montowanie, dołączanie do punktu montowania), które wcześniej były wykonywane przy użyciu ogólnego wywołania systemowego mount(). Oddzielne wywołania zapewniają możliwość wykonywania bardziej złożonych scenariuszy montowania i wykonywania oddzielnych operacji, takich jak rekonfiguracja superbloku, włączanie opcji, zmiana punktu montowania i przenoszenie do innej przestrzeni nazw. Ponadto oddzielne przetwarzanie pozwala dokładnie określić przyczyny generowania kodów błędów i ustawić wiele źródeł dla wielowarstwowych systemów plików, takich jak nakładki;
    • Do interfejsu asynchronicznego we/wy io_uring dodano nową operację IORING_OP_SYNC_FILE_RANGE, która wykonuje akcje równoważne wywołaniu systemowemu zakres_pliku_synchronizacji(), a także zaimplementowano możliwość rejestracji eventfd w io_uring i otrzymywania powiadomień o zakończeniu operacji;
    • Dla systemu plików CIFS dodano ioctl FIEMAP, zapewniający wydajne mapowanie zasięgu, a także obsługę trybów SEEK_DATA i SEEK_HOLE;
    • W podsystemie FUSE proponowane API do zarządzania buforowaniem danych;
    • Btrfs zoptymalizował implementację qgroups i poprawił szybkość wykonywania fsync dla plików z wieloma twardymi łączami. Ulepszono kod sprawdzający integralność danych, który teraz uwzględnia możliwe uszkodzenie informacji w pamięci RAM przed zrzuceniem danych na dysk;
    • CEPH dodał obsługę eksportu migawek poprzez NFS;
    • Poprawiono implementację montowania NFSv4 w trybie „miękkim” (w przypadku wystąpienia błędu przy dostępie do serwera w trybie „miękkim”, wywołanie natychmiast zwraca kod błędu, a w trybie „twardym” kontrola jest przekazywana dopiero po uruchomieniu FS dostępność lub przekroczenie limitu czasu zostanie przywrócone). Nowa wersja zapewnia dokładniejszą obsługę przekroczeń limitu czasu, szybsze odzyskiwanie po awarii i nową opcję montowania „softerr”, która umożliwia zmianę kodu błędu (ETIMEDOUT) zwracanego w przypadku przekroczenia limitu czasu;
    • Interfejs API nfsdcld, zaprojektowany do śledzenia stanu klientów NFS, umożliwia serwerowi NFS prawidłowe śledzenie stanu klienta po ponownym uruchomieniu. Zatem demon nfsdcld może teraz działać jako procedura obsługi nfsdcltrack;
    • Dla AFS dodany emulacja blokad zakresu bajtów w plikach (Blokowanie zakresu bajtów);
  • Wirtualizacja i bezpieczeństwo
    • Wykonano prace mające na celu wyeliminowanie miejsc w jądrze, które umożliwiają wykonanie kodu z zapisywalnych odbitych obszarów pamięci, co pozwala na zablokowanie potencjalnych luk, które mogłyby zostać wykorzystane podczas ataku;
    • Dodano nowy parametr wiersza poleceń jądra „mitigations=”, zapewniający uproszczony sposób kontrolowania włączania niektórych technik w celu ochrony przed lukami związanymi ze spekulatywnym wykonywaniem instrukcji na procesorze. Przekazanie „mitigations=off” wyłącza wszystkie istniejące metody, a tryb domyślny „mitigations=auto” włącza ochronę, ale nie wpływa na użycie Hyper Threading. Tryb „mitigations=auto,nosmt” dodatkowo wyłącza funkcję Hyper Threading, jeśli wymaga tego metoda ochrony.
    • Dodany obsługa elektronicznego podpisu cyfrowego zgodnie z GOST R 34.10-2012 (RFC 7091, ISO/IEC 14888-3), rozwinięty Witalij Chikunow z Basalt SPO. Dodano obsługę AES128-CCM do natywnej implementacji TLS. Dodano obsługę algorytmów AEAD do modułu crypto_simd;
    • W Kconfig dodany oddzielna sekcja „utwardzanie jądra” z opcjami zwiększającymi ochronę jądra. Obecnie nowa sekcja zawiera tylko ustawienia umożliwiające włączenie wtyczek usprawniających sprawdzanie GCC;
    • Kod jądra jest już prawie gotowy dostarczony z nierozdzielających instrukcji case w przełączniku (bez powrotu i przerwania po każdym bloku case). Pozostaje naprawić 32 z 2311 przypadków takiego użycia przełącznika, po czym podczas budowania jądra będzie można użyć trybu „-Wimplicit-fallthrough”;
    • Dla architektury PowerPC zaimplementowano obsługę mechanizmów sprzętowych ograniczających niepożądane ścieżki dostępu jądra do danych w przestrzeni użytkownika;
    • Dodano kod blokujący ataki Klasa MDS (Microarchitectural Data Sampling) w procesorach Intel. Możesz sprawdzić, czy system jest podatny na luki, za pomocą zmiennej SysFS „/sys/devices/system/cpu/vulnerabilities/mds”. DOSTĘPNOŚĆ dwa tryby ochrony: pełny, który wymaga aktualizacji mikrokodu i obejście, które nie gwarantuje całkowitego wyczyszczenia buforów procesora, gdy kontrola jest przekazywana do przestrzeni użytkownika lub systemu gościa. Aby kontrolować tryby ochrony, do jądra dodano parametr „mds=”, który może przyjmować wartości „full”, „full,nosmt” (+ wyłącz Hyper-Threads) i „off”;
    • Na systemach x86-64 dodano ochronę „stackguard-page” dla przerwań IRQ, mechanizmów debugowania i obsługi wyjątków, której istotą jest podstawienie stron pamięci na granicy stosem, dostęp do którego prowadzi do wygenerowania wyjątek (błąd strony);
    • Dodano ustawienie sysctl vm.unprivileged_userfaultfd, które kontroluje zdolność nieuprzywilejowanych procesów do korzystania z wywołania systemowego userfaultfd();
  • Podsystem sieciowy
    • Dodany Obsługa bramy IPv6 dla tras IPv4. Na przykład możesz teraz określić reguły routingu, takie jak „ip ro add 172.16.1.0/24 via inet6 2001:db8::1 dev eth0”;
    • W przypadku protokołu ICMPv6 zaimplementowano wywołania ioctl icmp_echo_ignore_anycast i icmp_echo_ignore_multicast w celu ignorowania ICMP ECHO dla anycast i
      adresy multiemisji. Dodany możliwość ograniczenia intensywności przetwarzania pakietów ICMPv6;

    • Dla protokołu mesh BATMAN (Better Approach To Mobile Adhoc Networking), który umożliwia tworzenie zdecentralizowanych sieci, w których każdy węzeł jest połączony poprzez węzły sąsiednie, dodany obsługa transmisji od multicast do unicast, a także możliwość sterowania poprzez sysfs;
    • W ettoolu dodany nowy parametr Fast Link Down, który pozwala skrócić czas otrzymania informacji o zdarzeniu awarii łącza dla 1000BaseT (w normalnych warunkach opóźnienie wynosi do 750ms);
    • Pojawił się okazja wiązanie tuneli Foo-Over-UDP z konkretnym adresem, interfejsem sieciowym lub gniazdem (wcześniej wiązanie odbywało się wyłącznie poprzez wspólną maskę);
    • W stosie bezprzewodowym zabezpieczone możliwość wdrożenia handlerów
      OWE (oportunistyczne szyfrowanie bezprzewodowe) w przestrzeni użytkownika;

    • W Netfilter dodano obsługę rodziny adresów inet do łańcuchów nat (na przykład można teraz używać jednej reguły translacji do przetwarzania protokołów ipv4 i ipv6, bez oddzielania reguł dla ipv4 i ipv6);
    • W Netlinku dodany tryb rygorystyczne dla ścisłej weryfikacji poprawności wszelkich komunikatów i atrybutów, w których nie wolno przekraczać oczekiwanej wielkości atrybutów i zabrania się dodawania dodatkowych danych na końcu komunikatów;
  • Usługi pamięci i systemu
    • Do wywołania systemowego clone() dodano flagę CLONE_PIDFD. Jeśli jest określona, ​​deskryptor pliku „pidfd” identyfikowany z utworzonym procesem potomnym jest zwracany do procesu nadrzędnego. Na przykład ten deskryptor pliku może być używany do wysyłania sygnałów bez obawy, że wpadnie w sytuację wyścigu (natychmiast po wysłaniu sygnału docelowy PID może zostać zwolniony z powodu zakończenia procesu i zajęty przez inny proces);
    • W drugiej wersji cgroup dodano funkcjonalność kontrolera zamrażarki, dzięki której możesz przerwać pracę w cgroup i tymczasowo zwolnić część zasobów (procesor, wejścia/wyjścia, a potencjalnie nawet pamięć) w celu wykonania innych zadań. Zarządzanie odbywa się poprzez pliki kontrolne cgroup.freeze i cgroup.events w drzewie cgroup. Wpis 1 w cgroup.freeze zawiesza procesy w bieżącej grupie cgroup i wszystkich grupach podrzędnych. Ponieważ zamrażanie zajmuje trochę czasu, udostępniany jest dodatkowy plik cgroup.events, dzięki któremu można dowiedzieć się o zakończeniu operacji;
    • Zabezpieczone eksport atrybutów pamięci dołączonych do każdego węzła w sysfs, co pozwala określić z przestrzeni użytkownika charakter przetwarzania banków pamięci w systemach z pamięcią heterogeniczną;
    • Udoskonalono podsystem PSI (Pressure Stall Information), który umożliwia analizę informacji o czasie oczekiwania na przyjęcie różnych zasobów (CPU, pamięć, I/O) dla określonych zadań lub zbiorów procesów w cgroup. Korzystając z PSI, procedury obsługi przestrzeni użytkownika mogą dokładniej oszacować poziom obciążenia systemu i wzorce spowolnienia w porównaniu do średniej obciążenia. Nowa wersja zapewnia obsługę ustawiania progów czułości oraz możliwość wykorzystania wywołania poll() do otrzymania powiadomienia o uruchomieniu ustawionych progów przez określony czas. Ta funkcja pozwala Androidowi monitorować braki pamięci na wczesnym etapie, identyfikować źródło problemów i zamykać nieistotne aplikacje bez powodowania problemów zauważalnych dla użytkownika. Podczas testów warunków skrajnych narzędzia do monitorowania zużycia pamięci oparte na PSI wykazały 10 razy mniej fałszywych alarmów w porównaniu ze statystykami vm Pressure;
    • Kod do sprawdzania programów BPF został zoptymalizowany, co pozwala na sprawdzanie nawet 20 razy szybciej w przypadku dużych programów. Optymalizacja umożliwiła podniesienie limitu wielkości programów BPF z 4096 do miliona instrukcji;
    • Dla programów BPF nadany możliwość dostępu do danych globalnych, co pozwala na definiowanie zmiennych i stałych globalnych w programach;
    • обавлен API, który pozwala kontrolować zmiany parametrów sysctl z programów BPF;
    • Dla architektury MIPS32 zaimplementowano kompilator JIT dla maszyny wirtualnej eBPF;
    • Dla 32-bitowej architektury PowerPC dodano obsługę narzędzia debugującego KASan (Kernel Address Sanizer), które pomaga identyfikować błędy podczas pracy z pamięcią;
    • W systemach x86-64 usunięto ograniczenie dotyczące umieszczania zrzutów stanu podczas awarii jądra (zrzutu awaryjnego) w obszarach pamięci powyżej 896MB;
    • Dla architektury s390 zaimplementowano obsługę randomizacji przestrzeni adresowej jądra (KASLR) i możliwość weryfikacji podpisów cyfrowych podczas ładowania jądra za pomocą kexec_file_load();
    • Dla architektury PA-RISC dodano obsługę debugera jądra (KGDB), znaków skoku i kprobes;
  • Sprzęt
    • Sterownik wliczony w cenę Lima dla procesora graficznego Mali 400/450, stosowanego w wielu starszych układach opartych na architekturze ARM. Dla nowszych procesorów graficznych Mali dodano sterownik Panfrost, obsługujący chipy oparte na mikroarchitekturach Midgard (Mali-T6xx, Mali-T7xx, Mali-T8xx) i Bifrost (Mali G3x, G5x, G7x);
    • Dodano obsługę urządzeń audio korzystających z otwartego oprogramowania sprzętowego Dźwięk Otwarte oprogramowanie sprzętowe (SOF). Pomimo dostępności otwartych sterowników, kod oprogramowania układowego układów dźwiękowych nadal pozostawał zamknięty i był dostarczany w formie binarnej. Projekt Sound Open Firmware został opracowany przez firmę Intel w celu stworzenia otwartego oprogramowania układowego dla układów DSP związanych z przetwarzaniem dźwięku (później do rozwoju dołączył także Google). Obecnie w ramach projektu przygotowano już odkrycie oprogramowania sprzętowego dla układów dźwiękowych platform Intel Baytrail, CherryTrail, Broadwell, ApolloLake, GeminiLake, CannonLake i IceLake;
    • Sterownik Intel DRM (i915) dodaje obsługę chipów
      Elkhartlake (11 generacja). Dodano identyfikatory PCI dla chipów Comet Lake (Gen 9). Ustabilizowano obsługę chipów Icelake, dla których dodano także dodatkowe identyfikatory urządzeń PCI.
      Dołączony
      tryb asynchronicznego przełączania pomiędzy dwoma buforami w pamięci wideo (async flip) podczas wykonywania operacji zapisu przez mmio, co znacznie zwiększyło wydajność niektórych aplikacji 3D (na przykład wydajność w teście 3DMark Ice Storm wzrosła o 300-400%). Dodano wsparcie technologiczne HDCP2.2 (High-bandwidth Digital Content Protection) do szyfrowania sygnałów wideo przesyłanych przez HDMI;

    • Sterownik amdgpu dla procesora graficznego Vega20 dodany wsparcie dla RAS (Reliability, Availability, Serviceability) oraz eksperymentalne wsparcie dla podsystemu SMU 11, które zastąpiło technologię Powerplay. Dla karty graficznej Vega12 dodany obsługa trybu BACO (Bus Active, Chip Off). Dodano wstępną obsługę XGMI, szybkiej magistrali (PCIe 4.0) do wzajemnych połączeń GPU. Dodano brakujące identyfikatory dla kart opartych na GPU Polaris10 do sterownika amdkfd;
    • W sterowniku Nouveau dodano obsługę płyt opartych na chipsecie NVIDIA Turing 117 (TU117, zastosowany w GeForce GTX 1650). W
      kconfig dodany ustawienie wyłączające przestarzałe funkcje, które nie są już używane w bieżących wersjach libdrm;

    • Do interfejsu API DRM i sterownika amdgpu dodano obsługę obiektów synchronizacji „oś czasu”, dzięki czemu można obejść się bez klasycznego blokowania.
    • Sterownik vboxvideo dla wirtualnego procesora graficznego VirtualBox został przeniesiony z gałęzi testowej do głównej struktury;
    • Dodano sterownik aspeed dla układu GFX SoC ASPEED;
    • Dodano obsługę ARM SoC i Intel Agilex (SoCFPGA), NXP i.MX8MM, Allwinner (RerVision H3-DVK (H3), Oceanic 5205 5inMFD, ,Beelink GS2 (H6), Orange Pi 3 (H6)), Rockchip (Orange Pi ) płyty RK3399, Nanopi NEO4, Veyron-Mighty Chromebook), Amlogic: SEI Robotics SEI510,
      ST Micro (stm32mp157a, stm32mp157c), NXP (
      Eckelmann ci4x10 (i.MX6DL),

      i.MX8MM EVK (i.MX8MM),

      ZII i.MX7 RPU2 (i.MX7),

      ZII SPB4 (VF610),

      Zii Ultra (i.MX8M),

      TQ TQMa7S (i.MX7Solo),

      TQ TQMa7D (i.MX7Dual),

      Kobo Aura (i.MX50),

      Menlosystems M53 (i.MX53)), NVIDIA Jetson Nano (Tegra T210).

Jednocześnie Latynoamerykańska Fundacja Wolnego Oprogramowania uformowany
вариант całkowicie darmowe jądro 5.2 - Linux-libre 5.2-gnu, oczyszczone z elementów oprogramowania sprzętowego i sterowników zawierających niewolne komponenty lub sekcje kodu, których zakres jest ograniczony przez producenta. Nowa wersja umożliwia przesyłanie plików
Dźwięk Open Firmware. Ładowanie obiektów BLOB w sterownikach jest wyłączone
mt7615, rtw88, rtw8822b, rtw8822c, btmtksdio, iqs5xx, ishtp i ucsi_ccg. Zaktualizowano kod czyszczenia obiektów blob w sterownikach i podsystemach ixp4xx, imx-sdma, amdgpu, nouveau i goya, a także w dokumentacji mikrokodu. Zatrzymano czyszczenie plam w sterowniku r8822be z powodu jego usunięcia.

Źródło: opennet.ru

Dodaj komentarz