Uvolnění jádra Linux 5.6

Po dvou měsících vývoje Linus Torvalds představil jádrný release Linux 5.6. Mezi nejvýraznějšími změnami patří: integrace rozhraní VPN WireGuard, podpora USB4, jmenné prostory pro čas, možnost vytváření zpracovatelů TCP přetížení pomocí BPF, počáteční podpora MultiPath TCP, odstranění problému s rokem 2038 jádrem, mechanismus „bootconfig“, souborový systém ZoneFS.

Do nové verze bylo přijato 13702 oprav od 1810 vývojářů,
velikost záplaty je 40 MB (změny se dotkly 11577 souborů, přidáno 610012 řádků kódu,
odstraněno 294828 řádků). Přibližně 45 % všech uvedených v 5.6
se týká ovladačů zařízení, přibližně 15 % změn má
se týká aktualizace kódu specifického pro hardwarové architektury, 12 %
je spojeno se síťovým zásobníkem, 4 % — s souborovými systémy a 3 % s interními
podsystemy jádra.

Hlavní novinky:

  • Síťová subsystém
    • Byla přidána implementace rozhraní VPN WireGuard, které bylo realizováno na základě moderních šifrovacích metod (ChaCha20, Poly1305, Curve25519, BLAKE2s), je snadné na použití, zbavené komplikací, prokázalo se v řadě velkých nasazení a zajišťuje velmi vysoký výkon (o 3,9 krát předstihuje OpenVPN co se týče propustnosti). WireGuard používá koncept směrování na základě šifrovacích klíčů, což znamená vazbu uzavřeného klíče na každé síťové rozhraní a použití k propojení otevřených klíčů. Výmena otevřených klíčů pro navázání spojení probíhá analogicky k SSH. Potřebné kryptografické primitivy pro fungování WireGuard byly byly přeneseny z knihovny Zinc v rámci standardního Crypto API a byly zahrnuty v komponentě jádra 5.5.
    • Začala integrace komponent potřebných pro podporu MPTCP (MultiPath TCP), rozšíření protokolu TCP pro organizaci TCP spojení s doručováním paketů současně po více trasách skrze různá síťová rozhraní přiřazená k rozdílným IP adresám. Pro síťové aplikace takové agregované spojení vypadá jako běžné TCP spojení, a veškerá logika dělení proudů je prováděna pomocí MPTCP. Multipath TCP lze použít jak pro rozšíření propustnosti, tak pro zvýšení spolehlivosti. Například MPTCP lze aplikovat na organizaci přenosu dat na smartphonu využitím současně linků WiFi a 4G nebo pro snížení nákladů připojením serveru pomocí několika levných linek místo jedné drahé.
    • Byla přidána podpora disciplíny zpracování síťových front sch_ets (Enhanced Transmission Selection, IEEE 802.1Qaz), která umožňuje rozdělení šířky pásma mezi různé třídy provozu. Pokud je zatížení určité třídy provozu nižší než přidělená šířka pásma, ETS umožňuje jiným třídám provozu využít dostupnou (nevyužitou) šířku pásma. Qdisc sch_ets je nastavena jako disciplina PRIO a využívá třídy provozu k určení přísných a sdílených limitů šířky pásma. ETS funguje jako kombinace disciplín PRIO a DRR — při existenci přísně omezených tříd provozu se používá PRIO, ale pokud v čekací frontě není žádný provoz, funguje jako DRR.
    • Byl přidán nový typ BPF programů BPF_PROG_TYPE_STRUCT_OPS, který umožňuje implementaci funkčních zpracovatelů jádra prostřednictvím BPF. V současné době lze tuto možnost již použít k implementaci algoritmů řízení přetížení TCP ve formě BPF programů. Jako příklad navržena BPF program s implementací algoritmu DCTCP.
    • Do jádra byly přijaty změny, převádějící nástroje ethtool z ioctl() na použití netlink rozhraní. Nové rozhraní usnadňuje přidávání rozšíření, zlepšuje zpracování chyb, umožňuje posílat oznámení při změně stavu, usnadňuje interakci mezi jádrem a uživatelským prostorem a snižuje počet synchronizovaných pojmenovaných seznamů.
    • Byla přidána implementace algoritmu řízení síťových front FQ-PIE (Flow Queue PIE), cíleného na snížení negativního vlivu mezilehlého vyrovnávání paketů na okraji síťového zařízení (bufferbloat). FQ-PIE vykazuje vysokou účinnost při použití v systémech s kabelovými modemy.
  • Diskový subsystém, vstup/výstup a souborové systémy
    • Pro souborový systém Btrfs byla přidána asynchronní implementace operace DISCARD (označení uvolněných bloků, které již není možné fyzicky uchovávat). Původně byly operace DISCARD prováděny synchronně, což mohlo vést k poklesu výkonu v důsledku čekání na dokončení příslušných příkazů úložnými zařízeními. Asynchronní implementace umožňuje nečekat na dokončení DISCARD ze strany úložiště a provádět tuto operaci na pozadí.
    • V XFS byla provedena údržba kódu, ve kterém byly použity zastaralé 32bitové časové značky (typ time_t byl nahrazen time64_t), což vedlo k problému roku 2038. Byly odstraněny chyby a poškození paměti, které se objevovaly na 32bitových platformách. Kód byl přepracován pro práci s rozšířenými atributy.
    • do souborového systému ext4 byly provedeny optimalizace výkonu spojené s blokováním inode při operacích čtení a zápisu. Zlepšen výkon přepisování v režimu přímého vstupu/výstupu (Direct I/O). Pro zjednodušení diagnostiky problémů bylo zajištěno uchování prvního a posledního kódu chyby v superbloku.
    • V souborovém systému F2FS byla implementována možnost ukládání dat v komprimované podobě. Pro jednotlivý soubor nebo adresář může být komprese povolena pomocí příkazu „chattr +c file“ nebo „chattr +c dir; touch dir/file“. Pro kompresi celého oddílu lze v nástroji mount použít volbu „-o compress_extension=ext“.
    • Do jádra byla přijata souborový systém ZoneFS, který usnadňuje nízkoúrovňovou práci se zónovanými úložnými zařízeními. Zónovaná zařízení zahrnují pevné magnetické disky nebo NVMe SSD, přičemž úložný prostor je rozdělen do zón, které tvoří skupiny bloků nebo sektorů, do nichž je povoleno pouze sekvenční přidávání dat s celkovou aktualizací celé skupiny bloků. FS ZoneFS byla vyvinuta společností Western Digital a spojuje každou zónu v úložišti s jednotlivým souborem, který lze použít pro ukládání dat v raw režimu bez manipulace na úrovni sektorů a bloků, tj. umožňuje aplikacím používat souborové API místo přímého přístupu k blokovému zařízení pomocí ioctl.
    • V NFS je ve výchozím nastavení zakázána montáž oddílů přes UDP. Přidána podpora specifikovaná ve specifikaci NFS 4.2 pro přímé kopírování souborů mezi servery. Přidána nová volba montování „softreval“, která v případě selhání serveru umožňuje použití vyrovnaných hodnot atributů. Například při použití této volby po nedostupnosti serveru zůstává možnost pohybovat se po cestách v NFS oddílu a přistupovat k informacím, které se uložily do cache.
    • Bylo provedeno optimalizace výkonu mechanismu fs-verity, který se používá pro kontrolu integrity a ověřování jednotlivých souborů. Rychlost sekvenčního čtení byla zvýšena díky použití Merklova hash stromu. Byla optimalizována produktivita FS_IOC_ENABLE_VERITY v podmínkách absence údajů v cache (aplikováno předběžné čtení stránek s daty).
  • Virtualizace a bezpečnost
    • Možnost vypnutí modulu SELinux během provozu byla prohlášena za zastaralou, a v budoucnu bude zakázáno odpojit již aktivovaný SELinux. Pro vypnutí SELinux bude nutné zadat parametr „selinux=0“ do příkazového řádku jádra.
    • Byla přidána podpora časových prostorů (time namespaces), které umožňují přiřadit stavu systémových hodin (CLOCK_REALTIME,
      CLOCK_MONOTONIC, CLOCK_BOOTTIME) ke kontejneru použít svůj čas a při migraci kontejneru na jiný host zajistit nezměněnost hodnot CLOCK_MONOTONIC a CLOCK_BOOTTIME (zohlednit čas po spuštění s ohledem nebo bez ohledu na stav spánku).
    • Byl odstraněn blokovaný pool /dev/random. Chování /dev/random bylo přiblíženo k /dev/urandom s cílem zabránit blokaci entropie po inicializaci poolu.
    • Do základního jádra byl přidán ovladač, který umožňuje hostujícím systémům běžícím na VirtualBoxu připojit adresáře sdílené hostitelským prostředím (VirtualBox Shared Folder).
    • Do subsystému BPF byla přidána řada patchích (BPF dispatcher), které zvyšují efektivitu volání BPF programů při událostech spojených s nimi (například umožňují urychlit volání XDP zpracovatelů při příjmu síťového paketu) při aplikaci mechanismu Retpoline pro ochranu proti útokům třídy Spectre V2.
    • Byl přidán ovladač pro podporu prostředí TEE (Trusted Execution Environment) vestavěných do APU AMD.
  • Paměť a systémové služby
    • Do BPF byla přidána podpora globálních funkcí. Vývoj probíhá v rámci iniciativy na přidání podpory knihoven funkcí, které lze připojit v BPF programech. Dalším krokem bude podpora dynamických rozšíření, které umožní načítání globálních funkcí, včetně možnosti nahrazovat existující globální funkce během jejich používání. V subsystému BPF byla také přidána podpora varianty operace map (používá se pro uchování trvalých dat), která podporuje zpracování v dávkovém režimu.
    • Bylo přidáno zařízení „cpu_cooling“, které umožňuje ochlazení přehřátého CPU převedením jej do stavu nečinnosti (idle) na krátké časové úseky.
    • Byl přidán systémový hovor openat2(), který nabízí sadu dalších příznaků pro omezení oprávnění k cestě k souboru (zákaz překračování montážních bodů, symbolických odkazů, magic-odkazů ( /proc/PID/fd ), komponent „.. /“).
    • Pro heterogenní systémy na bázi architektury big.LITTLE, které kombinují na jednom čipu výkonná a méně výkonná energeticky efektivní jádra CPU, je při provádění úloh v reálném čase zajištěno nastavení parametru uclamp_min (vytvořeného v jádře 5.3 mechanismus zajištění zátěže). Uvedený parametr zaručuje, že úloha bude plánovačem umístěna na jádru CPU, které má dostatečný výkon.
    • Jádro bylo zbaveno problému roku 2038.Byly vyměněny poslední zbývající zpracovatele, u nichž byl pro počítadlo epochálního času použit 32bitový (signed int) typ time_t, který s ohledem na začátek od roku 1970 by měl přeteči v roce 2038.
    • Pokračovalo v vylepšení rozhraní asynchronního vstupu/výstupu io_uringzdůraznily je zajištěno podpora nových operací: IORING_OP_FALLOCATE (rezervace prázdných oblastí), IORING_OP_OPENAT,
      IORING_OP_OPENAT2,
      IORING_OP_CLOSE (otevření a zavření souborů),
      IORING_OP_FILES_UPDATE (přidání a odstranění souborů ze seznamu rychlého přístupu),
      IORING_OP_STATX (požadavek na informace o souboru),
      IORING_OP_READ,
      IORING_OP_WRITE (zjednodušené ekvivalenty IORING_OP_READV a IORING_OP_WRITEV),
      IORING_OP_FADVISE,
      IORING_OP_MADVISE (asynchronní varianty volání posix_fadvise a madvise), IORING_OP_SEND,
      IORING_OP_RECV (odesílání a příjem síťových dat),
      IORING_OP_EPOLL_CTL (vykonávání operací nad souborovými popisovači epoll).
    • Byl přidán systémový hovor pidfd_getfd(), což umožňuje procesu extrahovat souborový popisovač otevřeného souboru z jiného procesu.
    • Realizováno mechanismus „bootconfig“, který umožňuje kromě volby příkazového řádku definovat parametry fungování jádra prostřednictvím konfiguračního souboru. Pro přidání takovýchto souborů do obrazu initramfs byla navržena utilita bootconfig. Uvedená možnost může být použita například pro konfiguraci kprobes během zavádění.
    • Přepracováno Mechanismus čekání na zápis a čtení dat v anonymních kanálech (pipe). Změna umožnila urychlit provádění úloh, jako je paralelní sestavování velkých projektů. Tato optimalizace však může vést k závodnímu stavu v GNU make kvůli chybě v vydání 4.2.1, která byla odstraněna ve verzi 4.3.
    • Do prctl() byl přidán flag PR_SET_IO_FLUSHER, který může být použit k označení procesů, které se zabývají uvolňováním paměti, pro které by se neměla uplatňovat omezení v situaci nedostatku paměti v systému.
    • Na základě použité v Androidu systému správy paměti ION byla implementována podsystém dma-buf heaps, který umožňuje spravovat alokaci DMA-bufferů pro sdílení oblastí paměti ovladači, aplikacemi a různými podsystémy.
  • Hardwarové architektury
    • Byla přidána podpora rozšíření E0PD, které se objevilo v ARMv8.5 a umožňuje realizovat ochranu proti útokům souvisejících se spekulativním prováděním instrukcí v CPU. Ochrana na základě E0PD vede k nižším režijním nákladům než ochrana KPTI (Kernel Page Table Isolation).
    • Pro systémy na bázi architektury ARMv8.5 byla přidána podpora instrukce RNG, která poskytuje přístup k hardwarovému generátoru pseudonáhodných čísel. V jádře je instrukce RNG využívána pro generování entropie při inicializaci generátoru pseudonáhodných čísel poskytovaného jádrem.
    • Byla odstraněna podpora rozšíření MPX (Memory Protection Extensions), přidaných do jádra 3.19 a umožňující kontrolu ukazatelů na dodržování hranic oblastí paměti. Tato technologie se nerozšířila v kompilátorech a byla odstraněna z GCC.
    • Pro architekturu RISC-V byla implementována podpora ladicího nástroje KASan (Kernel address sanitizer), který zajišťuje odhalování chyb při práci s pamětí.
  • Hardware
    • Byla implementována podpora specifikace USB 4.0, která je založena na protokolu Thunderbolt 3 a zajišťuje propustnost až 40 Gb/s, přičemž zachovává zpětnou kompatibilitu s USB 2.0 a USB 3.2. Podobně jako Thunderbolt rozhraní USB 4.0 umožňuje tunelování různých protokolů přes jeden kabel s konektorem Type-C, včetně PCIe, Display Port a USB 3.x, stejně jako softwarových implementací protokolů, například pro organizaci síťových spojení mezi hostiteli. Implementace je založena na již existujícím ovladači Thunderbolt v jádru Linuxu a přizpůsobuje ho pro práci s hostiteli a zařízeními kompatibilními s USB4. Změny také přidávají podporu pro zařízení Thunderbolt 3 do softwarové implementace manažera připojení (Connection Manager), který je zodpovědný za vytváření tunelů pro připojení více zařízení přes jeden port.
    • V ovladači amdgpu byla přidána byla zahájena počáteční podpora technologie ochrany proti kopírování HDCP 2.x (High-bandwidth Digital Content Protection). Přidána podpora ASIC čipu AMD Pollock, založeného na Raven 2. Byla realizována možnost resetování GPU pro rodiny Renoir a Navi.
    • V DRM ovladači pro grafické karty Intel byla přidána je podpora DSI VDSC pro čipy založené na mikroarchitektuře Ice Lake a Tiger Lake, realizováno LMEM mmap (místní paměť zařízení), vylepšeno parsování VBT (Video BIOS Table), implementována podpora HDCP 2.2 pro čipy Coffee Lake.
    • Pokračovalo se na unifikaci kódu ovladače amdkfd (pro diskrétní GPU, jako jsou Fiji, Tonga, Polaris) s ovladačem amdgpu.
    • Přepracován ovladač k10temp, který nyní nabízí podporu pro výstup parametrů napětí a proudu pro procesory AMD Zen, stejně jako rozšířené informace z teplotních senzorů používaných v procesorech Zen a Zen 2.
    • V ovladači nouveau byla přidána je podpora režimu verifikovaného načítání firmwaru pro GPU NVIDIA založené na mikroarchitektuře Turing (GeForce RTX 2000), což umožnilo aktivaci podpory 3D akcelerace pro tyto karty (vyžaduje načtení oficiálního firmwaru s digitálním podpisem NVIDIA). Přidána podpora grafického enginu TU10x. Řešeny problémy s HD Audio.
    • Přidána podpora komprese dat při přenosu přes DisplayPort MST (Multi-Stream Transport).
    • Přidán nový ovladač "ath11k" pro bezdrátové čipy Qualcomm s podporou 802.11ax.
      Ovladač je založen na stacku mac80211 a podporuje režimy přístupového bodu, pracovní stanice a uzlu Mesh sítě.
    • Přes sysfs je poskytnut přístup ke čitelným údajům z teplotních senzorů používaných na moderních pevných discích a SSD.
    • Byly provedeny změny významné změny v zvukovém systému ALSA, zaměřené na odstranění kódu problému roku 2038. (odstavení použití 32-bitového typu time_t v rozhraních snd_pcm_mmap_status a snd_pcm_mmap_control). Přidána podpora nových zvukových kodeků
      Qualcomm WCD9340/WCD9341, Realtek RT700, RT711, RT715, RT1308, Ingenic JZ4770.
    • Byly přidány ovladače pro LCD panely Logic PD 28, Jimax8729d MIPI-DSI, igenic JZ4770, Sony acx424AKP, Leadtek LTK500HD1829, Xinpeng XPP055C272, AUO B116XAK01, GiantPlus GPM940B0,
      BOE NV140FHM-N49,
      Satoz SAT050AT40H12R2,
      Sharp LS020B1DD01D.
    • Byla přidána podpora ARM desek a platform Gen1 Amazon Echo (na bázi OMAP3630), Samsung Galaxy S III mini (GT-I8190), Allwinner Emlid Neutis, Libre Computer ALL-H3-IT, PineH64 Model B, Aibretech Amlogic GX PC,
      Armada SolidRun Clearfog GTR, NXPGateworks GW59xx,
      Tolino Shine 3 eBook čtečka,
      Embedded Artists COM (i.MX7ULP), SolidRun Clearfog CX/ITX a HoneyComb (LX2160A), Google Coral Edge TPU (i.MX8MQ),
      Rockchip Radxa Dalang Carrier, Radxa Rock Pi N10, VMARC RK3399Pro SOM
      ST Ericsson HREF520, Inforce 6640, SC7180 IDP, Atmel/Microchip AM9X60 (ARM926 SoC, Kizboxmini), ST stm32mp15, AM3703/AM3715/DM3725, ST Ericsson ab8505, Unisoc SC9863A, Qualcomm SC7180. Přidána podpora PCIe ovladače použitého v Raspberry Pi 4.

Zároveň latinskoamerická Nadace svobodného softwaru vytvořila
varianta completní svobodné jádro 5.6 — Linux-libre 5.6-gnu, očištěného od prvků firmwaru a ovladačů obsahujících nesvobodné komponenty nebo části kódu, jejichž použití je omezeno výrobcem. V nové verzi byla deaktivována možnost načítání blobů v ovladačích pro AMD TEE, ATH11K a Mediatek SCP. Byla aktualizována čistící kód blobů v ovladačích a subsystémech AMD PSP, amdgpu a nouveau.

Zdroj: opennet.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster