Wydanie jądra Linuksa 5.3

Po dwóch miesiącach prac nad Linusem Torvaldsem wprowadzono wydanie jądra Linux 5.3. Wśród najbardziej zauważalnych zmian: obsługa procesorów graficznych AMD Navi, procesorów Zhaoxi i technologii zarządzania energią Intel Speed ​​​​Select, możliwość korzystania z instrukcji umwait w celu oczekiwania bez użycia cykli,
tryb „utylizacji zaciskania” zwiększający interaktywność dla procesorów asymetrycznych, wywołanie systemowe pidfd_open, możliwość wykorzystania adresów IPv4 z podsieci 0.0.0.0/8, możliwość akceleracji sprzętowej nftables, obsługa HDR w podsystemie DRM, integracja ACRN hiperwizor.

В zapowiedź nowej wersji Linus przypomniał wszystkim programistom o głównej zasadzie rozwoju jądra - utrzymywaniu tego samego zachowania dla komponentów przestrzeni użytkownika. Zmiany w jądrze nie powinny w żaden sposób psuć działających już aplikacji ani prowadzić do regresji na poziomie użytkownika. W takim przypadku naruszenie zachowania może spowodować nie tylko zmianę w ABI, usunięcie nieaktualnego kodu czy pojawienie się błędów, ale także pośredni wpływ na przydatne usprawnienia, które działają poprawnie. Jako przykład ilustrujący istniał odrzucona przydatny Optymalizacja w kodzie Ext4, co zmniejsza liczbę dostępów do napędu poprzez wyłączenie wstępnego odczytu tabeli i-węzłów dla małych żądań we/wy.

Optymalizacja doprowadziła do tego, że w wyniku spadku aktywności dysku entropia dla generatora liczb losowych getrandom() zaczęła akumulować się wolniej i w niektórych konfiguracjach w pewnych okolicznościach można było zaobserwować zawieszanie się podczas ładowania do momentu wyczerpania się puli entropii wypełniony. Ponieważ optymalizacja jest naprawdę przydatna, wśród programistów wywiązała się dyskusja, w której zaproponowano rozwiązanie problemu poprzez wyłączenie domyślnego trybu blokowania wywołania getrandom() i dodanie opcjonalnej flagi oczekiwania na entropię, ale taka zmiana miałaby wpływ na jakość liczb losowych na początkowym etapie ładowania.

Nowa wersja zawiera 15794 1974 poprawek od XNUMX programistów,
rozmiar poprawki - 92 MB (zmiany dotyczyły 13986 plików, dodano 258419 linii kodu,
Usunięto 599137 wierszy). Około 39% wszystkich przedstawionych w 5.3
zmiany dotyczą sterowników urządzeń, około 12% zmian dotyczy
nastawienie do aktualizacji kodu specyficznego dla architektur sprzętowych, 11%
związane ze stosem sieciowym, 3% z systemami plików i 3% z wewnętrznymi
podsystemy jądra.

