Vydání jádra Linux 5.3

Po dvou měsících vývoje Linus Torvalds představen vydání jádra Linux 5.3. Mezi nejpozoruhodnější změny patří podpora grafických procesorů AMD Navi, procesorů Zhaoxi a technologie správy napájení Intel Speed ​​​​Select, možnost používat instrukce umwait k čekání bez použití cyklů,
režim „utilization clamping“, který zvyšuje interaktivitu pro asymetrické CPU, systémové volání pidfd_open, možnost používat adresy IPv4 z podsítě 0.0.0.0/8, možnost hardwarové akcelerace nftables, podpora HDR v subsystému DRM, integrace ACRN hypervizor.

В oznámení Linus připomněl všem vývojářům hlavní pravidlo vývoje jádra – zachování stejného chování pro komponenty uživatelského prostoru. Změny v jádře by v žádném případě neměly narušit již běžící aplikace ani vést k regresím na uživatelské úrovni. V tomto případě může porušení chování způsobit nejen změnu v ABI, odstranění zastaralého kódu nebo výskyt chyb, ale také nepřímý dopad užitečných vylepšení, která fungují správně. Jako názorný příklad tam byl vyřazeno užitečné optimalizace v kódu Ext4, který snižuje počet přístupů k jednotce tím, že zakáže předběžné čtení tabulky inodů pro malé I/O požadavky.

Optimalizace vedla k tomu, že v důsledku poklesu aktivity disku se entropie pro generátor náhodných čísel getrandom() začala hromadit pomaleji a v některých konfiguracích bylo za určitých okolností možné pozorovat zamrzání během načítání, dokud nebyl fond entropie naplněné. Protože je optimalizace opravdu užitečná, mezi vývojáři se rozproudila diskuse, ve které bylo navrženo problém vyřešit vypnutím výchozího blokovacího režimu volání getrandom() a přidáním volitelného příznaku pro čekání na entropii, ale taková změna by ovlivnila kvalita náhodných čísel v počáteční fázi načítání.

Nová verze obsahuje 15794 1974 oprav od XNUMX XNUMX vývojářů,
velikost opravy - 92 MB (změny ovlivnily 13986 souborů, přidáno 258419 řádků kódu,
Odebráno 599137 řádků). Asi 39 % všech prezentovaných v 5.3
změny se týkají ovladačů zařízení, přibližně 12 % změn se týká
postoj k aktualizaci kódu specifického pro hardwarové architektury, 11 %
související se síťovým zásobníkem, 3 % na souborové systémy a 3 % na interní
subsystémy jádra.

