Vydanie jadra Linux 5.1

Po dvoch mesiacoch vývoja Linus Torvalds predložené vydanie jadra Linux 5.1. Medzi najvýznamnejšie zmeny patrí nové rozhranie pre asynchrónne I/O io_uring, možnosť používať NVDIMM ako RAM, podpora zdieľanej virtuálnej pamäte v Nouveau, podpora škálovateľného monitorovania veľmi veľkých súborových systémov cez fanotify, možnosť konfigurovať kompresiu Zstd levelov v Btrfs, nový cpuidle TEO handler, implementácia systémových volaní na vyriešenie problému 2038, možnosť bootovania zo zariadení mapujúcich zariadenia bez initramfs, SafeSetID LSM modul, podpora kombinovaných live patchov.

Hlavné inovácie:

  • Diskový subsystém, I/O a súborové systémy
    • Implementované nové rozhranie pre asynchrónne I/O - io_uring, ktorý je pozoruhodný svojou podporou pre I/O polling a schopnosťou pracovať s alebo bez vyrovnávacej pamäte. Pripomeňme, že predtým navrhovaný asynchrónny I/O mechanizmus „aio“ nepodporoval I/O s vyrovnávacou pamäťou, mohol fungovať iba v režime O_DIRECT (bez vyrovnávacej pamäte a obchádzania vyrovnávacej pamäte), mal problémy s uzamykaním kvôli čakaniu na dostupnosť metadát a vykazovali veľké režijné náklady v dôsledku kopírovania údajov v pamäti.

      V rámci API
      Vývojári io_uring sa snažili odstrániť nedostatky starého rozhrania aio. Autor: výkon io_uring je veľmi blízko SPDK a výrazne predstihuje libaio pri práci so zapnutým hlasovaním. Na používanie io_uring v koncových aplikáciách bežiacich v užívateľskom priestore bola pripravená knižnica oslobodzovanie, ktorý poskytuje rámec na vysokej úrovni nad rozhraním jadra;

    • V mechanizme sledovania udalostí vo FS fanotify() pridané podpora sledovania superbloku a situácií so zmenou štruktúry dirent (udalosti vytvárania, odstraňovania a presúvania adresárov). Prezentované funkcie pomáhajú riešiť problémy so škálovateľnosťou, ktoré vznikajú pri vytváraní rekurzívneho sledovania zmien vo veľmi veľkých súborových systémoch pomocou mechanizmu inotify (priame zmeny bolo možné predtým sledovať iba cez inotify, ale
      výkon v podmienkach rekurzívneho sledovania veľkých vnorených adresárov ponechal veľa požiadaviek). Teraz je možné takéto monitorovanie efektívne vykonávať prostredníctvom fanotify;

    • Na súborovom systéme Btrfs pridané schopnosť prispôsobiť úroveň kompresie pre algoritmus zstd, čo možno považovať za optimálny kompromis medzi rýchlou, ale neúčinnou kompresiou lz4 a pomalou, ale dobrou kompresiou xz. Analogicky k tomu, ako bolo predtým možné nastaviť úroveň kompresie pri použití zlib, bola pre zstd pridaná podpora pre možnosť pripojenia „-o compress=zstd:level“. Počas testovania poskytovala minimálna prvá úroveň kompresiu dát 2.658-krát s rýchlosťou kompresie 438.47 MB/s, rýchlosťou dekompresie 910.51 MB/s a spotrebou pamäte 780 MB a maximálna úroveň 15 poskytla 3.126-krát, ale s kompresiou rýchlosť 37.30 MB/s pri rozbaľovaní 878.84 MB/s a spotreba pamäte 2547 MB;
    • Pridané schopnosť zaviesť systém zo súborového systému umiestneného na zariadení mapovačom zariadení bez použitia initramfs. Počnúc aktuálnym vydaním jadra môžu byť zariadenia na mapovanie zariadení priamo použité počas procesu zavádzania, napríklad ako oddiel s koreňovým súborovým systémom. Oblasť sa konfiguruje pomocou zavádzacieho parametra „dm-mod.create“. Medzi moduly mapovača zariadení, ktoré je možné načítať, patria: „crypt“, „oneskorenie“, „lineárny“, „snapshot-origin“ a „verity“;
    • Do súborového systému F2FS orientovaného na jednotky Flash bol pridaný príznak F2FS_NOCOW_FL, ktorý vám umožňuje zakázať režim kopírovania pri zápise pre daný súbor;
    • Súborový systém odstránený z jadra Exofs, čo je variant ext2, prispôsobený na prácu s objektovými úložiskami OSD (Object-based Storage Device). Podpora protokolu SCSI pre takéto zariadenia na ukladanie objektov bola tiež odstránená;
  • Virtualizácia a bezpečnosť
    • Do prctl() bola pridaná možnosť PR_SPEC_DISABLE_NOEXEC na riadenie špekulatívneho vykonávania pokynov pre vybraný proces. Nová možnosť vám umožňuje selektívne zakázať špekulatívne vykonávanie procesov, ktoré by mohli byť potenciálne napadnuté útokom Spectre. Zámok trvá až do prvého volania exec();
    • Implementovaný modul LSM SafeSetID, ktorý umožňuje systémovým službám bezpečne spravovať používateľov bez eskalácie privilégií (CAP_SETUID) a bez získania privilégií root. Privilégiá sa prideľujú definovaním pravidiel v securityfs na základe bieleho zoznamu platných väzieb (v tvare „UID1:UID2“);
    • Pridané nízkoúrovňové zmeny potrebné na načítanie bezpečnostných modulov (LSM) na báze zásobníka. Zaviedla možnosť zavádzania jadra "lsm" na kontrolu, ktoré moduly sa načítajú av akom poradí;
    • Do subsystému auditu bola pridaná podpora pre priestory názvov súborov;
    • Rozšírené schopnosti zásuvného modulu GCC structleak, ktorý umožňuje blokovať potenciálne úniky obsahu pamäte Zabezpečuje sa inicializácia akýchkoľvek premenných, ktoré sa používajú v kóde prostredníctvom referenčného prístupu na zásobník;
  • Sieťový subsystém
    • Pre zásuvky implementovaná nová možnosť "SO_BINDTOIFINDEX" podobná
      "SO_BINDTODEVICE", ale ako argument sa použije indexové číslo sieťového rozhrania namiesto názvu rozhrania;

    • Zásobník mac80211 pridal možnosť priradiť viacero BSSID (MAC adries) jednému zariadeniu. Ako súčasť projektu na optimalizáciu výkonu WiFi pridal zásobník mac80211 účtovanie vysielacieho času a schopnosť distribuovať vysielací čas medzi viacero staníc (pri prevádzke v režime prístupového bodu prideľuje menej prenosového času pomalým bezdrôtovým staniciam namiesto rovnomerného rozdelenia času medzi všetky stanice). stanice);
    • Pridaný mechanizmus "devlink zdravie", ktorý poskytuje upozornenia, keď sa vyskytnú problémy so sieťovým rozhraním;
  • Pamäťové a systémové služby
    • Implementovaná bezpečné dodávanie signálu, ktoré umožňuje opätovné použitie PID. Napríklad pri predchádzajúcom volaní kill by mohla nastať situácia, keď by sa cieľový PID mohol okamžite po odoslaní signálu uvoľniť z dôvodu ukončenia procesu a obsadiť ho iným procesom a signál by skončil odovzdaním inému procesu. Na odstránenie takýchto situácií bolo pridané nové systémové volanie pidfd_send_signal, ktoré používa deskriptory súborov z /proc/pid na zabezpečenie stabilnej väzby procesu. Aj keď sa PID znova použije počas spracovania systémového volania, deskriptor súboru sa nezmení a možno ho bezpečne použiť na odoslanie signálu do procesu;
    • Pridané schopnosť používať trvalé pamäťové zariadenia (perzistentná pamäť, napr NVDIMM) ako RAM. Doteraz jadro podporovalo také zariadenia, ako sú úložné zariadenia, ale teraz ich možno použiť aj ako dodatočnú pamäť RAM. Táto funkcia je implementovaná v reakcii na želania používateľov, ktorí sú ochotní zmieriť sa s oneskorením vo výkone a chcú použiť natívne rozhranie API na správu pamäte jadra Linuxu namiesto použitia existujúcich systémov prideľovania pamäte v používateľskom priestore bežiacich nad mmap pre dax. súbor;
    • Pridaný nový obslužný program nečinnosti CPU (cpuidle, rozhoduje o tom, kedy je možné CPU prepnúť do režimov hlbokej úspory energie; čím hlbší režim, tým väčšie úspory, ale tiež tým dlhšie trvá ukončenie režimu) - TEO (Timer Events Oriented Governor ). Doteraz boli navrhnuté dva obslužné programy cpuidle – „menu“ a „rebrík“, ktoré sa líšia heuristikou. Obsluha "menu" má známe problémy s heuristickými rozhodnutiami, na odstránenie ktorých sa rozhodlo pripraviť nový handler. TEO je umiestnený ako alternatíva k obsluhe „menu“, čo umožňuje vyšší výkon pri zachovaní rovnakej úrovne spotreby energie.
      Nový obslužný program môžete aktivovať pomocou zavádzacieho parametra „cpuidle.governor=teo“;

    • V rámci prác na odstránení problémy roku 2038, spôsobené pretečením 32-bitového typu time_t, zahŕňa systémové volania, ktoré ponúkajú 32-bitové počítadlá času pre 64-bitové architektúry. Výsledkom je, že 64-bitovú štruktúru time_t možno teraz použiť na všetkých architektúrach. Podobné zmeny boli implementované aj v sieťovom subsystéme pre možnosti časová značka sieťové zásuvky;
    • Do systému hot patching pre jadro (živé patchovanie) pridané Funkcia „Atomic Replace“ pre atómovú aplikáciu série zmien na jednu funkciu. Táto funkcia vám umožňuje distribuovať súhrnné záplaty pokrývajúce niekoľko zmien naraz, namiesto procesu postupnej aplikácie živých záplat v presne definovanom poradí, čo je dosť náročné na údržbu. Zatiaľ čo predtým každá nasledujúca zmena musela byť založená na stave funkcie po poslednej zmene, teraz je možné šíriť niekoľko zmien spojených s jedným počiatočným stavom naraz (t. j. správcovia môžu namiesto toho udržiavať jednu konsolidovanú opravu vzhľadom na základné jadro reťazca záplat, ktoré na sebe závisia);
    • Vyhlásené zastaraná podpora pre formát spustiteľného súboru a.out a
      odstránený kód na generovanie základných súborov vo formáte a.out, ktorý je v opustenom stave. Formát a.out sa na systémoch Linux dlho nepoužíva a generovanie súborov a.out už dávno nepodporujú moderné nástroje v predvolených konfiguráciách Linuxu. Navyše, zavádzač pre súbory a.out môže byť implementovaný úplne v užívateľskom priestore;

    • Do mechanizmu overovania programu BPF bola pridaná možnosť identifikovať a odstrániť nepoužívaný kód. Jadro tiež obsahuje záplaty s podporou spinlocku pre subsystém BPF, ktoré poskytujú ďalšie možnosti na správu paralelného vykonávania programov BPF;
  • Оборудование
    • In Nouveau vodič pridané podpora správy heterogénnej pamäte, ktorá umožňuje CPU a GPU pristupovať k spoločným oblastiam synchronizovanej pamäte. Systém zdieľanej virtuálnej pamäte (SVM, shared virtual memory) je implementovaný na báze subsystému HMM (Heterogeneous memory management), ktorý umožňuje používanie zariadení s vlastnými jednotkami správy pamäte (MMU, memory management unit), ktoré môžu pristupovať Hlavná pamäť. Najmä pomocou HMM môžete usporiadať zdieľaný adresný priestor medzi GPU a CPU, v ktorom má GPU prístup k hlavnej pamäti procesu. Podpora SVM je momentálne povolená iba pre GPU rodiny Pascal, aj keď podpora je poskytovaná aj pre GPU Volta a Turing. Navyše v Nouveau dodal nový ioctl na riadenie migrácie oblastí pamäte procesov do pamäte GPU;
    • V ovládači Intel DRM pre GPU Skylake a novší (gen9+) zapnuté V predvolenom nastavení režim rýchleho spustenia eliminuje zbytočné zmeny režimu počas zavádzania. Pridané новые identifikátory zariadení založené na mikroarchitektúrach Coffelake a Ice Lake. Pre Coffelake chipsy pridané podpora GVT (virtualizácia GPU). Pre virtuálne GPU implementovaná Podpora VFIO EDID. Pre LCD panely MIPI/DSI pridané podpora prvkov ACPI/PMIC. Implementovaná nové TV režimy 1080p30/50/60 TV;
    • Pridaná podpora pre Vega10/20 BACO GPU do ovládača amdgpu. Implementovaná správa napájania Vega 10/20 a ovládacie stoly chladiča Vega 10. Pridané nové identifikátory zariadení PCI pre GPU Picasso. Pridané rozhranie na správu plánovateľných závislostí, aby sa zabránilo zablokovaniu;
    • Pridané Ovládač DRM/KMS pre akcelerátory obrazovky ARM Komeda (Mali D71);
    • Pridaná podpora pre obrazovky Toppoly TPG110, Sitronix ST7701, PDA 91-00156-A0, LeMaker BL035-RGB-002 3.5 a Kingdisplay kd097d04;
    • Pridaná podpora pre zvukové kodeky Rockchip RK3328, Cirrus Logic CS4341 a CS35L36, MediaTek MT6358, Qualcomm WCD9335 a Ingenic JZ4725B, ako aj zvukovú platformu Mediatek MT8183;
    • Pridaná podpora pre NAND radiče Flash STMicroelectronics FMC2, Amlogic Meson;
    • Pridaná podpora akcelerátora pre hardvérové ​​systémy Habana AI;
    • Pridaná podpora pre gigabitové ethernetové radiče NXP ENETC a bezdrôtové rozhrania MediaTek MT7603E (PCIe) a MT76x8.

Zároveň Latinskoamerická nadácia pre slobodný softvér tvorené
voľba úplne bezplatné jadro 5.1 - Linux-libre 5.1-gnu, zbavený prvkov firmvéru a ovládačov obsahujúcich neslobodné komponenty alebo časti kódu, ktorých rozsah je obmedzený výrobcom. V novom vydaní je načítanie blobu v ovládačoch mt7603 a goya zakázané. Aktualizovaný kód čistenia blob v ovládačoch a podsystémoch wilc1000, iwlwifi, soc-acpi-intel, brcmfmac, mwifiex, btmrvl, btmtk a touchscreen_dmi. Čistenie blobu v zavádzači firmvéru lantiq xrx200 bolo zastavené z dôvodu jeho odstránenia z jadra.

Zdroj: opennet.ru

Pridať komentár