Po dvou měsících vývoje Linus Torvalds jádrný release . Mezi nejvýznamnější změny patří: nové rozhraní pro асynchronní vstup/výstup io_uring, možnost využívání NVDIMM jako RAM, podpora ve Nouveau sdílené virtuální paměti, podpora škálovatelného monitorování velmi velkých souborových systémů prostřednictvím fanotify, možnost nastavení úrovní komprese Zstd v Btrfs, nový ovladač cpuidle TEO, implementace systémových volání pro řešení problému roku 2038, možnost spouštění z zařízení device-mapper bez initramfs, LSM modul SafeSetID, podpora kombinovaných live patchů.
:
- Diskový subsystém, vstup/výstup a souborové systémy
- Bylo zavedeno nové rozhraní pro асynchronní vstup/výstup — , které se vyznačuje podporou pollingového vstupu/výstupu a možností fungovat jak s vyrovnáváním, tak bez vyrovnávání. Připomeňme, že dříve navržený mechanismus асynchronního vstupu/výstupu „aio“ nepodporoval vyrovnaný vstup/výstup, mohl fungovat pouze v režimu O_DIRECT (bez vyrovnávání a obcházení cache), měl problémy s blokováním kvůli čekání na dostupnost metadat a vykazoval vysoké režijní náklady spojené s kopírováním dat v paměti.
V rámci API
io_uring se vývojáři snažili odstranit nedostatky starého rozhraní aio. Podle io_uring je velmi blízké a výrazně překonává libaio při práci s aktivovaným pollingem. Pro použití io_uring v konečných aplikacích provozovaných v uživatelském prostoru byla připravena knihovna , která poskytuje vysoceúrovňové spojení na rozhraní jádra; - Mechanismus sledování událostí v souborovém systému fanotify() podporuje sledování situací změny super bloku a struktury (události vytváření, odstranění a přesunutí adresářů). Prezentované možnosti pomáhají vyřešit problémy se škálovatelností, které vznikaly při vytváření rekurzivního sledování změn ve velmi velkých souborových systémech pomocí mechanismu inotify (změny dirent bylo dříve možné sledovat pouze prostřednictvím inotify, ale
efektivita v podmínkách rekurzivního sledování velkých vnořených adresářů zanechávala mnoho přání). Nyní lze podobné sledování efektivně provádět prostřednictvím fanotify; - Ve souborovém systému Btrfs možnost nastavení úrovně komprese pro algoritmus zstd, který lze považovat za optimální kompromis mezi rychlým, ale neefektivním lz4 a pomalým, ale dobře kompresním xz. Podobně jako dříve bylo možné nastavit úroveň komprese při použití zlib pro zstd, byla přidána podpora montážní volby „-o compress=zstd:level“. Při testování zajistila minimální první úroveň kompresi dat 2,658x při rychlosti komprese 438,47 MB/s, rychlosti rozbalení 910,51 MB/s a spotřebě paměti 780 MB, zatímco maximální úroveň 15 dosáhla 3,126x, ale při rychlosti komprese 37,30 MB/s, rozbalení 878,84 MB/s a spotřebě paměti 2547 MB;
- možnost bootování z filesystému umístěného na zařízení device-mapper bez použití initramfs. Od aktuální verze jádra lze zařízení device-mapper přímo použít v procesu bootování, například jako oddíl s kořenovým FS. Nastavení oddílu se provádí pomocí bootovacího parametru „dm-mod.create“. Mezi povolené moduly pro bootování device-mapper patří: „crypt“, „delay“, „linear“, „snapshot-origin“ a „verity“;
- Do flash-disku orientovaného souborového systému F2FS byl přidán vlajkový F2FS_NOCOW_FL, který umožňuje vypnout režim copy-on-write pro daný soubor;
- Ze smyčky byla odstraněna souborová struktura , což je varianta ext2, přizpůsobená pro práci se storage zařízeními OSD (Object-based Storage Device). Také byla odstraněna podpora protokolu SCSI pro taková storage zařízení;
- Bylo zavedeno nové rozhraní pro асynchronní vstup/výstup — , které se vyznačuje podporou pollingového vstupu/výstupu a možností fungovat jak s vyrovnáváním, tak bez vyrovnávání. Připomeňme, že dříve navržený mechanismus асynchronního vstupu/výstupu „aio“ nepodporoval vyrovnaný vstup/výstup, mohl fungovat pouze v režimu O_DIRECT (bez vyrovnávání a obcházení cache), měl problémy s blokováním kvůli čekání na dostupnost metadat a vykazoval vysoké režijní náklady spojené s kopírováním dat v paměti.
- Virtualizace a bezpečnost
- Do prctl() byla přidána volba PR_SPEC_DISABLE_NOEXEC pro správu spekulativního provádění příkazů pro vybraný proces. Nová volba umožňuje selektivně zakázat spekulativní vykonávání pro procesy, které mohou být potenciálně napadnuty metodou typu Spectre. Zablokování platí do prvního volání exec();
- Byl implementován LSM modul , který umožňuje systémovým službám bezpečně spravovat uživatele bez zvyšování oprávnění (CAP_SETUID) a bez získání oprávnění uživatele root. Přiřazení privilegií se provádí definováním pravidel v securityfs na základě whitelistu povolených vazeb (ve formátu „UID1:UID2“);
- Byly přidány nízkoúrovňové změny potřebné pro zásobníkovou organizaci načítání bezpečnostních modulů (LSM). Byla představena možnost načítání jádra „lsm“, která umožňuje řídit, které moduly se načítají a v jakém pořadí;
- Do subsystému auditu byla přidána podpora prostorů názvů souborů;
- možnosti GCC pluginu structleak, který umožňuje blokovat potenciální úniky obsahu paměti. Byla zajištěna inicializace jakýchkoli proměnných, které se používají v kódu prostřednictvím odkazů na zásobník;
- Síťová subsystém
- Pro sokety nová volba „SO_BINDTOIFINDEX“, podobná
„SO_BINDTODEVICE“, ale přijímající jako argument indexové číslo síťového rozhraní místo názvu rozhraní; - Do zásobníku mac80211 byla přidána možnost přiřadit jednomu zařízení více BSSID (MAC adres). V rámci projektu na optimalizaci výkonu WiFi byla do zásobníku mac80211 přidána možnost zohlednění rozdělení časového prostoru a možnost rozdělovat časový prostor mezi více stanicemi (při provozu v režimu přístupového bodu je vyhrazeno méně času pro přenos pomalým bezdrátovým stanicím místo rovnoměrného rozdělování času mezi všemi stanicemi);
- Byl přidán mechanismus „„, který poskytuje oznámení při vzniklých problémech se síťovým rozhraním;
- Pro sokety nová volba „SO_BINDTOIFINDEX“, podobná
- Paměť a systémové služby
- bezpečné dodávání signálů, zohledňující možnost opětovného použití PID. Například při provádění volání kill mohla dříve nastat situace, kdy ihned po odeslání signálu mohl být cílový PID uvolněn kvůli ukončení procesu a obsazen jiným procesem, a tím pádem byl signál odeslán jinému procesu. Aby se těmto situacím zabránilo, byla přidána nová systémová volba pidfd_send_signal, která používá souborové popisovače z /proc/pid pro zajištění stabilního přiřazení k procesu. I když bude PID znovu použit během zpracování systémového volání, souborový popisovač se nezmění a lze ho bezpečně použít k odeslání signálu procesu;
- možnost využití zařízení stálé paměti (persistent-memory, například ) jako RAM. Dosud byla podobná zařízení v jádře podporována jako úložná zařízení, ale nyní je lze také použít jako dodatečnou operační paměť. Tato možnost byla realizována na základě přání uživatelů, kteří jsou ochotni smířit se s poklesem výkonu a přejít na standardní API pro správu paměti v jádru Linux místo použití stávajících systémů distribuce paměti v uživatelském prostoru, které fungují nad mmap pro dax-soubor;
- Byl přidán nový ovladač pro úsporu energie CPU (cpuidle, určuje, kdy lze převést CPU do hlubokých režimů úspory energie, čím hlubší režim — tím větší úspora, ale i více času je potřeba na návrat z režimu) — TEO (Ovladač orientovaný na časové události). Dosud byly nabízeny dvě ovladače cpuidle — „menu“ a „ladder“, které se lišily heuristikou. Ovladač „menu“ má známé problémy s přijetím heuristických rozhodnutí, a proto bylo rozhodnuto připravit nový ovladač. TEO je prezentován jako alternativa k ovladači „menu“, která umožňuje dosáhnout vyššího výkonu při zachování stejné úrovně spotřeby energie.
Nový ovladač lze aktivovat pomocí zaváděcího parametru „cpuidle.governor=teo“; - V rámci práce na odstranění , způsobené překročením 32bitového typu time_t, byly do systému zařazeny systémové volání, která nabízejí pro 32bitové architektury 64bitové časové čítače. V důsledku toho lze nyní 64bitovou strukturu time_t používat na všech architekturách. Podobné změny byly také realizovány v síťovém subsystému pro možnosti síťových soketů;
- Do systému bylo přidáno horké patchování jádra (live patching). možnost „Atomic Replace“ pro atomární aplikaci série změn na jednu funkci. Uvedená možnost umožňuje distribuovat souhrnné záplaty, které pokrývají několik změn najednou, místo dostatečně složitého procesu postupného nanášení live-záplat v přísně stanoveném pořadí. Pokud dříve každá další změna musela vycházet ze stavu funkce po poslední změně, nyní je možné rozšířit několik změn, které jsou vázány na jedno výchozí stavu (tj. osoby, které udržují, mohou podporovat jednu souhrnnou záplatu vůči základnímu jádru místo řetězce závislých záplat);
- za zastaralou podporu formátu spustitelných souborů a.out a
kód pro vytváření core souborů ve formátu a.out, který je v opuštěném stavu. Formát a.out se již dlouho nepoužívá na systémech s Linuxem a generování souborů a.out již dlouho není podporováno moderními nástroji v konfiguračních nastaveních pro Linux ve výchozím nastavení. Kromě toho může být načítač pro soubory a.out realizován úplně v uživatelském prostoru; - Do mechanismu ověřování programů BPF byla přidána možnost určování a odstraňování nepoužívaného kódu. Do jádra byly také zahrnuty záplaty s podporou spinlock pro subsystém BPF, které poskytují další možnosti řízení paralelního provádění programů BPF;
- Hardware
- V ovladači Nouveau podpora heterogenního řízení paměti, která umožňuje CPU a GPU přístup k synchronizovaným sdíleným oblastem paměti. Systém sdílené virtuální paměti (SVM, shared virtual memory) je realizován na základě subsystému HMM (Heterogeneous memory management), který umožňuje použití zařízení s vlastními bloky řízení paměti (MMU, memory management unit), které mohou získat přístup k hlavní paměti. Také pomocí HMM lze uspořádat společný adresový prostor mezi GPU a CPU, ve kterém má GPU přístup k hlavní paměti procesu. Podpora SVM je zatím povolena pouze pro GPU rodiny Pascal, ačkoli podpora je zajištěna i pro GPU Volta a Turing. Kromě toho, v Nouveau nový ioctl pro řízení migrace oblastí paměti procesů do paměti GPU;
- V DRM ovladači Intel pro GPU Skylake a novější (gen9+) Ve výchozím nastavení je režim fastboot, který vylučuje zbytečné změny režimů během spuštění. identifikátory zařízení založené na mikroarchitekturách Coffelake a Ice Lake. Pro čipy Coffelake podpora GVT (). Pro virtuální GPU podpora VFIO EDID. Pro LCD panely MIPI/DSI podpora prvků ACPI/PMIC. nové televizní režimy 1080p30/50/60 TV;
- Do ovladače amdgpu byla přidána podpora GPU Vega10/20 BACO. Byly implementovány prostředky správy napájení pro Vega 10/20 a tabulky správy ventilátoru pro Vega 10. Přidány nové PCI identifikátory zařízení pro GPU Picasso. rozhraní správy plánovaných závislostí pro vyloučení vzájemného blokování;
- DRM/KMS ovladač pro urychlovače obrazových operací (Mali D71);
- Byla přidána podpora obrazovkových panelů Toppoly TPG110, Sitronix ST7701, PDA 91-00156-A0, LeMaker BL035-RGB-002 3.5 a Kingdisplay kd097d04;
- Byla přidána podpora zvukových kodeků Rockchip RK3328, Cirrus Logic CS4341 a CS35L36, MediaTek MT6358, Qualcomm WCD9335 a Ingenic JZ4725B, stejně jako zvuková platforma Mediatek MT8183;
- Byla přidána podpora NAND řadičů Flash STMicroelectronics FMC2, Amlogic Meson;
- Byla přidána podpora akcelerátorů pro systémy strojového učení Habana AI;
- Byla přidána podpora gigabitových Ethernet řadičů NXP ENETC a bezdrátových rozhraní MediaTek MT7603E (PCIe) a MT76x8.
Zároveň Latinskoamerická Nadace svobodného softwaru
varianta — , zbaveného prvků firmwaru a ovladačů obsahujících nesvobodné komponenty nebo úseky kódu, jejichž použití je omezeno výrobcem. V nové verzi byla zakázána načítání blobů v ovladačích mt7603 a goya. Bylo aktualizováno čištění blobů v ovladačích a subsystémech wilc1000, iwlwifi, soc-acpi-intel, brcmfmac, mwifiex, btmrvl, btmtk a touchscreen_dmi. Bylo ukončeno čištění blobů v bootloaderu firmwaru lantiq xrx200 kvůli jeho odstranění z jádra.
Zdroj: opennet.ru
