Wydanie jądra Linuksa 5.6

Po dwóch miesiącach prac nad Linusem Torvaldsem wprowadzono wydanie jądra Linux 5.6. Wśród najbardziej zauważalnych zmian: integracja interfejsu WireGuard VPN, obsługa USB4, przestrzenie nazw dla czasu, możliwość tworzenia procedur obsługi przeciążenia TCP przy użyciu BPF, wstępna obsługa MultiPath TCP, pozbycie się jądra problemu 2038, mechanizm „bootconfig” , StrefaFS.

Nowa wersja zawiera 13702 1810 poprawek od XNUMX programistów,
rozmiar poprawki - 40 MB (zmiany dotyczyły 11577 plików, dodano 610012 linii kodu,
Usunięto 294828 wierszy). Około 45% wszystkich przedstawionych w 5.6
zmiany dotyczą sterowników urządzeń, około 15% zmian dotyczy
nastawienie do aktualizacji kodu specyficznego dla architektur sprzętowych, 12%
powiązane ze stosem sieciowym, 4% z systemami plików i 3% z wewnętrznymi
podsystemy jądra.

Głównym innowacje:

  • Podsystem sieciowy
    • Dodany implementacja interfejsu VPN WireGuard, który jest realizowany w oparciu o nowoczesne metody szyfrowania (ChaCha20, Poly1305, Curve25519, BLAKE2s), jest łatwy w obsłudze, pozbawiony komplikacji, sprawdził się w wielu dużych wdrożeniach i zapewnia bardzo wysoką wydajność (3,9 razy szybciej niż OpenVPN pod względem przepustowości). WireGuard wykorzystuje koncepcję routingu klucza szyfrowania, która polega na dołączeniu klucza prywatnego do każdego interfejsu sieciowego i użyciu go do powiązania kluczy publicznych. Klucze publiczne są wymieniane w celu nawiązania połączenia w sposób podobny do SSH. Podstawowe elementy kryptograficzne wymagane do działania WireGuard były przeniósł ponad z biblioteki Cynk jako część standardowego Crypto API i w zestawie w rdzeń 5.5.
    • Zaczęła się integracja komponentów niezbędnych do obsługi MPTCP (MultiPath TCP), rozszerzenie protokołu TCP do organizacji działania połączenia TCP z dostarczaniem pakietów jednocześnie kilkoma trasami przez różne interfejsy sieciowe powiązane z różnymi adresami IP. W przypadku aplikacji sieciowych takie zagregowane połączenie wygląda jak zwykłe połączenie TCP, a cała logika separacji przepływów jest wykonywana przez MPTCP. Wielościeżkowy protokół TCP można wykorzystać zarówno do zwiększenia przepustowości, jak i zwiększenia niezawodności. Na przykład MPTCP można wykorzystać do zorganizowania transmisji danych na smartfonie przy użyciu jednocześnie łączy WiFi i 4G lub do obniżenia kosztów poprzez połączenie serwera kilkoma tanimi łączami zamiast jednego drogiego.
    • Dodany obsługa dyscypliny przetwarzania kolejek sieciowych sch_ets (Ulepszony wybór skrzyni biegów, IEEE 802.1Qaz), który zapewnia możliwość dystrybucji pasma pomiędzy różnymi klasami ruchu. Jeżeli obciążenie danej klasy ruchu jest mniejsze niż przydzielona przepustowość, wówczas ETS umożliwia innym klasom ruchu wykorzystanie dostępnej (niewykorzystanej) przepustowości. Qdisc sch_ets jest skonfigurowany jako dyscyplina PRIO i wykorzystuje klasy ruchu do definiowania ścisłych i współdzielonych limitów przepustowości. ETS działa jako połączenie dyscyplin PRZED и DRR — jeśli są ściśle ograniczone klasy ruchu, stosuje się PRIO, natomiast jeśli w kolejce nie ma ruchu, działa to jak DRR.
    • Dodano nowy typ programów BPF BPF_PROG_TYPE_STRUCT_OPS, co pozwala na implementację procedur obsługi funkcji jądra poprzez BPF. Obecnie tę funkcję można już wykorzystać do implementacji algorytmów kontroli przeciążenia TCP w postaci programów BPF. Jako przykład zaproponowane Program BPF z implementacją algorytmu DCTCP.
    • Przyjęty do rdzenia zmiany, narzędzia do tłumaczenia ettool z ioctl() do użycia interfejs łącza sieciowego. Nowy interfejs ułatwia dodawanie rozszerzeń, poprawia obsługę błędów, umożliwia wysyłanie powiadomień w przypadku zmiany stanu, upraszcza interakcję pomiędzy jądrem a przestrzenią użytkownika oraz zmniejsza liczbę nazwanych list wymagających synchronizacji.
    • Dodano implementację algorytmu zarządzania kolejkami sieciowymi FQ-PIE (Flow Queue PIE), mającego na celu ograniczenie negatywnego wpływu pośredniego buforowania pakietów na brzegowy sprzęt sieciowy (bufferbloat). FQ-PIE wykazuje wysoką wydajność przy zastosowaniu w systemach z modemami kablowymi.
  • Podsystem dyskowy, wejścia/wyjścia i systemy plików
    • Dla systemu plików Btrfs dodany asynchroniczna realizacja operacji DISCARD (oznaczanie zwolnionych bloków, które nie muszą już być fizycznie przechowywane). Początkowo operacje DISCARD były wykonywane synchronicznie, co mogło prowadzić do pogorszenia wydajności ze względu na oczekiwanie dysków na wykonanie odpowiednich poleceń. Implementacja asynchroniczna pozwala nie czekać, aż dysk zakończy DISCARD i wykonać tę operację w tle.
    • W XFSie przeprowadzone Czyszczenie kodu, który korzystał ze starych 32-bitowych liczników czasu (typ time_t został zastąpiony przez time64_t), co doprowadziło do problemu 2038. Naprawiono błędy i uszkodzenia pamięci, które występowały na platformach 32-bitowych. Kod został przerobiony tak, aby działał z rozszerzonymi atrybutami.
    • Do systemu plików ext4 zrobiony Optymalizacje wydajności związane z obsługą blokowania i-węzłów podczas operacji odczytu i zapisu. Poprawiona wydajność przepisywania w trybie bezpośredniego wejścia/wyjścia. Aby uprościć diagnostykę problemów, pierwszy i ostatni kod błędu są przechowywane w superbloku.
    • W systemie plików F2FS wdrożone możliwość przechowywania danych w formie skompresowanej. W przypadku pojedynczego pliku lub katalogu kompresję można włączyć za pomocą polecenia „chattr +c plik” lub „chattr +c dir; dotknij katalogu/pliku”. Aby skompresować całą partycję, możesz użyć opcji „-o compress_extension=ext” w narzędziu montowania.
    • Jądro zawiera system plików StrefaFS, co upraszcza niskopoziomową pracę ze strefowymi urządzeniami pamięci masowej. Dyski strefowe oznaczają urządzenia na twardych dyskach magnetycznych lub dyskach SSD NVMe, których przestrzeń dyskowa jest podzielona na strefy tworzące grupy bloków lub sektorów, do których dozwolone jest jedynie sekwencyjne dodawanie danych, aktualizując całą grupę bloków. FS ZoneFS został opracowany przez firmę Western Digital i kojarzy każdą strefę dysku z oddzielnym plikiem, który może być używany do przechowywania danych w trybie surowym bez manipulacji na poziomie sektora i bloku, tj. Zezwala aplikacjom na korzystanie z interfejsu API plików zamiast bezpośredniego dostępu do urządzenia blokowego za pomocą protokołu ioctl.
    • W systemie NFS montowanie partycji przez UDP jest domyślnie wyłączone. Dodano obsługę możliwości bezpośredniego kopiowania plików pomiędzy serwerami, zdefiniowaną w specyfikacji NFS 4.2. Dodano nową opcję montowania „softreval”, która umożliwia wykorzystanie buforowanych wartości atrybutów w przypadku awarii serwera. Przykładowo po określeniu tej opcji, gdy serwer będzie niedostępny, nadal możliwe będzie poruszanie się ścieżkami w partycji NFS i dostęp do informacji zapisanych w pamięci podręcznej.
    • Przeprowadzone optymalizacja działania mechanizmu fs-verity służącego do monitorowania integralności i uwierzytelniania poszczególnych plików. Zwiększona prędkość odczytu sekwencyjnego dzięki zastosowaniu drzewa skrótów Merkle. Zoptymalizowano wydajność FS_IOC_ENABLE_VERITY w przypadku braku danych w pamięci podręcznej (zastosowano wywłaszczający odczyt stron z danymi).
  • Wirtualizacja i bezpieczeństwo
    • Możliwość wyłączenia modułu SELinux podczas działania jest przestarzała, a wyładowywanie już aktywowanego SELinux będzie w przyszłości zabronione. Aby wyłączyć SELinux, będziesz musiał przekazać parametr „selinux=0” w wierszu poleceń jądra.
    • Dodany obsługa przestrzeni nazw dla czasu (przestrzeni nazw czasowych), umożliwiająca powiązanie stanu zegara systemowego z kontenerem (CLOCK_REALTIME,
      CLOCK_MONOTONIC, CLOCK_BOOTTIME), wykorzystaj swój własny czas w kontenerze i przy migracji kontenera na inny host zadbaj o to, aby odczyty CLOCK_MONOTONIC i CLOCK_BOOTTIME pozostały niezmienione (uwzględnij czas po załadowaniu, z uwzględnieniem lub bez uwzględnienia bycia w trybie uśpienia ).

    • Pula blokująca /dev/random została usunięta. Zachowanie /dev/random jest podobne do /dev/urandom pod względem zapobiegania blokowaniu entropii po inicjalizacji puli.
    • Jądro rdzenia zawiera sterownik, który umożliwia systemom gościnnym z uruchomionym VirtualBox montowanie katalogów wyeksportowanych przez środowisko hosta (folder współdzielony VirtualBox).
    • Do podsystemu BPF dodano zestaw poprawek (Dyspozytor BPF), przy wykorzystaniu mechanizmu Retpoline do ochrony przed atakami klasy Spectre V2, pozwala zwiększyć efektywność wywoływania programów BPF w przypadku wystąpienia zdarzeń z nimi związanych (przykładowo umożliwia przyspieszenie wywoływania handlerów XDP w przypadku wystąpienia nadejdzie pakiet sieciowy).
    • Dodano sterownik obsługujący TEE (Trusted Execution Environment) wbudowany w układy APU AMD.
  • Usługi pamięci i systemu
    • BPF dodał obsługę funkcji globalnych. Rozwój prowadzony jest w ramach inicjatywy mającej na celu dodanie obsługi bibliotek funkcji, które można uwzględnić w programach BPF. Następnym krokiem będzie obsługa rozszerzeń dynamicznych, które pozwolą na załadowanie funkcji globalnych, w tym zastąpienie istniejących funkcji globalnych w trakcie ich używania. Podsystem BPF dodaje także obsługę wariantu operacji mapowania (służącego do przechowywania danych trwałych), który umożliwia wykonanie w trybie wsadowym.
    • обавлено Urządzenie „cpu_cooling” umożliwia schłodzenie przegrzanego procesora poprzez umieszczenie go w stanie bezczynności na krótki czas.
    • Dodano wywołanie systemowe otwórz w2(), który oferuje zestaw dodatkowych flag ograniczających rozdzielczość ścieżki pliku (zakaz przekraczania punktów montowania, dowiązań symbolicznych, dowiązań magicznych (/proc/PID/fd), komponentów „../”.
    • W przypadku systemów heterogenicznych opartych na architekturze big.LITTLE, łączących w jednym chipie mocne i mniej wydajne energetycznie rdzenie procesora, parametr uclamp_min jest ustawiany podczas wykonywania zadań w czasie rzeczywistym (pojawił się w jądrze 5.3 istnieje mechanizm zabezpieczania obciążenia). Ten parametr gwarantuje, że zadanie zostanie umieszczone przez program planujący na rdzeniu procesora o wystarczającej wydajności.
    • Jądro jest wolne od problemy roku 2038. Zastąpiono ostatnie pozostałe handlery, które dla epokowego licznika czasu wykorzystywały 32-bitowy (signed int) typ time_t, który biorąc pod uwagę raport z 1970 roku powinien zostać przepełniony w 2038 roku.
    • Ciągłe ulepszanie asynchronicznego interfejsu we/wy io_uringw którym zabezpieczone obsługa nowych operacji: IORING_OP_FALLOCATE (rezerwacja pustych obszarów), IORING_OP_OPENAT,
      IORING_OP_OPENAT2,
      IORING_OP_CLOSE (otwieranie i zamykanie plików),
      IORING_OP_FILES_UPDATE (dodawanie i usuwanie plików z listy szybkiego dostępu),
      IORING_OP_STATX (żądanie informacji o pliku),
      IORING_OP_READ,
      IORING_OP_WRITE (uproszczone analogi IORING_OP_READV i IORING_OP_WRITEV),
      IORING_OP_FADVISE,
      IORING_OP_MADVISE (asynchroniczne warianty wywołań posix_fadvise i madvise), IORING_OP_SEND,
      IORING_OP_RECV (wysyłanie i odbieranie danych sieciowych),
      IORING_OP_EPOLL_CTL (wykonuj operacje na deskryptorach plików epoll).

    • Dodano wywołanie systemowe pidfd_getfd(), umożliwiając procesowi pobranie deskryptora pliku dla otwartego pliku z innego procesu.
    • Wdrożone mechanizm „bootconfig”, który oprócz opcji wiersza poleceń umożliwia określenie parametrów jądra za pomocą pliku ustawień. Aby dodać takie pliki do obrazu initramfs, zaproponowano narzędzie bootconfig. Tej funkcji można użyć na przykład do skonfigurowania kprobes podczas uruchamiania systemu.
    • Przerobione mechanizm oczekiwania na zapis i odczyt danych w nienazwanych potokach. Zmiana umożliwiła przyspieszenie zadań takich jak montaż równoległy dużych projektów. Jednakże optymalizacja może doprowadzić do wyścigu w GNU z powodu błędu w wydaniu 4.2.1, który został naprawiony w wersji 4.3.
    • Do prctl() dodano flagę PR_SET_IO_FLUSHER, której można używać do oznaczania procesów wolnych od pamięci, które nie powinny podlegać limitom, gdy w systemie jest mało pamięci.
    • W oparciu o system dystrybucji pamięci ION stosowany w systemie Android zaimplementowano podsystem stosy dma-buf, co pozwala kontrolować przydział buforów DMA w celu współdzielenia obszarów pamięci pomiędzy sterownikami, aplikacjami i różnymi podsystemami.
  • Architektury sprzętowe
    • Dodano obsługę rozszerzenia E0PD, które pojawiło się w ARMv8.5 i pozwala na ochronę przed atakami związanymi ze spekulatywnym wykonywaniem instrukcji na procesorze. Ochrona oparta na E0PD zapewnia mniejsze obciążenie niż ochrona KPTI (izolacja tabeli stron jądra).
    • Dla systemów opartych na architekturze ARMv8.5 dodana została obsługa instrukcji RNG, zapewniająca dostęp do sprzętowego generatora liczb pseudolosowych. W jądrze instrukcja RNG służy do generowania entropii podczas inicjowania dostarczonego przez jądro generatora liczb pseudolosowych.
    • Usunięto obsługę MPX (rozszerzeń ochrony pamięci) dodanej w jądrze 3.19 i umożliwia organizację sprawdzania wskaźników w celu zapewnienia przestrzegania granic obszarów pamięci. Technologia ta nie była powszechnie stosowana w kompilatorach i została usunięta z GCC.
    • Dla architektury RISC-V zaimplementowano obsługę narzędzia debugującego KASan (Kernel Address Sanizer), które pomaga identyfikować błędy podczas pracy z pamięcią.
  • Sprzęt
    • Wdrożono obsługę specyfikacji USB 4.0, który opiera się na protokole Thunderbolt 3 i zapewnia przepustowość do 40 Gb/s, zachowując jednocześnie wsteczną kompatybilność z USB 2.0 i USB 3.2. Przez analogię z Piorun Interfejs USB 4.0 umożliwia tunelowanie różnych protokołów za pomocą jednego kabla ze złączem Typ C, w tym PCIe, Display Port i USB 3.x, a także programowe implementacje protokołów, na przykład do organizowania łączy sieciowych między hostami. Implementacja opiera się na sterowniku Thunderbolt zawartym już w jądrze Linuksa i dostosowuje go do pracy z hostami i urządzeniami kompatybilnymi z USB4. Zmiany dodają także obsługę urządzeń Thunderbolt 3 do oprogramowania Menedżera połączeń, który odpowiada za tworzenie tuneli umożliwiających podłączenie wielu urządzeń za pomocą jednego złącza.
    • W sterowniku amdgpu dodany wstępne wsparcie dla technologii ochrony przed kopiowaniem HDCP 2.x (High-bandwidth Digital Content Protection). Dodano obsługę układu AMD Pollock ASIC opartego na Raven 2. Wprowadzono możliwość resetowania procesora graficznego dla rodzin Renoir i Navi.
    • Sterownik DRM dla kart graficznych Intel dodany Obsługa DSI VDSC dla chipów opartych na mikroarchitekturze Ice Lake i Tiger Lake, zaimplementowano LMEM mmap (lokalna pamięć urządzenia), poprawiono parsowanie VBT (Video BIOS Table), dla chipów Coffee Lake zaimplementowano obsługę HDCP 2.2.
    • Kontynuowano prace nad ujednoliceniem kodu sterownika amdkfd (dla dyskretnych procesorów graficznych, takich jak Fidżi, Tonga, Polaris) ze sterownikiem amdgpu.
    • Sterownik k10temp został przerobiony, dodając obsługę wyświetlania parametrów napięcia i prądu dla procesorów AMD Zen, a także rozszerzone informacje z czujników temperatury stosowanych w procesorach Zen i Zen 2.
    • W secesyjnym kierowcy dodany obsługa zweryfikowanego trybu ładowania oprogramowania układowego dla procesorów graficznych NVIDIA opartych na mikroarchitekturze Turing (GeForce RTX 2000), co umożliwiło włączenie obsługi akceleracji 3D dla tych kart (wymagane pobranie oficjalnego oprogramowania sprzętowego z podpisem cyfrowym NVIDIA). Dodano obsługę silnika graficznego TU10x. Problemy z dźwiękiem HD zostały rozwiązane.
    • Dodano obsługę kompresji danych przesyłanych przez DisplayPort MST (Transport wielostrumieniowy).
    • Dodano nowy sterownik”11 tys» dla układów bezprzewodowych Qualcomm obsługujących standard 802.11ax.
      Sterownik oparty jest na stosie mac80211 i obsługuje tryby punktu dostępowego, stacji roboczej i węzła sieci mesh.

    • Poprzez sysfs zapewniony jest dostęp do czytelnych odczytów czujników temperatury stosowanych na nowoczesnych dyskach twardych i dyskach SSD.
    • Przyczynił się znaczące zmiany w systemie dźwiękowym ALSA, mające na celu pozbycie się kodu problemy roku 2038 (unikając użycia 32-bitowego typu time_t w interfejsach snd_pcm_mmap_status i snd_pcm_mmap_control). Dodano obsługę nowych kodeków audio
      Qualcomm WCD9340/WCD9341, Realtek RT700, RT711, RT715, RT1308, Ingenic JZ4770.

    • Dodany sterowniki do paneli LCD Logic PD 28, Jimax8729d MIPI-DSI, igenic JZ4770, Sony acx424AKP, Leadtek LTK500HD1829, Xinpeng XPP055C272, AUO B116XAK01, GiantPlus GPM940B0,
      BOE NV140FHM-N49,
      Satoz SAT050AT40H12R2,
      Sharp LS020B1DD01D.

    • Dodany obsługa płyt ARM i platform Gen1 Amazon Echo (oparty na OMAP3630), Samsung Galaxy S III mini (GT-I8190), Allwinner Emlid Neutis, Libre Computer ALL-H3-IT, PineH64 Model B, Aibretech Amlogic GX PC,
      Armada SolidRun Clearfog GTR, NXPGateworks GW59xx,
      Czytnik eBooków Tolino Shine 3,
      Embedded Artists COM (i.MX7ULP), SolidRun Clearfog CX/ITX i HoneyComb (LX2160A), Google Coral Edge TPU (i.MX8MQ),
      Rockchip Radxa Dalang Carrier, Radxa Rock Pi N10, VMARC RK3399Pro SOM
      ST Ericsson HREF520, Inforce 6640, SC7180 IDP, Atmel/Microchip AM9X60 (ARM926 SoC, Kizboxmini), ST stm32mp15, AM3703/AM3715/DM3725, ST Ericsson ab8505, Unisoc SC9863A, Qualcomm SC7180. Dodano obsługę kontrolera PCIe używanego w Raspberry Pi 4.

Jednocześnie Latynoamerykańska Fundacja Wolnego Oprogramowania uformowany
вариант całkowicie darmowe jądro 5.6 - Linux-libre 5.6-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 wyłącza ładowanie obiektów blob w sterownikach dla AMD TEE, ATH11K i Mediatek SCP. Zaktualizowano kod czyszczenia obiektów blob w sterownikach i podsystemach AMD PSP, amdgpu i nouveau.

Źródło: opennet.ru

Dodaj komentarz