Po dvoch mesiacoch vývoja Linus Torvalds predstavil vydanie jadra Linux 5.14. Medzi najvýraznejšími zmenami sú: nové systémové volania quotactl_fd() a memfd_secret(), odstránenie ovládačov ide a raw, nový kontrolér priority vstupu/výstupu pre cgroup, režim plánovania úloh SCHED_CORE, infraštruktúra pre vytváranie bootloaderov overených BPF programov.
Do novej verzie bolo prijatých 15883 opráv od 2002 vývojárov, veľkosť patchu je 69 MB (zmeny sa dotkli 12580 súborov, pridalo sa 861501 riadkov kódu, odstránilo 321654 riadkov). Približne 47% všetkých zmien v 5.14 sa týka ovládačov zariadení, približne 14% zmien sa týka aktualizácie kódu špecifického pre hardvérové architektúry, 13% sa týka sieťového zásobníka, 3% sa týka súborových systémov a 3% vnútorných subsystémov jadra.
- disková subsystéma, vstup/výstup a súborové systémy:
- pre cgroup implementovaný nový kontrolér priorít vstupu/výstupu — rq-qos, ktorý môže riadiť prioritu spracovania požiadaviek na blokové zariadenia generovaných účastníkmi každej cgroup. Podpora nového kontroléra priority bola pridaná do plánovača vstupu/výstupu mq-deadline;
- v súborovom systéme ext4 bola implementovaná nová ioctl-príkaz EXT4_IOC_CHECKPOINT, ktorá nútene zapisuje na disk všetky čakajúce transakcie z denníka a s nimi spojené buffery, ako aj prepíše oblasť používanú denníkom do úložiska. Zmena bola pripravená v rámci iniciatívy na prevenciu únikov informácií zo súborových systémov;
- v Btrfs boli pridané optimalizácie výkonu: vylúčením nadbytočného denníkovania rozšírených atribútov počas vykonávania fsync sa výkon intenzívnych operácií s rozšírenými atribútmi zvýšil až o 17%. Okrem toho, pri vykonávaní operácií skracovania, ktoré nezahŕňajú extenty, bolo deaktivované vykonávanie úplnej synchronizácie, čo znížilo čas vykonávania operácie o 12%. Do sysfs bola pridaná konfigurácia na obmedzenie priepustnosti vstupu/výstupu pri kontrole FS. Pridané ioctl-výzvy na zrušenie operácií zmeny veľkosti a odstránenia zariadenia;
- v XFS prepracovaná implementácia vyrovnávacej pamäte, ktorá bola prevedená na alokáciu pamäťových strán v dávkovom režime. Zefektívnená práca cache;
- Vo F2FS bola pridaná možnosť fungovania v režime iba na čítanie a implementovaný bol režim cache pre komprimované bloky (compress_cache) na zlepšenie výkonu náhodného čítania. Bola implementovaná podpora kompresie súborov mapovaných do pamäte pomocou operácie mmap(). Pre selektívne vypnutie kompresie súborov podľa masky bola navrhnutá nová možnosť montovania nocompress;
- V ovládači exFAT bola vykonaná práca na zlepšení kompatibility so skladovacími zariadeniami niektorých digitálnych fotoaparátov;
- Bola pridaná systémová výzva quotactl_fd(), ktorá umožňuje spravovať kvóty nie cez súbor špeciálneho zariadenia, ale cez určenie súborového deskriptora súvisiaceho so súborovým systémom, na ktorý sa kvóta vzťahuje;
- Zo jadra boli odstránené staré ovládače pre blokové zariadenia s rozhraním IDE, ktoré už dávno nahradila subsystém libata. Podpora starých zariadení zostala v plnej miere, zmeny sa týkajú iba možnosti používania starých ovládačov, pri ktorých boli úložiská pomenované \/dev\/hd*, a nie \/dev\/sd*;
- Z jadra bol odstránený ovládač „raw“, ktorý poskytoval nebufferovaný prístup k blokovým zariadeniam cez rozhranie \/dev\/raw. Uvedená funkcionalita bola už dávno implementovaná v aplikáciách pomocou príznaku O_DIRECT;
- Pamäť a systémové služby:
- V plánovači úloh bol implementovaný nový plánovací režim SCHED_CORE, ktorý umožňuje riadiť, ktoré procesy môžu súčasne bežať na jednom CPU jadre. Každému procesu môže byť pridelený cookie identifikátor, ktorý určuje dôveryhodnosť medzi procesmi (napríklad príslušnosť jednému používateľovi alebo kontajneru). Pri organizovaní vykonávania kódu plánovač môže zabezpečiť zdieľanie jedného CPU jadra len pre procesy spojené s jedným vlastníkom, čo možno využiť na blokovanie niektorých útokov triedy Spectre tým, že sa zabráni súbežnému vykonávaniu v jednom vlákne SMT (Hyper Threading) dôveryhodných a nedôveryhodných úloh;
- Pre mechanizmus cgroup bola implementovaná podpora operácie kill, ktorá umožňuje jednorázovo ukončiť všetky procesy priradené k skupine (odoslať SIGKILL) zapísaním „1“ do virtuálneho súboru cgroup.kill;
- rozšírené možnosti týkajúce sa reakcie na zistenie rozdelených blokovaní („split lock“), ktoré vznikajú pri prístupe k nevyrovnaným dátam v pamäti, pretože pri vykonávaní atómovej inštrukcie dáta prechádzajú dvoma líniami CPU cache. Takéto blokovania vedú k výraznému poklesu výkonu, a preto bola predchádzajúca verzia vybavená možnosťou núteného ukončenia aplikácie, ktorá spôsobila blokovanie. V novej verzii bol pridaný parameter príkazového riadku jadra „split_lock_detect=ratelimit:N“, ktorý umožňuje určiť celkový systémový limit intenzity operácií blokovania za sekundu, po prekročení ktorého bude akýkoľvek proces, ktorý sa stal zdrojom rozdeleného blokovania, namiesto ukončenia nútene zastavený na 20 ms;
- v kontroléri cgroup pre priepustnosť CFS (CFS bandwidth controller), ktorý určuje, koľko procesorového času sa môže prideliť každej cgroup, bola implementovaná možnosť definovania limitov obmedzených zadaným časom platnosti, čo umožňuje lepšie regulovať záťaže citlivé na oneskorenia. Napríklad nastavenie hodnoty cpu.cfs_quota_us na 50000 a cpu.cfs_period_us na 100000 umožní skupine procesov stráviť každých 100 ms 50 ms procesorového času;
- bola pridaná počiatočná infraštruktúra na vytváranie načítačov BPF programov, ktorá v budúcnosti umožní načítanie iba BPF programov podpísaných dôveryhodným digitálnym kľúčom;
- pridaná nová futex operácia FUTEX_LOCK_PI2, ktorá používa monotónny časovač na výpočet časového limitu, ktorý zohľadňuje čas strávený systémom v spánku;
- pre architektúru RISC-V bola zavedená podpora veľkých stránok pamäte (Transparent Huge-Pages) a možnosť aplikácie mechanizmu KFENCE na zisťovanie chýb pri práci s pamäťou;
- v systémovom volaní madvise(), ktoré poskytuje prostriedky na optimalizáciu správy pamäte procesu, stavebné bloky pre vetvu dogfood, a do platformy Fuchsia pridanie flaga MADV_POPULATE_READ a MADV_POPULATE_WRITE na generovanie „page fault“ vo všetkých stránkach pamäte, ktoré sú referencované pre operácie čítania alebo zápisu, bez vykonania skutočného čítania alebo zápisu (prefault). Použitie flagov môže byť užitočné na zníženie oneskorení počas behu programu, vďaka predchádzajúcemu vykonaniu spracovateľa „page fault“ naraz pre všetky nepriradené stránky, bez čakania na skutočný prístup k nim;
- v systéme unit-testovania kunit bola pridaná podpora spúšťania testov v prostredí QEMU;
- pridané nové trasovače: „osnoise“ na sledovanie oneskorení v aplikáciách spôsobených spracovaním prerušenia a „timerlat“ na poskytovanie podrobných informácií o oneskoreniach pri prebudeniach na základe signálu časovača;
- virtualizácia a bezpečnosť:
- bol pridaný systémový hovor memfd_secret(), umožňujúca vytvoriť súkromnú oblasť pamäte v izolovanom adresnom priestore, viditeľnú iba pre vlastníka procesu, neodrážajúcu sa v iných procesoch a priamo nedostupnú pre jadro;
- v systéme filtrovania systémových volaní seccomp pri presúvaní obsluhovačov blokovania do priestoru používateľa bola poskytnutá možnosť používania jednej atomickej operácie na vytvorenie súborového deskriptoru pre izolovanú úlohu a jeho vrátenie pri spracovaní systémového volania. Navrhovaná operácia rieši problém so prerušením obsluhovača v priestore používateľa pri prijatí signálu;
- bol pridaný nový mechanizmus na správu obmedzenia zdrojov v priestore názvov identifikátorov používateľov, ktorý viaže samostatné počítadlá rlimit na používateľa v „user namespace“. Zmena rieši problém s aplikovaním spoločných počítadiel zdrojov pri spúšťaní procesov jedným používateľom v rôznych kontajneroch;
- v hypervízore KVM pre systémy ARM64 bola pridaná možnosť používania v hosťujúcich systémoch rozšírenia MTE (MemTag, Memory Tagging Extension), ktoré umožňuje viazanie štítkov na každú operáciu pridelenia pamäte a organizovanie kontroly správneho používania ukazovateľov na zablokovanie zneužívania zraniteľností spôsobených prístupom k už uvoľneným blokom pamäte, pretečením vyrovnávacej pamäte, prístupom pred inicializáciou a použitím mimo aktuálneho kontextu;
- prostriedky poskytované platformou ARM64 na autentifikáciu ukazovateľov (Pointer Authentication) teraz môžu byť osobitne nastavené pre jadro a priestor používateľa. Technológia umožňuje využívať špecializované inštrukcie ARM64 na kontrolu adries návratu pomocou digitálnych podpisov, ktoré sú uložené v nepoužívaných horných bitoch samotného ukazovateľa;
- v User-mode Linux bola pridaná podpora používania ovládačov k PCI zariadeniam s virtuálnou zbernicou PCI, realizovanou ovládačom PCI-over-virtio;
- pre systém x86 bola pridaná podpora paravirtualizovaného zariadenia virtio-iommu, ktoré umožňuje posielať IOMMU požiadavky, ako ATTACH, DETACH, MAP a UNMAP, nad transportom virtio bez emulácie stránkovacích tabuliek pamäte;
- pre CPU Intel, počnúc rodinou Skylake až po Coffee Lake, je predvolene deaktivované používanie rozšírení Intel TSX (Transactional Synchronization Extensions), ktoré poskytujú prostriedky na zlepšenie výkonu viac-vláknových aplikácií prostredníctvom dynamického vylúčenia nadbytočných synchronizačných operácií. Rozšírenia sú deaktivované kvôli možnosti útokov Zombieload, manipulujúcich s únikom informácií cez bočné kanály, ktorý vzniká pri práci mechanizmu asynchrónneho prerušenia operácií (TAA, TSX Asynchronous Abort);
- sieťový subsystém:
- pokračuje integrácia do jadra MPTCP (MultiPath TCP), rozšírenia protokolu TCP pre organizáciu TCP spojenia s doručovaním paketov súčasne cez viacero trás prostredníctvom rôznych sieťových rozhraní priradených k rôznym IP adresám. V novej verzii bol pridaný mechanizmus na nastavenie vlastných politík hashovania prenosu pre IPv4 a IPv6 (multipath hash policy), ktorý umožňuje z užívateľského priestoru určiť, ktoré z polí v paketocha, vrátane zabalenej, budú použité pri výpočte hashu určujúceho výber cesty pre paket;
- do virtuálneho transportu virtio bola pridaná podpora soketov SOCK_SEQPACKET (usporiadaný a spoľahlivý prenos datagramov);
- rozšírené možnosti mechanizmu soketov SO_REUSEPORT, ktorý umožňuje viacerým počúvajúcim soketom pripojiť sa k jednému portu na prijímanie spojení s rozdelením prichádzajúcich požiadaviek súčasne medzi všetky pripojené sokety cez SO_REUSEPORT, čo uľahčuje vytváranie viac-vláknových serverových aplikácií. V novej verzii stavebné bloky pre vetvu dogfood, a do platformy Fuchsia prostriedky na odovzdávanie riadenia inému soketu v prípade zlyhania pri spracovaní požiadavky pôvodne vybraným soketom (rieši problém so stratou jednotlivých spojení pri reštarte služieb);
- hardvér:
- v ovládači amdgpu bola implementovaná podpora nových sérií GPU AMD Radeon RX 6000, vyvíjaných pod kódovými názvami „Beige Goby“ (Navi 24) a „Yellow Carp“, ako aj vylepšená podpora GPU Aldebaran (gfx90a) a APU Van Gogh. Pridaná možnosť súčasnej práce s viacerými panelmi eDP. Pre APU Renoir bola implementovaná podpora pre prácu so šifrovanými vyrovnávacími pamäťami vo videopamäti (TMZ, Trusted Memory Zone). Pridaná podpora horúceho odpojenia grafických kariet (hot-unplug). Pre GPU Radeon RX 6000 (Navi 2x) a staršie GPU AMD je predvolene povolená podpora energeticky úsporného mechanizmu ASPM (Active State Power Management), ktorý bol predtým aktivovaný len pre GPU Navi 1x, Vega a Polaris;
- pre čipy AMD bola pridaná podpora zdieľanej virtuálnej pamäte (SVM, shared virtual memory) na báze subsystému HMM (Heterogeneous memory management), ktorý umožňuje využívať zariadenia s vlastnými blokmi riadenia pamäte (MMU, memory management unit), ktoré môžu získavať prístup k hlavnej pamäti. Pomocou HMM možno usporiadať spoločný adresný priestor medzi GPU a CPU, v ktorom GPU môže získať prístup k hlavnej pamäti procesu;
- bola pridaná základná podpora technológie AMD Smart Shift, dynamicky mení parametre spotreby energie CPU a GPU na notebookoch s čipsetom a grafickou kartou AMD pre zvýšenie výkonu pri hraní hier, úprave videa a 3D-renderingu;
- v ovládači i915 pre grafické karty Intel je zahrnutá podpora čipov Intel Alderlake P;
- bol pridaný ovládač drm/hyperv pre virtuálny grafický adaptér Hyper-V;
- bol pridaný grafický ovládač simpledrm, ktorý používa na výstup rámcovú vyrovnávaciu pamäť EFI-GOP alebo VESA, poskytovanú UEFI firmware alebo BIOS. Hlavným určením ovládača je poskytnúť možnosť grafického výstupu v počiatočných fázach načítania, predtým než sa stane možné používať plnohodnotný DRM ovládač. Ovládač môže byť tiež použitý ako dočasné riešenie pre zariadenia, pre ktoré zatiaľ chýbajú natívne DRM ovládače;
- bola pridaná podpora počítača s jedným blokom Raspberry Pi 400;
- bol pridaný ovládač dell-wmi-privacy na podporu hardvérových vypínačov kamery a mikrofónu dodávaných v notebookoch Dell;
- pre notebooky Lenovo bol pridaný WMI rozhranie na zmenu nastavení BIOSu cez sysfs /sys/class/firmware-attributes/;
- rozšírená podpora zariadení s rozhraním USB4;
- bola pridaná podpora zvukových kariet a kodekov AmLogic SM1 TOACODEC, Intel AlderLake-M, NXP i.MX8, NXP TFA1, TDF9897, Rockchip RK817, Qualcomm Quinary MI2 a Texas Instruments TAS2505. Vylepšená podpora zvuku na prenosných počítačoch HP a ASUS. Boli pridané záplaty na zníženie oneskorenia pred začiatkom prehrávania zvuku na zariadeniach s rozhraním USB.
Zdroj – opennet.ru.
Zdroj: linux.org.ru
