Vydání jádra Linux 5.1

Po dvou měsících vývoje Linus Torvalds představen vydání jádra Linux 5.1. 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.

hlavní inovace:

  • Diskový subsystém, I/O a souborové systémy
    • Implementováno nové rozhraní pro asynchronní I/O - io_uring, 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 výkon io_uring je velmi blízko SPDK 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 libování, který poskytuje rámec na vysoké úrovni nad rozhraním jádra;

    • V mechanismu sledování událostí ve FS fanotify() přidal podpora pro sledování situací superbloku a změny struktury dirent (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 přidal 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;
    • Přidal 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 Exofs, 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;
  • 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 SafeSetID, 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ů;
    • Rozšířený 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 implementováno 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 "devlink zdraví", který poskytuje upozornění, když nastanou problémy se síťovým rozhraním;
  • Paměťové a systémové služby
    • Realizováno 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;
    • Přidal schopnost používat permanentní paměťová zařízení (persistent-memory, např NVDIMM) jako RAM. Až dosud jádro podporovalo taková zařízení, jako jsou úložná zařízení, ale nyní je lze použít také jako další RAM. Tato funkce je implementována v reakci na přání uživatelů, kteří jsou ochotni smířit se se zpožděním výkonu a chtějí používat nativní rozhraní API pro správu paměti linuxového jádra namísto použití stávajících systémů přidělování paměti v uživatelském prostoru běžících nad mmap pro dax. soubor;
    • 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í problémy roku 2038, 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 timestamp síťové zásuvky;
    • Do systému hot patching pro jádro (live patching) přidal 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í);
    • Oznámeno zastaralá podpora pro formát spustitelného souboru a.out a
      odstraněno kód pro generování základních souborů ve formátu a.out, který je v opuštěném stavu. Formát a.out se na linuxových systémech již dlouho nepoužívá a generování souborů a.out již dlouho nepodporují moderní nástroje ve výchozích linuxových konfiguracích. Navíc může být zavaděč pro soubory a.out implementován zcela 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č přidal 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 přidal 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+) v ceně Ve výchozím nastavení režim rychlého spouštění eliminuje zbytečné změny režimu během spouštění. Přidal новые identifikátory zařízení založené na mikroarchitekturách Coffelake a Ice Lake. Pro Coffelake chipsy přidal podpora GVT (virtualizace GPU). Pro virtuální GPU implementováno Podpora VFIO EDID. Pro LCD panely MIPI/DSI přidal podpora prvků ACPI/PMIC. Realizováno 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. Přidat rozhraní pro správu plánovatelných závislostí, aby se zabránilo uváznutí;
    • Přidat Ovladač DRM/KMS pro akcelerátory obrazovky ARM Komeda (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 vytvořený
вариант zcela bezplatné jádro 5.1 - Linux-libre 5.1-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 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

Přidat komentář