Po dvou měsících vývoje Linus Torvalds vydání jádra . Mezi nejpozoruhodnější změny patří nové rozhraní pro asynchronní I/O io_uring, možnost používat NVDIMM jako RAM, podpora sdílené virtuální paměti v Nouveau, podpora škálovatelného monitorování velmi rozsáhlých souborových systémů pomocí fanotify, možnost konfigurovat kompresi Zstd úrovně v Btrfs, nový cpuidle TEO handler, implementace systémových volání k vyřešení problému 2038, možnost bootovat ze zařízení mapujících zařízení bez initramfs, modul SafeSetID LSM, podpora kombinovaných živých záplat.
:
- Diskový subsystém, I/O a souborové systémy
- Implementováno nové rozhraní pro asynchronní I/O - , který je pozoruhodný svou podporou I/O dotazování a schopností pracovat s nebo bez vyrovnávací paměti. Připomeňme, že dříve navrhovaný asynchronní I/O mechanismus „aio“ nepodporoval bufferované I/O, mohl fungovat pouze v režimu O_DIRECT (bez ukládání do vyrovnávací paměti a obcházení mezipaměti), měl problémy se zamykáním kvůli čekání na dostupnost metadat a vykazovala velké režijní náklady v důsledku kopírování dat v paměti.
V rámci API
Vývojáři io_uring se snažili odstranit nedostatky starého rozhraní aio. Podle io_uring je velmi blízko a je výrazně před libaio při práci s povoleným dotazováním. Byla připravena knihovna pro použití io_uring v koncových aplikacích běžících v uživatelském prostoru , který poskytuje rámec na vysoké úrovni nad rozhraním jádra; - V mechanismu sledování událostí ve FS fanotify() podpora pro sledování situací superbloku a změny struktury (události vytváření, mazání a přesouvání adresářů). Prezentované funkce pomáhají řešit problémy se škálovatelností, které vznikají při vytváření rekurzivního sledování změn ve velmi velkých souborových systémech pomocí mechanismu inotify (dříve bylo možné přímé změny sledovat pouze prostřednictvím inotify, ale
výkon v podmínkách rekurzivního sledování velkých vnořených adresářů ponechal mnoho přání). Nyní lze takové monitorování efektivně provádět prostřednictvím fanotify; - Na souborovém systému Btrfs schopnost přizpůsobit úroveň komprese pro algoritmus zstd, což lze považovat za optimální kompromis mezi rychlou, ale neúčinnou lz4 a pomalou, ale dobrou kompresí xz. Analogicky k tomu, jak bylo dříve možné nastavit úroveň komprese při použití zlib, byla pro zstd přidána podpora pro připojení „-o compress=zstd:level“. Během testování poskytovala minimální první úroveň kompresi dat 2.658 krát s rychlostí komprese 438.47 MB/s, rychlostí dekomprese 910.51 MB/s a spotřebou paměti 780 MB a maximální úroveň 15 poskytla 3.126 krát, ale s kompresí rychlost 37.30 MB/s, rozbalení 878.84 MB/s a spotřeba paměti 2547 MB;
- schopnost zavést systém ze souborového systému umístěného na zařízení mapující zařízení, bez použití initramfs. Počínaje aktuální verzí jádra lze zařízení mapující zařízení přímo použít během procesu zavádění, například jako oddíl s kořenovým souborovým systémem. Oddíl se konfiguruje pomocí spouštěcího parametru „dm-mod.create“. Mezi moduly mapovače zařízení, které lze načíst, patří: „crypt“, „delay“, „linear“, „snapshot-origin“ a „verity“;
- Do souborového systému F2FS orientovaného na flash disky byl přidán příznak F2FS_NOCOW_FL, který umožňuje zakázat režim kopírování při zápisu pro daný soubor;
- Souborový systém odstraněn z jádra , což je varianta ext2, přizpůsobená pro práci s objektovými úložišti OSD (Object-based Storage Device). Podpora protokolu SCSI pro taková zařízení pro ukládání objektů byla také odstraněna;
- Implementováno nové rozhraní pro asynchronní I/O - , který je pozoruhodný svou podporou I/O dotazování a schopností pracovat s nebo bez vyrovnávací paměti. Připomeňme, že dříve navrhovaný asynchronní I/O mechanismus „aio“ nepodporoval bufferované I/O, mohl fungovat pouze v režimu O_DIRECT (bez ukládání do vyrovnávací paměti a obcházení mezipaměti), měl problémy se zamykáním kvůli čekání na dostupnost metadat a vykazovala velké režijní náklady v důsledku kopírování dat v paměti.
- Virtualizace a bezpečnost
- Do prctl() byla přidána možnost PR_SPEC_DISABLE_NOEXEC pro řízení spekulativního provádění instrukcí pro vybraný proces. Nová možnost umožňuje selektivně zakázat spekulativní provádění u procesů, které by mohly být potenciálně napadeny útokem Spectre. Zámek trvá do prvního volání exec();
- Implementován modul LSM , který umožňuje systémovým službám bezpečně spravovat uživatele bez eskalace oprávnění (CAP_SETUID) a bez získání oprávnění root. Privilegia se přidělují definicí pravidel v securityfs na základě bílého seznamu platných vazeb (ve tvaru „UID1:UID2“);
- Přidány nízkoúrovňové změny požadované pro načítání bezpečnostních modulů (LSM) na základě zásobníku. Zavedena možnost zavádění jádra "lsm" pro kontrolu, které moduly se načítají a v jakém pořadí;
- Do subsystému auditu byla přidána podpora pro jmenné prostory souborů;
- schopnosti pluginu GCC structleak, který umožňuje blokovat potenciální úniky obsahu paměti Je zajištěna inicializace jakýchkoli proměnných, které jsou použity v kódu prostřednictvím referenčního přístupu na zásobník;
- Síťový subsystém
- Pro zásuvky nová možnost "SO_BINDTOIFINDEX" podobná
"SO_BINDTODEVICE", ale jako argument se použije indexové číslo síťového rozhraní namísto názvu rozhraní; - Zásobník mac80211 přidal možnost přiřadit více BSSID (MAC adres) jednomu zařízení. V rámci projektu optimalizace výkonu WiFi přidal stack mac80211 účtování vysílacího času a možnost distribuovat vysílací čas mezi více stanic (při provozu v režimu přístupového bodu přiděluje méně přenosového času pomalým bezdrátovým stanicím, místo aby čas rozděloval rovnoměrně mezi všechny stanice);
- Přidán mechanismus "", který poskytuje upozornění, když nastanou problémy se síťovým rozhraním;
- Pro zásuvky nová možnost "SO_BINDTOIFINDEX" podobná
- Paměťové a systémové služby
- bezpečné doručování signálu, které umožňuje opětovné použití PID. Například při předchozím volání kill by mohla nastat situace, kdy by 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 signál by skončil předáním jinému procesu. K odstranění takových situací bylo přidáno nové systémové volání pidfd_send_signal, které používá deskriptory souborů z /proc/pid k zajištění stabilní vazby procesu. I když je PID znovu použito během zpracování systémového volání, deskriptor souboru se nezmění a lze jej bezpečně použít k odeslání signálu procesu;
- schopnost používat permanentní paměťová zařízení (persistent-memory, např ) jako RAM. Jádro doposud podporovalo taková zařízení, jako jsou úložná zařízení, ale nyní je lze použít i jako další RAM. Tato funkce byla implementována v reakci na zpětnou vazbu od uživatelů, kteří jsou ochotni akceptovat zpoždění výkonu a chtějí používat nativní API pro správu paměti jádra. Linux namísto použití stávajících systémů alokace paměti v uživatelském prostoru, které fungují nad mmap pro soubor DAX;
- Přidán nový ovladač nečinnosti CPU (cpuidle, rozhoduje, kdy lze CPU přepnout do režimů hluboké úspory energie; čím hlubší režim, tím větší úspory, ale také tím déle trvá ukončení režimu) - TEO (Timer Events Oriented Governor ). Až dosud byly navrženy dva obslužné programy cpuidle – „menu“ a „ladder“, lišící se heuristikou. Obsluha "menu" má známé problémy s heuristickými rozhodnutími, k jejichž odstranění bylo rozhodnuto připravit novou obsluhu. TEO je umístěn jako alternativa k ovladači „menu“, což umožňuje vyšší výkon při zachování stejné úrovně spotřeby energie.
Nový obslužný program můžete aktivovat pomocí spouštěcího parametru „cpuidle.governor=teo“; - V rámci práce na odstranění , způsobené přetečením 32bitového typu time_t, zahrnuje systémová volání, která nabízejí 32bitové časové čítače pro 64bitové architektury. Výsledkem je, že 64bitovou strukturu time_t lze nyní použít na všech architekturách. Podobné změny byly implementovány také v síťovém subsystému pro opce síťové zásuvky;
- Do systému hot patching pro jádro (live patching) Funkce „Atomic Replace“ pro atomické použití řady změn na jednu funkci. Tato funkce vám umožňuje distribuovat souhrnné záplaty pokrývající několik změn najednou, namísto procesu postupné aplikace živých záplat v přesně definovaném pořadí, což je poměrně obtížné udržovat. Zatímco dříve musela být každá následující změna založena na stavu funkce po poslední změně, nyní je možné šířit několik změn spojených s jedním počátečním stavem najednou (tj. správci mohou místo toho udržovat jeden konsolidovaný patch vzhledem k základnímu jádru řetězce záplat, které na sobě závisí);
- zastaralá podpora pro formát spustitelného souboru a.out a
Kód pro generování základních souborů ve formátu a.out, který je opuštěn. Formát a.out se již dlouho nepoužívá na systémech s Linuxa generování souborů a.out již dlouho není podporováno moderními nástroji v konfiguracích pro Linux ve výchozím nastavení. Zavaděč souborů a.out lze navíc implementovat kompletně v uživatelském prostoru; - Do mechanismu ověřování programu BPF byla přidána možnost identifikovat a odstranit nepoužívaný kód. Jádro také obsahuje záplaty s podporou spinlocku pro subsystém BPF, které poskytují další možnosti pro správu paralelního spouštění programů BPF;
- Оборудование
- In Nouveau řidič podpora správy heterogenní paměti, která umožňuje CPU a GPU přistupovat ke společným oblastem synchronizované paměti. Systém sdílené virtuální paměti (SVM, shared virtual memory) je implementován na bázi subsystému HMM (Heterogeneous memory management), který umožňuje použití zařízení s vlastními jednotkami správy paměti (MMU, memory management unit), které mohou přistupovat hlavní paměť. Zejména pomocí HMM můžete organizovat sdílený adresní prostor mezi GPU a CPU, ve kterém má GPU přístup k hlavní paměti procesu. Podpora SVM je v současnosti povolena pouze pro GPU rodiny Pascal, ačkoli podpora je poskytována také pro GPU Volta a Turing. Navíc v Nouveau nový ioctl pro řízení migrace oblastí paměti procesu do paměti GPU;
- V ovladači Intel DRM pro GPU Skylake a novější (gen9+) Ve výchozím nastavení režim rychlého spouštění eliminuje zbytečné změny režimu během spouštění. identifikátory zařízení založené na mikroarchitekturách Coffelake a Ice Lake. Pro Coffelake chipsy podpora GVT (). Pro virtuální GPU Podpora VFIO EDID. Pro LCD panely MIPI/DSI podpora prvků ACPI/PMIC. nové TV režimy 1080p30/50/60 TV;
- Přidána podpora pro Vega10/20 BACO GPU do ovladače amdgpu. Implementováno řízení spotřeby Vega 10/20 a řídicí stoly chladiče Vega 10. Přidány nové identifikátory zařízení PCI pro GPU Picasso. rozhraní pro správu plánovatelných závislostí, aby se zabránilo uváznutí;
- Ovladač DRM/KMS pro akcelerátory obrazovky (Mali D71);
- Přidána podpora pro obrazovky Toppoly TPG110, Sitronix ST7701, PDA 91-00156-A0, LeMaker BL035-RGB-002 3.5 a Kingdisplay kd097d04;
- Přidána podpora pro zvukové kodeky Rockchip RK3328, Cirrus Logic CS4341 a CS35L36, MediaTek MT6358, Qualcomm WCD9335 a Ingenic JZ4725B a také zvukovou platformu Mediatek MT8183;
- Přidána podpora pro řadiče NAND Flash STMicroelectronics FMC2, Amlogic Meson;
- Přidána podpora akcelerátoru pro hardwarové systémy Habana AI;
- Přidána podpora pro gigabitové ethernetové řadiče NXP ENETC a bezdrátová rozhraní MediaTek MT7603E (PCIe) a MT76x8.
Ve stejné době Latinská Amerika Free Software Foundation
вариант - , 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 mt7603 a goya. Aktualizovaný kód čištění objektů blob v ovladačích a podsystémech wilc1000, iwlwifi, soc-acpi-intel, brcmfmac, mwifiex, btmrvl, btmtk a touchscreen_dmi. Čištění objektů blob v zavaděči firmwaru lantiq xrx200 bylo zastaveno z důvodu jeho odstranění z jádra.
Zdroj: opennet.ru
