Vydání jádra Linux 5.18

Po dvou měsících vývoje představil Linus Torvalds vydání linuxového jádra 5.18. Mezi nejpozoruhodnější změny: bylo provedeno velké vyčištění zastaralé funkčnosti, Reiserfs FS byl prohlášen za zastaralý, byly implementovány události sledování uživatelských procesů, byla přidána podpora mechanismu pro blokování zneužití Intel IBT, byl povolen režim detekce přetečení vyrovnávací paměti, když pomocí funkce memcpy() byl přidán mechanismus pro sledování volání funkcí fprobe, Byl vylepšen výkon plánovače úloh na CPU AMD Zen, byl zahrnut ovladač pro správu funkčnosti procesoru Intel (SDS), byly integrovány některé záplaty pro restrukturalizaci hlavičkových souborů a bylo schváleno použití standardu C11.

Nová verze obsahuje 16206 2127 oprav od 14203 1995 vývojářů (v minulém vydání bylo 108 14235 oprav od 1340982 593836 vývojářů), velikost opravy je 44 MB (změny se dotkly 5.18 16 souborů, bylo přidáno 11 3 3 řádků kódu, smazáno XNUMX XNUMX řádků). Přibližně XNUMX % všech změn zavedených v XNUMX se týká ovladačů zařízení, přibližně XNUMX % změn souvisí s aktualizací kódu specifického pro hardwarové architektury, XNUMX % se týká síťového zásobníku, XNUMX % se týkají souborových systémů a XNUMX % souvisí s vnitřními subsystémy jádra.