hlavní inovace:

  • Paměťové a systémové služby
    • Pokračující vývoj funkce 'pidfd', která pomáhá zvládat situace opětovného použití PID (pidfd je spojeno se specifickým procesem a nemění se, zatímco PID může být spojeno s jiným procesem poté, co aktuální proces spojený s tímto PID skončí). Dříve byl přidán do jádra
      systémové volání pidfd_send_signal() a příznak CLONE_PIDFD ve volání clone() pro získání pidfd pro použití v idfd_send_signal(). Použití clone() s příznakem CLONE_PIDFD by mohlo způsobit problémy se správci služeb nebo se systémem nuceného ukončení z důvodu nedostatku paměti platformy Android. V tomto případě se ke spuštění použije volání fork() nebo clone() bez CLONE_PIDFD.

      Kernel 5.3 zavedl systémové volání pidfd_open(), což vám umožňuje získat kontrolovatelný pidfd pro libovolný existující proces, který nebyl vytvořen voláním clone() s příznakem CLONE_PIDFD. Také byla přidána podpora pro dotazování pidfd pomocí poll() a epoll(), které umožňují správcům procesů sledovat ukončení libovolných procesů bez obav z konfliktu, pokud je PID přiřazeno novému procesu. Mechanismus oznamování ukončení procesu spojeného s pidfd je podobný jako oznamování ukončení jeho podřízeného procesu;

    • Do plánovače úloh byla přidána podpora pro mechanismus připínání zatížení (Využití upínání), což vám umožní dodržovat minimální nebo maximální frekvenční rozsahy v závislosti na úlohách aktivních na CPU. Prezentovaný mechanismus zrychluje úkoly, které přímo ovlivňují kvalitu uživatelského zážitku, tím, že tyto úkoly spouští alespoň na spodní hranici „požadované“ frekvence. Úlohy s nízkou prioritou, které neovlivňují práci uživatele, jsou spouštěny s horní hranicí „povolené“ frekvence. Limity se nastavují pomocí atributů sched_uclamp_util_min a sched_uclamp_util_max v systémovém volání sched_setattr().
    • Přidána podpora technologie energetického managementu Intel Speed ​​​​Select, k dispozici na vybraných serverech s procesory Intel Xeon. Tato technologie umožňuje nastavit výkon a nastavení propustnosti oddílů pro různá jádra CPU, což umožňuje upřednostňovat výkon pro úkoly prováděné na určitých jádrech a obětovat výkon na jiných jádrech;
    • Procesy v uživatelském prostoru uděleno možnost krátkého čekání bez použití smyček pomocí instrukce umwait. Tato instrukce spolu s instrukcemi umonitor a tpause bude nabízena v nadcházejících čipech Intel „Tremont“ a umožní implementaci zpoždění, která jsou energeticky účinná a neovlivňují výkon ostatních vláken při použití Hyper Threading;
    • Pro architekturu RISC-V byla přidána podpora pro velké paměťové stránky;
    • Mechanismus sledování kprobes přidal možnost dereferencovat ukazatele jádra na uživatelský prostor, což lze použít například k vyhodnocení obsahu struktur předávaných systémovým voláním. Byla také přidána možnost instalovat kontroly ve fázi bootování.
    • Do konfiguračního souboru přidána možnost PREEMPT_RT pro provoz v reálném čase. Samotný kód pro podporu režimu v reálném čase ještě nebyl do jádra přidán, ale vzhled možnosti je dobrým znamením toho, že dlouhodobá epická integrace Záplaty Realtime-Preempt se blíží ke konci;
    • Přidáno systémové volání clone3() s implementací rozšiřitelnější verze rozhraní clone(), která umožňuje specifikovat větší počet příznaků;
    • Přidána obsluha bpf_send_signal(), která umožňuje programům BPF posílat signály libovolným procesům;
    • Pro události perf v prostředí hypervisoru KVM byl přidán nový mechanismus filtrování událostí, který umožňuje správci určit typy událostí, které jsou nebo nejsou povoleny pro monitorování na straně hostujícího systému;
    • Do mechanismu ověřování aplikace eBPF byla přidána možnost zpracovávat programy pomocí smyček, pokud je provádění smyčky omezené a nemůže vést k překročení limitu maximálního počtu instrukcí;
  • Diskový subsystém, I/O a souborové systémy
    • Souborový systém XFS nyní podporuje vícevláknové obcházení inodů (například při kontrole kvót). Byly přidány nové ioctls BULKSTAT a INUMBERS, které poskytují přístup k funkcím, které se objevily v pátém vydání formátu FS, jako je čas narození inodu a možnost nastavit parametry BULKSTAT a INUMBERS pro každou skupinu AG (Alokační skupiny);
    • V Ext4 podpora přidána prázdnoty v adresářích (nepropojené bloky).
      Zpracování zajištěno příznak „i“ (neměnný) pro otevřené soubory (zápis je zakázán v situaci, kdy byl příznak nastaven v době, kdy byl soubor již otevřen);

    • Btrfs poskytuje definici rychlé implementace crc32c na všech architekturách;
    • V CIFS byl kód pro podporu smbdirect odstraněn jako experimentální vývoj. SMB3 přidal možnost používat kryptografické algoritmy v režimu GCM. Přidána nová možnost připojení pro extrahování parametrů režimu z položek ACE (Access Control Entry). Optimalizovaný výkon volání open();
    • Do F2FS byla přidána možnost pro omezení sběrače odpadků při spuštění v režimu checkpoint=disable. Přidán ioctl pro odstranění rozsahů bloků z F2FS, což umožňuje úpravy velikosti oddílu za běhu. Přidána možnost umístit odkládací soubor do F2FS pro zajištění přímého I/O. Přidána podpora pro připnutí souboru a přidělování bloků pro podobné soubory pro všechny uživatele;
    • Přidána podpora pro asynchronní operace sendmsg() a recvmsg() do rozhraní pro asynchronní vstup/výstup io_uring;
    • Do souborového systému UBIFS byla přidána podpora komprese pomocí algoritmu zstd a možnost ověřit podepsané obrazy FS;
    • Ceph FS nyní podporuje bezpečnostní štítky SELinux pro soubory;
    • Pro NFSv4 byla implementována nová možnost připojení „nconnect=“, která určuje počet navázaných spojení se serverem. Provoz mezi těmito spoji bude distribuován pomocí load balancingu. Server NFSv4 nyní navíc vytváří adresář /proc/fs/nfsd/clients s informacemi o aktuálních klientech, včetně informací o souborech, které otevřeli;
  • Virtualizace a bezpečnost
    • Jádro obsahuje hypervizor pro vestavěná zařízení ACRN, který je napsán s ohledem na připravenost pro úkoly v reálném čase a vhodnost pro použití v kritických systémech. ACRN poskytuje minimální režii, zaručuje nízkou latenci a adekvátní odezvu při interakci se zařízením. Podporuje virtualizaci zdrojů CPU, I/O, síťového subsystému, grafických a zvukových operací. ACRN lze použít ke spuštění více izolovaných virtuálních strojů v elektronických řídicích jednotkách, řídicích panelech, automobilových informačních systémech, spotřebitelských zařízeních IoT a dalších vestavěných technologiích;
    • V uživatelském režimu Linux přidal Režim cestování v čase, který umožňuje zpomalit nebo zrychlit čas ve virtuálním prostředí UML a usnadnit tak ladění kódu souvisejícího s časem. Navíc byl přidán parametr
      time-travel-start, který umožňuje spuštění systémových hodin od určitého okamžiku ve formátu epochy;

    • Byly přidány nové možnosti příkazového řádku jádra „init_on_alloc“ a „init_on_free“, když je specifikováno, je povoleno nulování alokovaných a uvolněných oblastí paměti (vyplnění nulami pro malloc a free), což umožňuje zvýšenou bezpečnost díky dodatečné režii inicializace;
    • Přidán nový ovladač virtio-iommu s implementací paravirtualizovaného zařízení, které umožňuje odesílat požadavky IOMMU, jako jsou ATTACH, DETACH, MAP a UNMAP, přes virtio transport bez emulace tabulek stránek paměti;
    • Přidán nový ovladač virtio-pmem, představující přístup k úložným zařízením mapovaným do fyzického adresního prostoru, jako jsou NVDIMM;
    • Implementována možnost připojit kryptografické klíče k uživatelskému nebo síťovému jmennému prostoru (klíče se stanou nedostupnými mimo vybraný jmenný prostor), stejně jako chránit klíče pomocí ACL;
    • Do krypto subsystému přidal podpora velmi rychlého nekryptografického hashovacího algoritmu xxhash, jehož rychlost závisí na výkonu paměti;
  • Síťový subsystém
    • Povoleno zpracování adres IPv4 v rozsahu 0.0.0.0/8, které dříve nebylo k dispozici. Představení této podsítě umožní distribuovat dalších 16 milionů IPv4 adres;
    • V Netfilter pro nftables přidal podpora mechanismů hardwarové akcelerace pro filtrování paketů pomocí přidaných ovladačů Flow Block API. Na straně síťových adaptérů lze umístit celé tabulky pravidel se všemi řetězci. Povolení se provádí navázáním příznaku NFT_TABLE_F_HW na tabulku. Podporuje jednoduchá metadata protokolu Layer 3 a Layer 4, akce přijetí/odmítnutí, mapování podle IP a síťových portů odesílatele/příjemce a typu protokolu;
    • Přidal vestavěná podpora sledování připojení pro síťové mosty, která nevyžaduje použití emulační vrstvy br_netfilter;
    • V nf_tables přidal implementována je také podpora modulu SYNPROXY, který replikuje podobnou funkcionalitu z iptables, a možnost zaškrtnutí pravidel pro jednotlivé možnosti v hlavičce IPv4;
    • Přidána možnost připojit programy BPF k systémovým voláním setsockopt() a getsockopt(), což vám například umožňuje připojit k těmto voláním vaše vlastní obslužné rutiny přístupu. Navíc byl přidán nový call point (hák), pomocí kterého můžete organizovat volání do programu BPF jednou pro každý RTT interval (doba zpáteční cesty, doba pingu);
    • Pro IPv4 a IPv6 přidal nový mechanismus ukládání směrovacích dat nexthop zaměřený na zvýšení škálovatelnosti směrovacích tabulek. Testy ukázaly, že při použití nového systému byla do jádra načtena sada 743 tisíc cest za pouhé 4.3 sekundy;
    • Pro Bluetooth implementováno funkce požadovaná pro podporu LE ping;
  • Оборудование
    • Přidal podpora firemních procesorů kompatibilních s x86 Zhaoxin, vyvinutý jako výsledek společného projektu mezi VIA Technologies a magistrátem Šanghaje. Rodina CPU ZX je postavena na architektuře x86-64 Isaiah a pokračuje ve vývoji technologie VIA Kentaur;
    • Subsystém DRM (Direct Rendering Manager), stejně jako grafické ovladače amdgpu a i915, přidal podporu pro analýzu, zpracování a odesílání metadat HDR (vysoký dynamický rozsah) přes port HDMI, což umožňuje použití panelů a obrazovek HDR schopných zobrazení dalších rozsahů jasu;
    • Ovladač amdgpu přidal počáteční podporu pro AMD NAVI GPU (RX5700), která zahrnuje základní ovladač, kód interakce s obrazovkou (DCN2), GFX a výpočetní podporu (GFX10),
      SDMA 5 (System DMA0), správa napájení a multimediální kodéry/dekodéry (VCN2). amdgpu také vylepšuje podporu pro karty založené na GPU Vega12 a Vega20, pro které byly přidány další možnosti správy paměti a napájení;

    • Do ovladače amdkfd přidána podpora karet založených na GPU VegaM (pro diskrétní GPU, jako jsou Fiji, Tonga, Polaris);
    • V ovladači DRM pro grafické karty Intel pro čipy Icelake implementováno nový vícesegmentový režim gama korekce. Přidána možnost výstupu přes DisplayPort ve formátu YCbCr4:2:0. Přidán nový firmware GuC pro SKL, BXT, KBL, GLK a ICL. Byla implementována možnost vypnout napájení obrazovky v asynchronním režimu. Přidal podpora ukládání a obnovy kontextu vykreslování pro čipy Ironlake (gen5) a gen4 (Broadwater - Cantiga), která umožňuje obnovit stav GPU z uživatelského prostoru při přechodu z jedné dávkové operace do druhé;
    • Ovladač Nouveau zajišťuje detekci čipové sady NVIDIA Turing TU116;
    • Byly rozšířeny možnosti ovladače DRM/KMS pro akcelerátory obrazovky ARM Komeda (Mali D71), podpora škálování, rozdělení/sloučení vrstev, rotace, odložený zápis, AFBC, SMMU a formáty barevného kódování Y0L2, P010, YUV420_8/10BIT bylo přidáno;
    • Ovladač MSM přidává podporu pro řadu A540 GPU Adreno používanou v procesorech Qualcomm a také podporu pro řadič MSM8998 DSI pro Snapdragon 835;
    • Přidány ovladače pro LCD panely Samsung S6E63M0, Armadeus ST0700, EDT ETM0430G0DH6, OSD101T2045-53TS,
      Evervision VGG804821, FriendlyELEC HD702E, KOE tx14d24vm1bpa, TFC S9700RTWV43TR-01B, EDT ET035012DM6 a VXT VL050-8048NT-C01;

    • Přidat ovladač pro aktivaci nástrojů pro urychlení dekódování
      videa dostupná v Amlogic Meson SoC;

    • V ovladači v3d (pro Broadcom Video Core V GPU používaný v Raspberry Pi) se objevil podpora odesílání výpočetních shaderů;
    • Přidat ovladač pro klávesnice a trackpady SPI používané v moderních modelech notebooků Apple MacBook a MacBookPro;
    • Přidal dodatečná ochrana pro volání ioctl spojená s disketovým ovladačem a samotný ovladač je označen jako neudržovaný
      („osiřelý“), což znamená ukončení jeho testování. Ovladač je stále uložen v jádře, ale jeho správné fungování není zaručeno. Ovladač je považován za zastaralý, protože je obtížné najít pracovní zařízení pro jeho testování - všechny současné externí disky zpravidla používají rozhraní USB.

    • Přidat ovladač cpufreq pro desky Raspberry Pi, který umožňuje dynamicky řídit změny frekvence procesoru;
    • Přidána podpora pro nové ARM SoC Mediatek mt8183 (4x Cortex-A73 + 4x Cortex-A53), TI J721E (2x Cortex-A72 + 3x Cortex-R5F + 3 DSP + MMA) a Amlogic G12B (4x Cortex73x Cortex-A2 + A53 ), stejně jako desky:
      • Purismus Librem5,
      • Aspeed BMC,
      • Microsoft Olympus BMC,
      • Kontron SMARC,
      • Novtech Meerkat96 (i.MX7),
      • ST Micro Avenger96,
      • Google Cheza (Qualcomm SDM845),
      • Qualcomm Dragonboard 845c (Qualcomm SDM845),
      • TV box Hugsun X99 (Rockchip RK3399),
      • Khadas Edge/Edge-V/Captain (Rockchip RK3399),
      • HiHope RZ/G2M,
      • NXP LS1021A-TSN.

Ve stejné době Latinská Amerika Free Software Foundation vytvořený
вариант zcela bezplatné jádro 5.3 - Linux-libre 5.3-gnu, zbavený prvků firmwaru a ovladače obsahujících nesvobodné komponenty nebo části kódu, jejichž rozsah je omezen výrobcem. V nové verzi je načítání objektů blob zakázáno v ovladačích qcom, hdcp drm, allegro-dvt a meson-vdec.
Aktualizovaný kód čištění objektů blob v ovladačích a podsystémech amdgpu, i915, netx, r8169, brcmfmac, rtl8188eu, adreno, si2157, pvrusb2, touchscreen_dmi, ovladač zvuku pro skylake a také v dokumentaci mikrokódu.

Zdroj: opennet.ru

Přidat komentář