Głównym innowacje:

  • Usługi pamięci i systemu
    • Ciągły rozwój funkcjonalności „pidfd”, aby pomóc w obsłudze sytuacji ponownego wykorzystania PID (pidfd jest powiązany z konkretnym procesem i nie ulega zmianie, podczas gdy PID może zostać powiązany z innym procesem po zakończeniu bieżącego procesu powiązanego z tym PID). Został on wcześniej dodany do jądra
      wywołanie systemowe pidfd_send_signal() i flaga CLONE_PIDFD w wywołaniu clone() w celu uzyskania pidfd do użycia w idfd_send_signal(). Używanie funkcji clone() z flagą CLONE_PIDFD może powodować problemy z menedżerami usług lub systemem wymuszania zakończenia braku pamięci na platformie Android. W tym przypadku do uruchomienia używane jest wywołanie fork() lub clone() bez CLONE_PIDFD.

      Jądro 5.3 wprowadziło wywołanie systemowe pidfd_open(), co pozwala uzyskać sprawdzalny plik pidfd dla dowolnego istniejącego procesu, który nie został utworzony przez wywołanie clone() z flagą CLONE_PIDFD. Dodano także obsługę odpytywania pidfd za pomocą poll() i epoll(), które pozwalają menedżerom procesów śledzić zakończenie dowolnych procesów bez obawy o sytuację wyścigu, jeśli PID zostanie przypisany do nowego procesu. Mechanizm powiadamiania o zakończeniu procesu powiązanego z pidfd jest podobny do powiadamiania o zakończeniu procesu potomnego;

    • Do harmonogramu zadań dodano obsługę mechanizmu przypinania ładunku (Mocowanie użytkowe), co pozwala zachować minimalne lub maksymalne zakresy częstotliwości, w zależności od zadań aktywnych na procesorze. Zaprezentowany mechanizm przyspiesza zadania, które bezpośrednio wpływają na jakość doświadczenia użytkownika, uruchamiając je przynajmniej z dolną granicą „żądanej” częstotliwości. Zadania o niskim priorytecie, które nie mają wpływu na pracę użytkownika, uruchamiane są z wykorzystaniem górnej granicy „dozwolonej” częstotliwości. Limity są ustawiane za pomocą atrybutów sched_uclamp_util_min i sched_uclamp_util_max w wywołaniu systemowym sched_setattr().
    • Dodano obsługę technologii zarządzania energią Wybór szybkości Intel, dostępne na wybranych serwerach z procesorami Intel Xeon. Technologia ta umożliwia ustawienie wydajności i przepustowości partycji dla różnych rdzeni procesora, co umożliwia nadanie priorytetu wydajności zadaniom uruchamianym na niektórych rdzeniach, kosztem wydajności innych rdzeni;
    • Procesy w przestrzeni użytkownika nadany możliwość odczekania krótkiego czasu bez użycia pętli przy użyciu instrukcji umwait. Instrukcja ta, wraz z instrukcjami umonitor i tpause, będzie oferowana w nadchodzących chipach Intela „Tremont” i pozwoli na implementację opóźnień, które są energooszczędne i nie wpływają na wydajność innych wątków podczas korzystania z Hyper Threading;
    • Dla architektury RISC-V dodano obsługę stron o dużej pamięci;
    • Mechanizm śledzenia kprobes dodał możliwość dereferencji wskaźników jądra do przestrzeni użytkownika, co można wykorzystać na przykład do oceny zawartości struktur przekazywanych do wywołań systemowych. Dodano także możliwość instalowania kontroli na etapie rozruchu.
    • Do pliku konfiguracyjnego dodano opcję PREEMPT_RT umożliwiającą pracę w czasie rzeczywistym. Sam kod obsługujący tryb czasu rzeczywistego nie został jeszcze dodany do jądra, ale pojawienie się opcji to dobry znak, że długoterminowy epicki integracja Aktualizacje z wywłaszczaniem w czasie rzeczywistym są już prawie gotowe;
    • Dodano wywołanie systemowe clone3() wraz z implementacją bardziej rozszerzalnej wersji interfejsu clone(), która umożliwia określenie większej liczby flag;
    • Dodano procedurę obsługi bpf_send_signal(), umożliwiającą programom BPF wysyłanie sygnałów do dowolnych procesów;
    • W przypadku zdarzeń perf w środowisku hypervisora ​​KVM dodano nowy mechanizm filtrowania zdarzeń, umożliwiający administratorowi określenie typów zdarzeń, które są dozwolone, a które nie, do monitorowania po stronie systemu gościa;
    • Do mechanizmu weryfikacji aplikacji eBPF dodano możliwość przetwarzania programów za pomocą pętli w przypadku, gdy wykonanie pętli jest ograniczone i nie może prowadzić do przekroczenia limitu maksymalnej liczby instrukcji;
  • Podsystem dyskowy, wejścia/wyjścia i systemy plików
    • System plików XFS obsługuje teraz wielowątkowe obejście i-węzła (na przykład podczas sprawdzania przydziałów). Dodano nowe ioctls BULKSTAT i INUMBERS, zapewniające dostęp do funkcji, które pojawiły się w piątej edycji formatu FS, takich jak czas urodzenia i-węzła oraz możliwość ustawienia parametrów BULKSTAT i INUMBERS dla każdej grupy AG (Grupy alokacyjne);
    • W Ext4 dodano wsparcie puste przestrzenie w katalogach (niepołączone bloki).
      Zapewnione przetwarzanie flaga „i” (niezmienna) dla otwartych plików (zapis jest zabroniony w sytuacji, gdy flaga została ustawiona w momencie, gdy plik był już otwarty);

    • Btrfs zapewnia definicję szybkiej implementacji crc32c na wszystkich architekturach;
    • W CIFS kod obsługi smbdirect został usunięty w ramach prac eksperymentalnych. SMB3 dodał możliwość korzystania z algorytmów kryptograficznych w trybie GCM. Dodano nową opcję montowania w celu wyodrębnienia parametrów trybu z wpisów ACE (wpis kontroli dostępu). Zoptymalizowano wydajność wywołania open();
    • Dodano opcję do F2FS, aby ograniczyć moduł zbierający elementy bezużyteczne podczas działania w trybie checkpoint=wyłącz. Dodano ioctl, aby usunąć zakresy bloków z F2FS, umożliwiając dostosowywanie rozmiaru partycji w locie. Dodano możliwość umieszczenia pliku wymiany w F2FS w celu zapewnienia bezpośredniego wejścia/wyjścia. Dodano obsługę przypinania pliku i przydzielania bloków dla podobnych plików dla wszystkich użytkowników;
    • Dodano obsługę operacji asynchronicznych sendmsg() i recvmsg() do interfejsu asynchronicznego wejścia/wyjścia io_uring;
    • Do systemu plików UBIFS dodano obsługę kompresji przy użyciu algorytmu zstd oraz możliwość weryfikacji podpisanych obrazów FS;
    • Ceph FS obsługuje teraz etykiety bezpieczeństwa SELinux dla plików;
    • Dla NFSv4 zaimplementowano nową opcję montowania „nconnect=”, która określa ilość nawiązywanych połączeń z serwerem. Ruch pomiędzy tymi połączeniami będzie dystrybuowany przy użyciu równoważenia obciążenia. Ponadto serwer NFSv4 tworzy teraz katalog /proc/fs/nfsd/clients z informacjami o bieżących klientach, w tym informacjami o otwartych przez nich plikach;
  • Wirtualizacja i bezpieczeństwo
    • Jądro zawiera hypervisor dla urządzeń wbudowanych ACRN, który został napisany z myślą o gotowości do zadań w czasie rzeczywistym i przydatności do stosowania w systemach o znaczeniu krytycznym. ACRN zapewnia minimalny narzut, gwarantuje niskie opóźnienia i odpowiednią responsywność podczas interakcji ze sprzętem. Obsługuje wirtualizację zasobów procesora, wejść/wyjść, podsystemu sieciowego, operacji graficznych i dźwiękowych. ACRN może być używany do uruchamiania wielu izolowanych maszyn wirtualnych w elektronicznych jednostkach sterujących, deskach rozdzielczych, samochodowych systemach informacyjnych, konsumenckich urządzeniach IoT i innych technologiach wbudowanych;
    • W trybie użytkownika Linux dodany Tryb podróży w czasie, który pozwala spowolnić lub przyspieszyć czas w wirtualnym środowisku UML, aby ułatwić debugowanie kodu związanego z czasem. Dodatkowo dodano parametr
      start podróży w czasie, który umożliwia uruchomienie zegara systemowego od określonego momentu w formacie epoki;

    • Dodano nowe opcje wiersza poleceń jądra „init_on_alloc” i „init_on_free”, jeśli są określone, włączone jest zerowanie przydzielonych i zwolnionych obszarów pamięci (wypełnianie zerami dla malloc i free), co pozwala na zwiększenie bezpieczeństwa dzięki dodatkowemu narzutowi inicjalizacji;
    • Dodano nowy sterownik virtio-iommu z implementacją parawirtualnego urządzenia, które umożliwia wysyłanie żądań IOMMU takich jak ATTACH, DETACH, MAP i UNMAP poprzez transport virtio bez emulacji tablic stron pamięci;
    • Dodano nowy sterownik virtio-pmemreprezentujący dostęp do urządzeń pamięci masowej odwzorowanych w fizycznej przestrzeni adresowej, takich jak NVDIMM;
    • Zaimplementowano możliwość dołączania kluczy kryptograficznych do przestrzeni nazw użytkownika lub sieci (klucze stają się niedostępne poza wybraną przestrzenią nazw), a także ochrony kluczy za pomocą list ACL;
    • Do podsystemu kryptograficznego dodany obsługa bardzo szybkiego, niekryptograficznego algorytmu mieszającego xxhasz, którego prędkość zależy od wydajności pamięci;
  • Podsystem sieciowy
    • Włączono przetwarzanie adresów IPv4 z zakresu 0.0.0.0/8, który wcześniej był niedostępny do użycia. Wprowadzenie tej podsieci pozwoli rozdystrybuować kolejne 16 milionów adresów IPv4;
    • W Netfilter dla nftables dodany obsługa mechanizmów sprzętowej akceleracji filtrowania pakietów poprzez zastosowanie dodanych sterowników API bloku przepływu. Z boku kart sieciowych można umieścić całe tabele reguł ze wszystkimi łańcuchami. Włączenie odbywa się poprzez powiązanie flagi NFT_TABLE_F_HW z tabelą. Obsługuje proste metadane protokołów warstw 3 i 4, akcje akceptowania/odrzucania, mapowania według adresów IP oraz portów sieciowych nadawcy/odbiorcy i typu protokołu;
    • Dodany wbudowana obsługa śledzenia połączeń dla mostów sieciowych, która nie wymaga stosowania warstwy emulującej br_netfilter;
    • W nf_tables dodany zaimplementowano także obsługę modułu SYNPROXY replikującego podobną funkcjonalność z iptables oraz możliwość sprawdzania reguł dla poszczególnych opcji w nagłówku IPv4;
    • Dodano możliwość dołączania programów BPF do wywołań systemowych setsockopt() i getsockopt(), co pozwala na przykład na dołączenie do tych wywołań własnych procedur obsługi dostępu. Dodatkowo dodano nowy call point (hook), za pomocą którego można jednorazowo zorganizować wywołanie do programu BPF na każdy interwał RTT (czas podróży w obie strony, czas pingu);
    • Dla IPv4 i IPv6 dodany nowy mechanizm przechowywania danych routingu Nexthop mający na celu zwiększenie skalowalności tablic routingu. Testy wykazały, że przy użyciu nowego systemu do jądra wczytano zestaw 743 tys. tras w zaledwie 4.3 sekundy;
    • Dla Bluetootha wdrożone funkcjonalność wymagana do obsługi LE ping;
  • Sprzęt
    • Dodany wsparcie dla firmowych procesorów kompatybilnych z x86 Zhaoxin, opracowany w wyniku wspólnego projektu VIA Technologies i władz miejskich Szanghaju. Rodzina procesorów ZX zbudowana jest na architekturze x86-64 Isaiah, kontynuując rozwój technologii VIA Centaur;
    • Podsystem DRM (Direct Rendering Manager), a także sterowniki graficzne amdgpu i i915 dodały obsługę analizowania, przetwarzania i wysyłania metadanych HDR (wysokiego zakresu dynamiki) przez port HDMI, umożliwiając korzystanie z paneli i ekranów HDR obsługujących wyświetlanie dodatkowych zakresów jasności ;
    • W sterowniku amdgpu dodano wstępną obsługę procesora graficznego AMD NAVI (RX5700), która obejmuje sterownik podstawowy, kod interakcji ekranu (DCN2), obsługę GFX i obliczeń (GFX10),
      SDMA 5 (System DMA0), zarządzanie energią i kodery/dekodery multimediów (VCN2). amdgpu poprawia także obsługę kart opartych na procesorach graficznych Vega12 i Vega20, dla których dodano dodatkowe możliwości zarządzania pamięcią i energią;

    • Dodano obsługę kart opartych na procesorach graficznych VegaM do sterownika amdkfd (dla dyskretnych procesorów graficznych, takich jak Fidżi, Tonga, Polaris);
    • W sterowniku DRM dla kart graficznych Intel dla chipów Icelake wdrożone nowy wielosegmentowy tryb korekcji gamma. Dodano możliwość przesyłania sygnału wyjściowego przez DisplayPort w formacie YCbCr4:2:0. Dodano nowe oprogramowanie sprzętowe GuC dla SKL, BXT, KBL, GLK i ICL. Zaimplementowano możliwość wyłączenia zasilania ekranu w trybie asynchronicznym. Dodany obsługa zapisywania i przywracania kontekstu renderowania dla chipów Ironlake (gen5) i gen4 (Broadwater - Cantiga), co pozwala przywrócić stan GPU z przestrzeni użytkownika podczas przechodzenia z jednej operacji wsadowej do drugiej;
    • Sterownik Nouveau zapewnia wykrywanie chipsetu NVIDIA Turing TU116;
    • Rozszerzono możliwości sterownika DRM/KMS dla akceleratorów ekranowych ARM Komeda (Mali D71), obsługę skalowania, dzielenia/scalania warstw, rotacji, zapisu odroczonego, AFBC, SMMU i formatów kodowania kolorów Y0L2, P010, YUV420_8/10BIT dodano;
    • Sterownik MSM dodaje obsługę serii GPU Adreno A540 stosowanej w procesorach Qualcomm, a także obsługę kontrolera DSI MSM8998 dla Snapdragon 835;
    • Dodano sterowniki do paneli LCD Samsung S6E63M0, Armadeus ST0700, EDT ETM0430G0DH6, OSD101T2045-53TS,
      Evervision VGG804821, FriendlyELEC HD702E, KOE tx14d24vm1bpa, TFC S9700RTWV43TR-01B, EDT ET035012DM6 i VXT VL050-8048NT-C01;

    • обавлен sterownik umożliwiający włączenie narzędzi przyspieszających dekodowanie
      filmy dostępne w Amlogic Meson SoC;

    • W sterowniku v3d (dla procesora graficznego Broadcom Video Core V stosowanego w Raspberry Pi) pojawił się wsparcie wysyłanie shaderów obliczeniowych;
    • обавлен sterownik klawiatur i gładzików SPI stosowanych w nowoczesnych modelach laptopów Apple MacBook i MacBookPro;
    • Dodany dodatkowa ochrona wywołań ioctl związanych ze sterownikiem dyskietki, a sam sterownik jest oznaczony jako nieobsługiwany
      („osierocony”), co oznacza zakończenie jego testów. Sterownik jest nadal przechowywany w jądrze, ale nie gwarantuje się jego prawidłowego działania. Sterownik jest uważany za przestarzały, ponieważ trudno jest znaleźć działający sprzęt do jego testowania - wszystkie obecne dyski zewnętrzne z reguły korzystają z interfejsu USB.

    • обавлен sterownik cpufreq dla płyt Raspberry Pi, który pozwala dynamicznie kontrolować zmiany częstotliwości procesora;
    • Dodano obsługę nowych ARM SoC Mediatek mt8183 (4x Cortex-A73 + 4x Cortex-A53), TI J721E (2x Cortex-A72 + 3x Cortex-R5F + 3 DSP + MMA) i Amlogic G12B (4x Cortex-A73 + 2x Cortex- A53 ), a także tablice:
      • Puryzm Librem5,
      • prędkość BMC,
      • Microsoft Olympus BMC,
      • Kontron SMARC,
      • Novtech Meerkat96 (i.MX7),
      • ST Mikro mściciel96,
      • Google Cheza (Qualcomm SDM845),
      • Qualcomm Dragonboard 845c (Qualcomm SDM845),
      • Pudełko TV Hugsun X99 (Rockchip RK3399),
      • Khadas Edge/Edge-V/Captain (Rockchip RK3399),
      • HiHope RZ/G2M,
      • NXP LS1021A-TSN.

Jednocześnie Latynoamerykańska Fundacja Wolnego Oprogramowania uformowany
вариант całkowicie darmowe jądro 5.3 - Linux-libre 5.3-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. W nowej wersji ładowanie obiektów BLOB jest wyłączone w sterownikach qcom, hdcp drm, allegro-dvt i meson-vdec.
Zaktualizowano kod czyszczenia obiektów blob w sterownikach i podsystemach amdgpu, i915, netx, r8169, brcmfmac, rtl8188eu, adreno, si2157, pvrusb2, touchscreen_dmi, sterownik dźwięku dla skylake, a także w dokumentacji mikrokodu.

Źródło: opennet.ru

Dodaj komentarz