Klíčové inovace v jádře 5.18:

  • Diskový subsystém, I/O a souborové systémy
    • Souborový systém Btrfs přidal podporu pro předávání komprimovaných dat při provádění operací odesílání a přijímání. Dříve při použití odesílání/přijímání odesílající strana dekomprimovala data uložená v komprimované podobě a přijímající strana je před zápisem znovu zkomprimovala. V jádře 5.18 dostaly aplikace v uživatelském prostoru používající odesílání/přijímání volání možnost přenášet komprimovaná data bez přebalování. Funkčnost je implementována díky novým operacím ioctl BTRFS_IOC_ENCODED_READ a BTRFS_IOC_ENCODED_WRITE, které umožňují přímo číst a zapisovat informace v rozsahu.

      Kromě toho Btrfs zlepšuje výkon fsync. Přidána možnost deduplikovat a provádět reflink (klonování metadat souboru vytvořením odkazu na existující data, aniž by bylo nutné je skutečně kopírovat) pro celé úložiště, neomezené na přípojné body.

    • V režimu přímého I/O je možné přistupovat k šifrovaným souborům, když fscrypt používá inline šifrování, ve kterém operace šifrování a dešifrování provádí řadič disku, nikoli jádro. Při běžném šifrování jádra je přístup k zašifrovaným souborům pomocí přímého I/O stále nemožný, protože k souborům se přistupuje bez vyrovnávací paměti v jádře.
    • Server NFS ve výchozím nastavení zahrnuje podporu protokolu NFSv3, který nyní nevyžaduje samostatné povolení a je k dispozici, když je obecně povoleno NFS. NFSv3 je považován za hlavní a vždy podporovanou verzi NFS a podpora NFSv2 může být v budoucnu ukončena. Účinnost čtení obsahu adresáře se výrazně zlepšila.
    • Souborový systém ReiserFS byl zastaralý a očekává se, že bude odstraněn v roce 2025. Ukončení podpory ReiserFS sníží úsilí potřebné k udržování změn v celém souborovém systému souvisejících s podporou nového API pro připojení, iomap a tomes.
    • Pro souborový systém F2FS byla implementována možnost mapování uživatelských ID připojených souborových systémů, která slouží k porovnání souborů konkrétního uživatele na připojeném cizím oddílu s jiným uživatelem na aktuálním systému.
    • Byl přepracován kód pro výpočet statistik v Device-mapper handlere, což výrazně zlepšilo přesnost účtování v handlerech jako je dm-crypt.
    • Zařízení NVMe nyní podporují 64bitové kontrolní součty pro kontrolu integrity.
    • Pro souborový systém exfat byla navržena nová možnost připojení "keep_last_dots", která zakazuje mazání teček na konci názvu souboru (ve Windows jsou tečky na konci názvu souboru ve výchozím nastavení odstraněny).
    • EXT4 zlepšuje výkon režimu fast_commit a zvyšuje škálovatelnost. Možnost připojení „mb_optimize_scan“, která umožňuje zvýšit výkon v podmínkách velké fragmentace souborového systému, je přizpůsobena pro práci se soubory s rozsahy.
    • Podpora pro toky zápisu v podsystému, který podporuje bloková zařízení, byla ukončena. Tato funkce byla navržena pro SSD, ale nebyla rozšířena a v současné době nejsou používána žádná zařízení, která by tento režim podporovala, a je nepravděpodobné, že se objeví v budoucnu.
  • Paměťové a systémové služby
    • Začala integrace sady záplat, což umožňuje výrazně zkrátit dobu přestavby jádra restrukturalizací hierarchie hlavičkových souborů a snížením počtu vzájemných závislostí. Kernel 5.18 obsahuje záplaty, které optimalizují strukturu hlavičkových souborů plánovače úloh (kernel/sched). Ve srovnání s předchozí verzí se spotřeba času CPU při sestavování kódu jádra/sched/ snížila o 61 % a skutečný čas se snížil o 3.9 % (z 2.95 na 2.84 s).
    • Kód jádra může používat standard C11, publikovaný v roce 2011. Dříve musel kód přidaný do jádra odpovídat specifikaci ANSI C (C89) vytvořené v roce 1989. Ve skriptech sestavení jádra 5.18 byla možnost ‚—std=gnu89‘ nahrazena ‚—std=gnu11 -Wno-shift-negative-value‘. Uvažovalo se o možnosti použití standardu C17, ale v tomto případě by bylo nutné navýšit minimální podporovanou verzi GCC, přičemž zahrnutí podpory C11 zapadá do aktuálních požadavků na verzi GCC (5.1).
    • Vylepšený výkon plánování úloh na procesorech AMD s mikroarchitekturou Zen, která poskytuje více mezipaměti poslední úrovně (LLC) pro každý uzel s kanály místní paměti. Nová verze odstraňuje nerovnováhu LLC mezi NUMA uzly, což vedlo k výraznému zvýšení výkonu u některých typů zátěže.
    • Byly rozšířeny nástroje pro sledování aplikací v uživatelském prostoru. Nová verze jádra přidává uživatelským procesům možnost vytvářet uživatelské události a zapisovat data do trasovací vyrovnávací paměti, která lze prohlížet pomocí standardních trasovacích nástrojů jádra, jako jsou ftrace a perf. Události trasování uživatelského prostoru jsou izolovány od událostí trasování jádra. Stav události lze zobrazit prostřednictvím souboru /sys/kernel/debug/tracing/user_events_status a registraci událostí a záznam dat prostřednictvím souboru /sys/kernel/debug/tracing/user_events_data.
    • Přidán mechanismus pro monitorování (probe) volání funkcí - fprobe. API fprobe je založeno na ftrace, ale je omezeno pouze schopností připojit obslužné rutiny zpětného volání ke vstupním bodům funkcí a výstupním bodům funkcí. Na rozdíl od kprobes a kretprobes vám nový mechanismus umožňuje používat jeden handler pro několik funkcí najednou.
    • Podpora starších procesorů ARM (ARMv4 a ARMv5), které nejsou vybaveny jednotkou správy paměti (MMU), byla ukončena. Podpora systémů ARMv7-M bez MMU je zachována.
    • Podpora architektury NDS32 podobné RISC používané v procesorech Andes Technologies byla ukončena. Kód byl odstraněn kvůli nedostatečné údržbě a nedostatku požadavků na podporu NDS32 v hlavním linuxovém jádře (zbývající uživatelé používají specializovaná sestavení jádra od výrobců hardwaru).
    • Ve výchozím nastavení je vytváření jádra s podporou formátu spustitelných souborů a.out zakázáno pro architektury alpha a m68k, které tento formát nadále používají. Je pravděpodobné, že podpora pro starší formát a.out bude z jádra brzy zcela odstraněna. O plánech na odstranění formátu a.out se diskutuje od roku 2019.
    • Architektura PA-RISC poskytuje minimální podporu pro mechanismus vDSO (virtual dynamic shared objects), který poskytuje omezenou sadu systémových volání dostupných v uživatelském prostoru bez přepínání kontextu. Podpora vDSO umožnila implementovat schopnost běhu s nespustitelným zásobníkem.
    • Přidána podpora pro mechanismus Intel HFI (Hardware Feedback Interface), který umožňuje hardwaru přenášet informace do jádra o aktuálním výkonu a energetické účinnosti jednotlivých CPU.
    • Přidán ovladač pro mechanismus Intel SDSi (Software-Defined Silicon), který umožňuje řídit začlenění dalších funkcí do procesoru (například specializované instrukce a další mezipaměť). Myšlenka je taková, že čipy mohou být dodávány za nižší cenu se zamčenými pokročilými funkcemi, které lze následně „zakoupit“ a aktivovat další funkce bez výměny hardwaru čipu.
    • Byl přidán ovladač amd_hsmp pro podporu rozhraní AMD HSMP (Host System Management Port), které poskytuje přístup k funkcím správy procesoru prostřednictvím sady speciálních registrů, které se objevily v procesorech AMD EPYC serverů počínaje generací Fam19h. Prostřednictvím HSMP můžete například získat data o spotřebě energie a teplotě, nastavit limity frekvence, aktivovat různé režimy zvýšení výkonu a spravovat parametry paměti.
    • Asynchronní I/O rozhraní io_uring implementuje volbu IORING_SETUP_SUBMIT_ALL k registraci sady deskriptorů souborů v kruhové vyrovnávací paměti a operaci IORING_OP_MSG_RING k odeslání signálu z jedné kruhové vyrovnávací paměti do druhé kruhové vyrovnávací paměti.
    • Mechanismus DAMOS (Data Access Monitoring-based Operations Schemes), který umožňuje uvolnění paměti s přihlédnutím k frekvenci přístupu do paměti, má rozšířené možnosti monitorování operací paměti z uživatelského prostoru.
    • Třetí řada záplat byla integrována s implementací konceptu stránkových folií, která se podobají složeným stránkám, ale mají vylepšenou sémantiku a jasnější organizaci práce. Použití svazků umožňuje urychlit správu paměti v některých subsystémech jádra. V navrhovaných záplatách byly funkce správy vnitřní paměti přeloženy do folií, včetně variant funkce get_user_pages(). Poskytovaná podpora pro vytváření velkých objemů v kódu pro čtení dopředu.
    • Systém sestavení nyní podporuje proměnné prostředí USERCFLAGS a USERLDFLAGS, pomocí kterých můžete překladač a linker předávat další příznaky.
    • V subsystému eBPF poskytuje mechanismus BTF (BPF Type Format), který poskytuje informace o kontrole typu v pseudokódu BPF, možnost přidávat anotace k proměnným, které odkazují na oblasti paměti v uživatelském prostoru. Anotace pomáhají systému ověřování kódu BPF lépe identifikovat a ověřovat přístupy do paměti.
    • Byl navržen nový handler alokace paměti pro ukládání načtených programů BPF, který umožňuje efektivnější využití paměti v situacích, kdy je načteno velké množství programů BPF.
    • Do systémového volání madvise(), který poskytuje nástroje pro optimalizaci správy paměti procesu, byl přidán příznak MADV_DONTNEED_LOCKED, který doplňuje stávající příznak MADV_DONTNEED, jehož prostřednictvím může být jádro předem informováno o blížícím se uvolnění paměťového bloku, tzn. že tento blok již není potřeba a může být používán jádrem. Na rozdíl od MADV_DONTNEED je použití příznaku MADV_DONTNEED_LOCKED přípustné pro paměťové stránky připnuté v RAM, které jsou při volání madvise vyřazeny beze změny jejich připnutého stavu a v případě následného přístupu k bloku a vygenerování „stránky chyba,“ jsou vráceny se zachovanou vazbou. Navíc byla přidána změna umožňující použití příznaku MADV_DONTNEED s velkými paměťovými stránkami v HugeTLB.
  • Virtualizace a bezpečnost
    • Pro architekturu x86 byla přidána podpora pro mechanismus ochrany toku příkazů Intel IBT (Indirect Branch Tracking), který zabraňuje použití technik konstrukce exploitu pomocí technik návratově orientovaného programování (ROP, Return-Oriented Programming), ve kterých exploit je tvořena ve formě řetězce volání již existujících v paměti částí strojových instrukcí zakončených instrukcí návratu řízení (zpravidla se jedná o konce funkcí). Podstatou implementované metody ochrany je blokování nepřímých přechodů do těla funkce přidáním speciální instrukce ENDBR na začátek funkce a umožněním provedení nepřímého přechodu pouze v případě přechodu na tuto instrukci (nepřímá volání přes JMP a CALL musí vždy spadat na instrukci ENDBR, která je umístěna na úplném začátku funkcí).
    • Povolena přísnější kontrola hranic vyrovnávací paměti ve funkcích memcpy(), memmove() a memset() prováděná v době kompilace, když je povolen režim CONFIG_FORTIFY_SOURCE. Přidaná změna se scvrkává na kontrolu, zda prvky struktur, jejichž velikost je známá, přesahují hranice. Je třeba poznamenat, že implementovaná funkce by umožnila blokovat všechna přetečení vyrovnávací paměti jádra související s memcpy() zjištěná alespoň za poslední tři roky.
    • Přidána druhá část kódu pro aktualizovanou implementaci generátoru pseudonáhodných čísel RDRAND, který je zodpovědný za provoz zařízení /dev/random a /dev/urandom. Nová implementace je pozoruhodná tím, že sjednocuje provoz /dev/random a /dev/urandom, přidává ochranu proti výskytu duplikátů v toku náhodných čísel při spouštění virtuálních strojů a přechází na používání hašovací funkce BLAKE2s místo SHA1 pro operace míchání entropie. Tato změna zlepšila zabezpečení generátoru pseudonáhodných čísel odstraněním problematického algoritmu SHA1 a odstraněním přepisování inicializačního vektoru RNG. Vzhledem k tomu, že algoritmus BLAKE2s je ve výkonu lepší než SHA1, mělo jeho použití také pozitivní vliv na výkon.
    • Pro architekturu ARM64 byla přidána podpora pro nový autentizační algoritmus ukazatele – „QARMA3“, který je rychlejší než algoritmus QARMA při zachování správné úrovně zabezpečení. Technologie umožňuje pomocí specializovaných instrukcí ARM64 ověřit zpáteční adresy pomocí digitálních podpisů, které jsou uloženy v nepoužitých horních bitech samotného ukazatele.
    • Pro architekturu ARM64 byla implementována podpora pro sestavení se zahrnutím ochranného režimu do GCC 12 proti přepsání návratové adresy z funkce v případě přetečení vyrovnávací paměti na zásobníku. Podstatou ochrany je uložení návratové adresy do samostatného „stínového“ zásobníku po přenesení řízení na funkci a získání této adresy před ukončením funkce.
    • Přidán nový svazek klíčů – „stroj“, obsahující klíče vlastníka systému (MOK, Machine Owner Keys), podporovaný v zavaděči shim. Tyto klíče lze použít k digitálnímu podepisování součástí jádra načtených ve fázi po zavedení (například moduly jádra).
    • Odebrána podpora asymetrických soukromých klíčů pro TPM, které byly nabízeny ve starší verzi TPM, měly známé bezpečnostní problémy a nebyly v praxi široce přijaty.
    • Přidána ochrana dat s typem size_t před přetečením celých čísel. Kód obsahuje handlery size_mul(), size_add() a size_sub(), které vám umožňují bezpečně násobit, sčítat a odečítat velikosti pomocí typu size_t.
    • Při sestavování jádra jsou povoleny příznaky „-Warray-bounds“ a „-Wzero-length-bounds“, které zobrazují varování, když index překročí hranici pole a když se použijí pole s nulovou délkou.
    • Zařízení virtio-crypto přidalo podporu pro šifrování pomocí algoritmu RSA.
  • Síťový subsystém
    • V implementaci síťových mostů přibyla podpora režimu vázání portu (locked mode), ve kterém může uživatel posílat provoz přes port pouze z autorizované MAC adresy. Byla také přidána možnost použít několik struktur k vyhodnocení stavu protokolu STP (Spanning Tree Protocol). Dříve bylo možné VLAN mapovat pouze přímo na STP (1:1), přičemž každá VLAN byla spravována samostatně. Nová verze přidává parametr mst_enable, při povolení je stav VLAN řízen modulem MST (Multiple Spanning Trees) a vazba VLAN může odpovídat modelu M:N.
    • Pokračovaly práce na integraci nástrojů do síťového zásobníku, aby bylo možné sledovat důvody zahazování paketů (kódy důvodů). Kód příčiny je odeslán, když se uvolní paměť spojená s paketem a umožňuje situace, jako je zahození paketu kvůli chybám v záhlaví, detekce falšování rp_filter, neplatný kontrolní součet, nedostatek paměti, spuštěná pravidla IPSec XFRM, neplatné pořadové číslo TCP atd.
    • Je možné přenášet síťové pakety z programů BPF spouštěných z uživatelského prostoru v režimu BPF_PROG_RUN, ve kterém se programy BPF spouštějí v jádře, ale výsledek vracejí do uživatelského prostoru. Pakety jsou přenášeny pomocí subsystému XDP (eXpress Data Path). Je podporován režim zpracování živých paketů, ve kterém může procesor XDP přesměrovat síťové pakety za chodu do síťového zásobníku nebo na jiná zařízení. Je také možné vytvořit softwarové generátory externího provozu nebo nahradit síťové rámce do síťového zásobníku.
    • Pro programy BPF připojené k síťovým cgroups byly navrženy pomocné funkce, které explicitně nastavují návratovou hodnotu systémových volání, což umožňuje předat úplnější informace o důvodech blokování systémového volání.
    • Subsystém XDP (eXpress Data Path) přidal podporu pro fragmentované pakety umístěné do více vyrovnávacích pamětí, což umožňuje zpracovávat snímky Jumbo v XDP a používat TSO/GRO (TCP Segmentation Offload/Generic Receive Offload) pro XDP_REDIRECT.
    • Proces mazání síťových jmenných prostorů byl výrazně zrychlen, což bylo požadováno na některých velkých systémech s velkým objemem provozu.
  • Оборудование
    • Ovladač amdgpu ve výchozím nastavení obsahuje technologii adaptivní synchronizace FreeSync, která umožňuje upravit obnovovací frekvenci informací na obrazovce a zajistit tak plynulý obraz bez trhání při hraní her a sledování videí. Podpora GPU Aldebaran byla oznámena jako stabilní.
    • Ovladač i915 přidává podporu pro čipy Intel Alderlake N a diskrétní grafické karty Intel DG2-G12 (Arc Alchemist).
    • Ovladač nouveau poskytuje podporu vyšších datových toků pro rozhraní DP/eDP a podporu prodlužovačů kabelů lttprs (Link-Training Tunable PHY Repeaters).
    • V subsystému drm (Direct Rendering Manager) v ovladačích podpora parametrů armada, exynos, gma500, hyperv, imx, ingenic, mcde, mediatek, msm, omap, rcar-du, rockchip, sprd, sti, tegra, tilcdc, xen a vc4 byl přidán nomodeset, který umožňuje zakázat přepínání video režimů na úrovni jádra a použití nástrojů hardwarové akcelerace vykreslování a ponechává pouze funkce související se systémovým framebufferem.
    • Přidána podpora pro ARM SoС Qualcomm Snapdragon 625/632 (používaný v chytrých telefonech LG Nexus 5X a Fairphone FP3), Samsung Exynos 850, Samsung Exynos 7885 (používaný v Samsung Galaxy A8), Airoha (Mediatek/EcoNet) EN7523, Mediatek (PrestigioMT6582) tablet 5008G), Microchip Lan3, Renesas RZ/G966LC, RZ/V2L, Tesla FSD, TI K2/AM3 a i.MXRTxxxx.
    • Přidána podpora pro ARM zařízení a desky od Broadcom (Raspberry Pi Zero 2 W), Qualcomm (Google Herobrine R1 Chromebook, SHIFT6mq, Samsung Galaxy Book2), Rockchip (Pine64 PineNote, Bananapi-R2-Pro, STM32 Emtrion emSBS, Samsung Galaxy Tab S , tablet Prestigio PMT5008 3G), Allwinner (A20-Marsboard), Amlogic (Amediatek X96-AIR, CYX A95XF3-AIR, Haochuangy H96-Max, Amlogic AQ222 a OSMC Vero 4K+), Aspeed (Quanta S6Q, AS8HMllVERock ROMED) / Armada (Ctera C3 V200 a V1 NAS), Mstar (DongShanPiOne, Miyoo Mini), NXP i.MX (Protonic PRT2MM, emCON-MX8M Mini, Toradex Verdin, Gateworks GW8).
    • Přidána podpora pro zvukové systémy a kodeky AMD PDM, Atmel PDMC, Awinic AW8738, i.MX TLV320AIC31xx, Intel CS35L41, ESSX8336, Mediatek MT8181, nVidia Tegra234, Qualcomm SC7280, Renesas Texas2 RZ/V585 Instruments Přidána počáteční implementace ovladače zvuku pro čip Intel AVS DSP. Aktualizována podpora ovladačů pro Intel ADL a Tegra234 a provedené změny pro zlepšení podpory zvuku na zařízeních Dell, HP, Lenovo, ASUS, Samsung a Clevo.

    Ve stejné době vytvořila Latin American Free Software Foundation verzi zcela svobodného jádra 5.18 - Linux-libre 5.18-gnu, zbavenou prvků firmwaru a ovladačů obsahujících nesvobodné komponenty nebo části kódu, jejichž rozsah je omezený. výrobcem. Nová verze čistí ovladače pro MIPI DBI panely, VPU Amphion, WiFi MediaTek MT7986 WMAC, Mediatek MT7921U (USB) a Realtek 8852a/8852c, Intel AVS a zvukové čipy Texas Instruments TAS5805M. Soubory DTS byly také vyčištěny pro různé SoC Qualcomm s procesory založenými na architektuře AArch64. Aktualizovaný kód čištění blobů v ovladačích a podsystémech AMD GPU, MediaTek MT7915, Silicon Labs WF200+ WiFi, Mellanox Spectru Ethernet, Realtek rtw8852c, Qualcomm Q6V5, Wolfson ADSP, MediaTek HCI UART.

Zdroj: opennet.ru

Přidat komentář