Po dvou měsících vývoje Linus Torvalds jádrný release . Mezi nejvýznamnější změny patří podpora GPU AMD Navi, procesorů Zhaoxi a technologie správy spotřeby Intel Speed Select, možnost použití instrukcí umwait pro čekání bez využití cyklů,
zvyšující interaktivnost režim ‘utilization clamping’ pro asymetrické CPU, systémový hovor pidfd_open, možnost použití IPv4 adres ze subnetu 0.0.0.0/8, možnost hardwarového zrychlení nftables, podpora HDR v subsystému DRM, integrace hypervisoru ACRN.
V nového vydání Linus připomněl všem vývojářům hlavní pravidlo vývoje jádra — zachování neměnnosti chování pro komponenty uživatelského prostoru. Změny v jádře žádným způsobem nesmí narušovat již pracující aplikace a vést k regresím na uživatelské úrovni. Přitom porušení chování může vyvolat nejen změna ABI, odstranění zastaralého kódu nebo výskyt chyb, ale i nepřímý dopad správně fungujících užitečných vylepšení. Jako názorný příklad byla užitečná v kódu Ext4, která zkracuje počet přístupů k úložišti tím, že vypíná předběžné čtení tabulky inode při drobných vstupně-výstupních požadavcích.
Optimalizace vedla k tomu, že kvůli snížení diskové aktivity entropie pro generátor náhodných čísel getrandom() začala pomaleji nabíhat a v některých konfiguracích při určitém souhře okolností mohly nastat zaseknutí během bootování do naplnění poolu entropie. Protože je optimalizace skutečně užitečná, mezi vývojáři vznikla diskuze, v níž se navrhovalo vyřešit problém vypnutím blokujícího režimu volání getrandom() ve výchozím nastavení se přidáním volitelného příznaku pro čekání na entropii, ale taková změna ovlivní kvalitu náhodných čísel v počátečním stadiu bootování.
Do nové verze bylo přijato 15794 oprav od 1974 vývojářů,
velikost patchu je 92 MB (změny se týkaly 13986 souborů, přidáno 258419 řádků kódu,
odstraněno 599137 řádků). Přibližně 39% všech předložených změn v 5.3
se týká ovladačů zařízení, přibližně 12% změn má
vztah k aktualizaci kódu specifického pro hardwarové architektury, 11%
se týká síťového zásobníku, 3% – souborových systémů a 3% s interními
podsystemy jádra.
:
- Paměť a systémové služby
- Pokračuje vývoj funkčnosti 'pidfd', která pomáhá zpracovávat situace s opětovným použitím PID (pidfd je spojen konkrétním procesem a nemění se, zatímco PID může být přidělen jinému procesu po dokončení aktuálního procesu, který je s tímto PID spojen). Již dříve byl do jádra přidán
systémový hovor pidfd_send_signal() a příznak CLONE_PIDFD ve volání clone(), což umožňuje získat pidfd pro použití v idfd_send_signal(). Při použití volání clone() s příznakem CLONE_PIDFD mohly nastávat problémy se správcem systémů nebo systémem vynuceného ukončení procesů při nedostatku paměti na platformě Android. V takovém případě se používá volání fork() nebo clone() bez CLONE_PIDFD.V jádře 5.3 byl představen systémový hovor , který umožňuje získat ověřený pidfd pro libovolný existující proces, který nebyl vytvořen voláním clone() s příznakem CLONE_PIDFD. Byla také přidána podpora pro polling pidfd pomocí poll() a epoll(), což umožňuje správcům procesů sledovat ukončení libovolných procesů, aniž by se obávali stavu závodu při přiřazení PID novému procesu. Mechanismus oznámení o ukončení práce procesu spojeného s pidfd je podobný informování o ukončení vlastního dětského procesu;
- Do plánovače úloh byla přidána podpora mechanismu omezování zatížení (), který umožňuje dodržovat minimální nebo maximální rozsahy frekvencí v závislosti na aktivních úlohách na CPU. Představený mechanismus urychluje úlohy, které přímo ovlivňují kvalitu uživatelského interakce, tím, že tyto úlohy spouští alespoň na dolní hranici "požadované" frekvence. Úlohy s nízkou prioritou, které neovlivňují činnost uživatele, se spouštějí s využitím horního limitu "povolené" frekvence. Limity jsou stanoveny prostřednictvím atributů sched_uclamp_util_min a sched_uclamp_util_max ve systémovém hovoru sched_setattr().
- Byla přidána podpora technologie řízení spotřeby , dostupné na některých serverech s procesory Intel Xeon. Uvedená technologie umožňuje nastavovat parametry výkonu a propustnosti sekcí pro různá jádra CPU, což umožňuje upřednostnit výkon pro úkoly prováděné na určitých jádrech na úkor výkonu na jiných jádrech;
- Procesům v prostoru uživatele možnost čekání po krátkou dobu bez použití cyklů pomocí instrukce umwait. Tato instrukce, spolu s instrukcemi umonitor a tpause, bude nabídnuta v chystaných čipech Intel „Tremont“ a umožní implementaci zpoždění efektivních z hlediska spotřeby energie a neovlivňujících výkon dalších vláken při použití Hyper Threading;
- Pro architekturu RISC-V byla přidána podpora velkých stránek paměti (huge pages);
- Do mechanismu sledování „kprobes“ byla přidána možnost dereferencování ukazatelů jádra do prostoru uživatele, což může být použito například k hodnocení obsahu struktur předávaných v systémových voláních. Byla také přidána možnost nastavování kontrol při spuštění.
- Do konfiguračního souboru byla přidána možnost PREEMPT_RT pro práci v reálném čase. Samotný kód pro podporu reálného času zatím do jádra přidán nebyl, ale objev této možnosti je dobrým znamením, že mnohaletá epopej kolem patchů Realtime-Preempt se blíží k finále;
- Byl přidán systémový volání clone3() s implementací rozšiřitelnější varianty rozhraní clone(), umožňující specifikaci většího počtu příznaků;
- Byl přidán obslužný program bpf_send_signal(), který umožňuje BPF programům posílat signály libovolným procesům;
- Pro události perf v prostředí hypervizoru KVM byl přidán nový mechanismus filtrování událostí, který umožňuje administrátorovi určit, jaké typy událostí jsou povoleny nebo zakázány pro sledování na straně hostitelského systému;
- Do mechanismu ověřování eBPF aplikací byla přidána možnost zpracování programů s cykly, pokud je provádění cyklu omezené a nemůže vést k překročení limitu maximálního počtu instrukcí;
- Pokračuje vývoj funkčnosti 'pidfd', která pomáhá zpracovávat situace s opětovným použitím PID (pidfd je spojen konkrétním procesem a nemění se, zatímco PID může být přidělen jinému procesu po dokončení aktuálního procesu, který je s tímto PID spojen). Již dříve byl do jádra přidán
- Diskový subsystém, vstup/výstup a souborové systémy
- Pro souborový systém XFS byla implementována možnost vícethreadového procházení inode (například při kontrole kvót). Byly přidány nové ioctl BULKSTAT a INUMBERS, které poskytují přístup k funkcím, které se objevily v páté edici formátu FS, jako je čas vzniku inode a možnost nastavit parametry BULKSTAT a INUMBERS pro každou skupinu AG (Allocation Groups);
- V Ext4 prázdných míst v adresářích (nepřiřazené bloky).
příznaku „i“ (immutable) pro otevřené soubory (zákaz zápisu v situaci, kdy byl příznak nastaven v okamžiku, kdy byl soubor již otevřen); - V Btrfs bylo zajištěno definování rychlé implementace crc32c na všech architekturách;
- V CIFS byl z kódu pro podporu smbdirect odstraněn znak experimentálního vývoje. V SMB3 byla přidána možnost využití kryptografických algoritmů v režimu GCM. Byla přidána nová možnost mountingu pro extrakci parametrů režimu z položek ACE (Access Control Entry). Byla optimalizována výkonnost volání open();
- V F2FS byla přidána možnost omezení sběrače odpadu při práci v režimu checkpoint=disable. Bylo přidáno ioctl pro odstranění blokového rozmezí z F2FS, což umožňuje realizaci úpravy velikosti oddílu za chodu. Byla přidána možnost umístění souboru pro swap v F2FS s zajištěním přímého vstupu/výstupu. Pro všechny uživatele byla přidána podpora pro přidržování souboru a přidělování bloků pro podobné soubory;
- Do rozhraní pro asynchronní vstup/výstup io_uring byla přidána podpora asynchronních operací sendmsg() a recvmsg();
- Do souborového systému UBIFS byla přidána podpora komprese s využitím algoritmu zstd a možnost verifikace podepsaných obrazů FS;
- Ve FS Ceph byla přidána podpora bezpečnostních štítků SELinux pro soubory;
- Pro NFSv4 byla realizována nová možnost mountování „nconnect=“, určující počet připojení k serveru. Provoz mezi těmito připojeními bude rozdělen pomocí vyvažování zátěže. Kromě toho nyní server NFSv4 vytváří adresář /proc/fs/nfsd/clients s informacemi o aktuálních klientech, včetně údajů o otevřených souborech;
- Virtualizace a bezpečnost
- Do jádra byl zahrnut hypervizor pro vestavěná zařízení , který je navržen s ohledem na připravenost k plnění úloh v reálném čase a vhodnost pro použití v kritických systémech. ACRN zajišťuje minimální režijní náklady, zaručuje nízké latence a odpovídající reakce při interakci s hardwarem. Podporuje virtualizaci zdrojů CPU, vstupů/výstupů, síťového subsystému, operací s grafikou a zvukem. ACRN lze použít k spuštění několika izolovaných virtuálních strojů v elektronických řídicích blocích, na přístrojových panelech, v automobilových informačních systémech, v koncových IoT zařízeních a v dalším vestavěném vybavení;
- V režimu User-mode Linux se přidává režim 'cestování v čase', který umožňuje zpomalit nebo zrychlit čas ve virtuálním prostředí UML pro usnadnění ladění časově závislého kódu. Dále byl přidán parametr
time-travel-start, který umožňuje spustit systémové hodiny od určeného okamžiku v epochovém formátu; - Byly přidány nové volby příkazového řádku jádra 'init_on_alloc' a 'init_on_free', při jejichž specifikaci se zapíná nulování alokovaných a uvolněných oblastí paměti (naplnění nulami při malloc a free), což zvyšuje bezpečnost díky dodatečným nákladům na inicializaci;
- Byl přidán nový ovladač , který realizuje paravirtualizované zařízení, jež umožňuje zasílat IOMMU požadavky, jako jsou ATTACH, DETACH, MAP a UNMAP, na vrcholu transportu virtio bez emulace tabulek stránek paměti;
- Byl přidán nový ovladač , které představuje přístup k úložným zařízením, odrážejícím se v fyzickém adresním prostoru, jako je NVDIMM;
- Byla implementována možnost připojení kryptografických klíčů k uživatelskému nebo síťovému prostoru jmen (klíče se stávají nedostupnými mimo vybraný prostor jmen), a také ochrana klíčů pomocí ACL;
- V kryptosystému podpora velmi rychlého algoritmu nekryptografického hashování , jehož rychlost závisí na výkonu paměti;
- Síťová subsystém
- Byla zajištěna podpora adres IPv4 v rozmezí 0.0.0.0/8, který dříve nebyl k použití přístupný. Zavedením této podsítě distribuovat dalších 16 milionů adres IPv4;
- V Netfilter pro nftables podpora mechanismů hardwarového akcelerování filtrování paketů díky přidání do ovladačů Na stranu síťových adaptérů mohou být exportovány celé tabulky pravidel se všemi řetězci. Aktivace se provádí prostřednictvím vazby příznaku NFT_TABLE_F_HW na tabulku. Podporují se jednoduchá metadata protokolů 3. a 4. úrovně, akce přijmout/odmítnout, shodování podle IP a síťových portů odesílatele/přijímače a typu protokolu;
- vestavěná podpora sledování připojení pro síťové mosty, která nevyžaduje použití emulující vrstvy br_netfilter;
- V nf_tables podpora modulu SYNPROXY, který opakuje podobnou funkčnost z iptables, a také byla realizována možnost kontroly v pravidlech podle jednotlivých možností v hlavičce IPv4;
- Byla přidána možnost připojení programů BPF k systémovým voláním setsockopt() a getsockopt(), což například umožňuje připojit vlastní obslužné programy k těmto voláním. Kromě toho byla přidána nová výzva (hook), která umožňuje organizovat volání BPF programu jednou za každý interval RTT (round-trip-time, doba pingu);
- Pro IPv4 a IPv6 nový mechanismus ukládání dat směrování nexthop, zaměřený na zvýšení škálovatelnosti směrovacích tabulek. Provedené testy ukázaly, že při použití nového systému bylo 743 tisíc tras načteno do jádra za pouhé 4,3 sekundy;
- Pro Bluetooth funkcionalita nezbytná pro podporu LE ping;
- Hardware
- podpora x86-kompatibilních procesorů společnosti , vyvinutých v rámci společného projektu VIA Technologies a městské správy Šanghaje. Rodina CPU ZX je postavena na architektuře x86-64 Isaiah, která pokračuje ve vývoji technologií ;
- Do subsystému DRM (Direct Rendering Manager) a také do grafických ovladačů amdgpu a i915 byla přidána podpora analýzy, zpracování a odesílání prostřednictvím HDMI portu HDR (rozšířený dynamický rozsah) metadat, která umožňují použití HDR panelů a obrazovek schopných zobrazovat další rozsahy jasu;
- Do ovladače amdgpu byla přidána počáteční podpora GPU AMD NAVI (RX5700), která zahrnuje základní ovladač, kód pro interakci s obrazovkami (DCN2), podporu GFX a výpočty (GFX10),
SDMA 5 (System DMA0), prostředky správy napájení a multimediální enkodéry/dekodéry (VCN2). V amdgpu byla také zlepšena podpora karet založených na GPU Vega12 a Vega20, pro které byly přidány další možnosti správy paměti a spotřeby energie; - V ovladači amdkfd (pro diskrétní GPU, jako jsou Fiji, Tonga, Polaris) byla přidána podpora grafických karet založených na GPU VegaM;
- V DRM ovladači pro grafické karty Intel pro čipy Icelake nový vícesegmentový režim gamma korekce. Byla přidána možnost výstupu přes DisplayPort ve formátu YCbCr4:2:0. Nové firmware byly přidány pro SKL, BXT, KBL, GLK a ICL. Byla realizována možnost vypnutí napájení obrazovky v asynchronním režimu. podpora ukládání a obnovy kontextu vykreslování pro čipy Ironlake (gen5) a gen4 (Broadwater – Cantiga), což umožňuje z uživatelského prostoru obnovit stav GPU při přechodu z jedné sady úloh na jinou;
- V ovladači Nouveau byla zajištěna identifikace čipsetu NVIDIA Turing TU116;
- Byly rozšířeny možnosti DRM/KMS ovladače pro akcelerátory obrazových operací ARM Komeda (Mali D71), přidána podpora škálování, dělení/sloučení vrstev, rotace, zpožděného zápisu, AFBC, SMMU a formátů kódování barev Y0L2, P010, YUV420_8/10BIT;
- V ovladači MSM byla přidána podpora série A540 GPU Adreno, která se používá v procesorech Qualcomm, a také podpora DSI řadiče MSM8998 pro Snapdragon 835;
- Byly 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; - ovladač pro aktivaci prostředků akcelerace dekódování
videí dostupných v SoC Amlogic Meson; - V ovladači v3d (pro GPU Broadcom Video Core V, používaného v Raspberry Pi) se objevila správa výpočetních shaderů;
- ovladač pro SPI klávesnice a touchpady používané v moderních modelech notebooků Apple MacBook a MacBook Pro;
- další ochrana ioctl volání spojených s ovladačem floppy a sám ovladač je označen jako opuštěný
(„orphaned“), což naznačuje ukončení jeho testování. Ovladač zatím zůstává v jádře, ale jeho správná funkce není garantována. Ovladač je považován za zastaralý, protože je obtížné najít pracovní zařízení pro jeho testování — většina aktuálních externích úložišť obvykle používá rozhraní USB. - cpufreq ovladač pro desky Raspberry Pi, který umožňuje dynamicky řídit změny frekvence procesoru;
- Byla přidána podpora nových 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 Cortex-A73 + 2x Cortex-A53), jakož i desek:
- ,
- Aspeed BMC,
- Microsoft Olympus BMC,
- Kontron SMARC,
- Novtech Meerkat96 (i.MX7),
- ST Micro Avenger96,
- Google Cheza (Qualcomm SDM845),
- Qualcomm Dragonboard 845c (Qualcomm SDM845),
- Hugsun X99 TV Box (Rockchip RK3399),
- Khadas Edge/Edge-V/Captain (Rockchip RK3399),
- HiHope RZ/G2M,
- NXP LS1021A-TSN.
Zároveň Latinskoamerická Nadace svobodného softwaru
varianta — , vyčištěného od prvků firmwaru a ovladačů, které obsahují nesvobodné komponenty nebo části kódu, jejichž použití je omezeno výrobcem. V nové verzi je zakázáno načítání blobů v ovladačích qcom, hdcp drm, allegro-dvt a meson-vdec.
Byl aktualizován kód pro čištění blobů v ovladačích a subsystémech amdgpu, i915, netx, r8169, brcmfmac, rtl8188eu, adreno, si2157, pvrusb2, touchscreen_dmi, zvukovém ovladači pro skylake, stejně jako v dokumentaci k mikrokódu.
Zdroj: opennet.ru
