Izlaz jezgra Linux 6.18

После двух месяцев разработки Линус Торвальдс представил релиз ядра Linux 6.18. Среди наиболее заметных изменений: dm-pcache для дискового кэширования в энергонезависимой памяти (PMEM), удаление Bcachefs, online-режим проверки XFS, драйверы Binder (Android IPC) и Tyr (GPU Mali) на Rust, возможность создания USB-драйверов на Rust, оптимизация кэширования в аллокаторе памяти SLUB, адресация пространств имён по файловым дескрипторам, ускорение работы подкачки (swap), верификация BPF-программ по цифровой подписи, виртуализация Intel CET в KVM, сетевой протокол PSP (гибрид TLS и IPsec), поддержка IP-расширения AccECN, оптимизация UDP-стека.

В новую версию принято 15035 исправлений от 2217 разработчиков, размер патча — 45 МБ (изменения затронули 13142 файлов, добавлено 601897 строк кода, удалено 355006 строк). В прошлом выпуске было 14334 исправлений от 2118 разработчиков, размер патча — 46 МБ. Около 40% всех представленных в 6.18 изменений связаны с драйверами устройств, примерно 16% изменений имеют отношение к обновлению кода, специфичного для аппаратных архитектур, 12% связано с сетевым стеком, 5% — с файловыми системами и 3% c внутренними подсистемами ядра.

Основные новшества в ядре 6.18 (1, 2, 3):

  • Дисковая подсистема, ввод/вывод и файловые системы
    • В Device Mapper добавлен обработчик dm-pcache для использования постоянной памяти (CXL-память, адресуемая через DAX-устройство) в качестве дополнительного высокопроизводительного кэша перед более медленными традиционными дисковыми или флэш накопителями. Dm-pcache обеспечивает сохранение содержимого кэша в случае аварий (crash-safe) за счёт использования энергонезависимой памяти, дублирования метаданных и проверки целостности данных и метаданных по контрольным суммам CRC32. В настоящее время поддерживается только кэширование в режиме отложенной записи (write-back).
    • Из ядра удалён код файловой системы Bcachefs, которая теперь будет распространяться в форме внешнего модуля, собираемого с использованием инструментария DKMS (Dynamic Kernel Module Support). Код Bcachefs может быть возвращён в состав ядра после того как Кент Оверстрит на деле докажет возможность корректного взаимодействия с другими разработчиками ядра и способность следовать устоявшимся правилам разработки.
    • В системный вызов pwritev2() добавлен флаг RWF_NOSIGNAL, отключающий отправку сигнала SIGPIPE при записи в разорванные неименованные каналы или сокеты.
    • В Procfs добавлена опция монтирования «pidns» для указания пространств имён идентификаторов процессов (PID namespace). Например: «mount -t proc -o pidns=/proc/self/ns/pid proc /tmp/proc».
    • В XFS объявлена стабильной и включена по умолчанию возможность применения утилиты fsck для проверки и исправления выявленных проблем в online-режиме, без отмонтирования файловой системы. Добавлены системные вызовы file_getattr и file_setattr для изменения атрибутов специальных файлов (любых inode). В KConfig по умолчанию отключены опции XFS_SUPPORT_V4 (4 версия XFS) и XFS_SUPPORT_ASCII_CI (режим без учёта регистра символов ASCII), объявленные устаревшими. Удалены устаревшие опции монтирования attr2, noattr2, ikeep и noikeep.
    • В MD RAID реализован новый тип битовых карт — llbitmap (lockless bitmap), работающих без блокировок и обеспечивающих более высокую производительность.
    • Из общей структуры «inode» вынесена информация, связанная с шифрованием и верификацией (указатели i_crypt_info и i_verity_info). Изменение позволяет снизить потребление памяти в файловых системах, не поддерживающих шифрование и верификацию.
    • В подсистему FUSE добавлена поддержка системного вызова copy_file_range() и прямого копирования диапазонов с использованием размера с 64-разрядным типом (ранее поддерживался только 32-разрядный размер). Добавлена поддержка инициализации в синхронном режиме во время монтирования (FUSE_DEV_IOC_SYNC_INIT).
    • В ФС ext4 реализована возможность использования 32-разрядных идентификаторов пользователей (uid) и групп (gid) при доступе к зарезервированным блокам. Добавлены ioctl-операции для установки и чтения параметров суперблока примонтированных ФС (tune2fs сможет менять параметры в суперблоке без прав на запись в блочное устройство). Полностью удалены устаревшие настройки, специфичные для ext3.
    • V f2fs je dodana možnost montiranja »lookup_mode« za izbiro načina iskanja: perf — iskanje po hašu, compat — linearno iskanje, auto — samodejna izbira. Sprememba načina ima smisel za konfiguracije z imeniki, kjer črke niso občutljive na velike/male črke. Trenutni način iskanja lahko preverite preko datoteke »/sys/fs/f2fs//effective_lookup_mode«. Dodana je možnost rezervacije inode, dostopnih samo privilegiranim uporabnikom.
    • V Overlayfs je dodan način delovanja brez občutljivosti na velike/male črke, ki se aktivira na ravni slojev FS (nastavitve za posamezne imenike še niso podprte).
    • V BTRFS je izboljšano razporeditev opravil pri visoki obremenitvi pri branju in nizki obremenitvi pri zapisovanju, skrajšan čas potrditve transakcij, znatno skrajšan čas sinhronizacije (s minut na desetine sekund). Omogočeno je delo z bloki (bs) večjimi od velikosti spominske strani (ps).
    • V ksmbd (SMB strežnik na ravni jedra) je dodana možnost za omejitev največjega števila povezav z enega. IP-naslove. smbdirect, smbclient in smbserver so prešli na uporabo tipičnih struktur jedra.
    • V SQUASHFS je dodana možnost uporabe v sistemskem klicu lseek() možnosti SEEK_DATA in SEEK_HOLE za iskanje podatkov in praznin v redčenih datotekah. V nekaterih testih je bilo zabeleženo povečanje zmogljivosti kopiranja redčenih datotek do 150-krat.
    • V EXFAT je dodana podpora za ioctl FS_IOC_GETFSLABEL in FS_IOC_SETFSLABEL za branje in zapis oznak delitev. Omogočena je sprememba možnosti montiranja med ponovno montažo. Pospešeno je nalaganje bitnih kart.
    • V NTFS3 je dodana podpora za ioctl FS_IOC_GETFSLABEL in FS_IOC_SETFSLABEL za branje in nastavitev oznak delitev.
  • Pomnilnik in sistemske storitve
    • V sestavo je sprejeta implementacija mehanizma medprocesnega komuniciranja Binder, napisane v jeziku Rust. Binder se uporablja v Androidu za organizacijo interakcije med procesi in oddaljenega klica metod (en proces Android lahko pokliče metodo ali funkcijo v drugem procesu Android, pri čemer uporabi Binder za identifikacijo, klic in prenos argumentov med procesi). Koda Binder je bila predpisana v jeziku Rust v okviru iniciative Google za povečanje varnosti Androida.
    • V SLUB, allocator memory za jedro, je implementiran opcijski sloj predpomnilnika 'sheaves', ki uporablja več predpomnilnikov, od katerih je vsak vezan na posebno jedro CPU, kar omogoča, da se ena jedro osredotoči na operacije dodeljevanja ali sproščanja pomnilnika. Takšen predpomnilnik je izboljšal učinkovitost dodeljevanja in sproščanja pomnilnika v jedru, saj se je izognil odvečnim sinhronizacijskim primitivi, potrebnim pri vključevanju različnih jeder CPU. V izvedenih testih je bila rast učinkovitosti med 6,3 % in 31 % odvisno od vrste obremenitve.
    • Dodana je možnost ustvarjanja datotečnih descriptorjev, povezanih z določenim imenskim prostorom (namespace). V nasprotju s dostopom do imenskih prostorov po identifikatorjih (/proc//ns/), se datotečni descriptor poveže s konkretnim primerkom imenskega prostora in izključuje situacijo, ko je identifikator ponovno dodeljen in že kaže na drug objekt. Podobno kot pri uporabi pidfds se odpiranje datotečnih descriptorjev, ki se nanašajo na imenske prostore, izvaja prek funkcij open_by_handle_at() in name_to_handle_at().
    • Implementiran je mehanizem 'Swap Table', ki omogoča povečanje učinkovitosti osinjenja. Pospešek se doseže s zmanjšanjem konkurence za dostop do predpomnilnika, bolj učinkovitim iskanjem v predpomnilniku in zmanjšanjem fragmentacije. Backend, temelječ na Swap Table, je uporabljen za predpomnjenje osinjenja namesto backenda XArray ter je povprečno povečal učinkovitost za 5-20 %. V testu usemem se je propustnost povečala za 17-28 %, v testu za večpredstavno ponovno sestavljanje jedra pa se je čas sestavljanja zmanjshal za 1,12-3,19 %, test redis-benchmark z BGSAVE pa je pokazal povečanje obdelanih zahtevkov za 6-7 %.
    • Podrejeni sistem Zswap je prešel na neposredno uporabo sistema dodeljevanja pomnilnika zsmalloc namesto sloja zpool, ki se več ne uporablja in je zdaj odstranjen iz jedra.
    • Za upravljanje obnašanja naložnega programa mikrokode na sistemih x86 je implementirana možnost ukazne vrstice 'microcode=seznam zastavic'. V trenutni obliki nova možnost nadomešča 'microcode.force_minrev' in prav tako omogoča nastavitev minimalno sprejemljive različice mikrokode za nalaganje.
    • Започело је рад на реорганизацији претерано надуване структуре «page», која се користи за управљање страницама оперативне меморије. Додат је тип ‘memdesc_flags_t» за поља са универзално обележеним флаговима који ће моћи да се користе након планираног будућег издвајања из структуре «page» појединачних структура за slab и фолијенте (folio).
    • За архитектуру nios2, која се користи у Altera Nios II процесорима (софт-процессор базиран на FPGA), реализована је подршка за системски позив clone3().
    • У конфигурацију језгра (KConfig) додат је атрибут «transitional», који се може користити за обележавање подешавања која се не приказују у корисничким интерфејсима, као што је «make menuconfig», и не укључују се у сгенерисане конфигурационе датотеке. Основна сврха атрибута је поједностављење преименовања опција уз задржавање одговарајуће компатибилности.
    • Минимална верзија компајлера Clang, којом се може саставити језгро, подигнута је на LLVM 15. У Debian 12 и Ubuntu 22.04 испоручује се LLVM 14.
    • Настављено је преношење измена из гранке Rust-for-Linux, које се односе на коришћење језика Rust као другог језика за развој управљачких програма и модула језгра (подршка за Rust није активна по подразумеваној поставци и не доводи до укључења Rust у обавезне зависности за компилацију језгра). У новој верзији за код на језику Rust реализоване су атомске операције с меморијом, структура maple tree, могућност креирања DebugFS датотека и функције за манипулацију битним картама. Проширен је приступ API-ју за развој управљачких програма. Додат је комплетан сет абстракција за развој USB управљачких програма (пример USB управљачког програма). У алатку perf додата је подршка за симболе за дебаговање, које генерише компајлер rustc.
  • Virtualizacija in varnost
    • Додата је подршка за криптографску верификацију учитаних BPF програма по дигиталним потписима. У будућности ће ова могућност бити проширена средствима за одређивање правила учитања потписаних BPF програма и пружање непривилегованим корисницима могућности за коришћење верификованих BPF програма.
    • V hypervisoru KVM je implementována podpora virtualizace rozšíření Intel CET (Control-flow Enforcement Technology), používaného k ochraně před exploitmi využívajícími techniky návratového orientovaného programování (ROP — Return-Oriented Programming). Podstata ochrany spočívá v tom, že po předání řízení funkci je adresa návratu uchovávána procesorem nejen v běžné zásobníku, ale také v samostatném stínovém zásobníku, který nelze přímo měnit.
    • Byla přidána možnost použití více než 255 CPU v hostovaných systémech běžících na hypervisoru Bhyve na hostitelích s FreeBSD 15.
    • Byla přidána vrstvená technologie dibs (Direct Internal Buffer Sharing) pro řízené sdílení bufferů uvnitř izolovaného prostředí, jako je hypervisor nebo instance jádra Linux.
    • Do subsystému auditu byla přidána podpora pro práci s několika současně aktivními moduly LSM (Linux Security Module).
    • Byl přidán virtio ovladač spi-virtio pro přístup k SPI zařízení (Serial Peripheral Interface) z virtualnih naprav.
    • Do hypervisoru KVM byla přidána podpora režimu SEV-SNP CipherText Hiding, který blokuje čtení šifrovaných paměťových oblastí chráněných hostitelských systémů na neautorizovaném CPU.
    • Byl přidán ovladač qtee pro TEE prostředí (Trusted Execution Environment) čipů Qualcomm.
  • Mrežna podsistem
    • Byla přidána podpora šifrování TCP spojení pomocí protokolu PSP (PSP Security Protocol), který vyvinula společnost Google pro šifrování provozu mezi datovými centry. PSP zajišťuje šifrování, kryptografickou kontrolu integrity a autentifikaci zdroje, implementuje jakousi kombinaci vlastností protokolů TLS a IPsec. V PSP se používá šifrování na úrovni jednotlivých síťových spojení, nikoli celého komunikačního kanálu. PSP používá samostatné šifrovací klíče pro různá tunelovaná TCP spojení pro striktní izolaci provozu od různých aplikací a zpracovatelů. Pro snížení zátěže na CPU je podporováno vyčlenění šifrovacích a dešifrovacích operací na straně síťových karet (offload). Pro přenos dat je používán protokol UDP, nad kterým je tunelován obsah originálního TCP paketu.

      Izlaz jezgra Linux 6.18
    • Dodana je osnovna podrška za AccECN (Tačno Eksplicitno Obaveštenje o Preopterećenju), koje predstavlja poboljšanu verziju ECN, koja omogućava hostovima da u slučaju preopterećenja označe IP pakete umesto da ih odbacuju, što omogućava prepoznavanje pojave inicijalne faze zagušenja u komunikacionim kanalima bez gubitka paketa. Izvorna ECN ekstenzija ima ograničenje koje omogućava signalizaciju samo jednog preopterećenja tokom jednog ciklusa prijema-otpisa TCP (RTT, Round-Trip Time, slanje zahteva i primanje odgovora). AccECN uklanja ovo ograničenje i omogućava prijemniku da šalje pošiljaocu više oznaka o preopterećenju u TCP paketu. Algoritmi za upravljanje preopterećenjem mogu koristiti dobijene informacije za preciznije reagovanje na preopterećenja, izbegavajući naglo smanjenje intenziteta slanja paketa pri pojavi manje preopterećenosti.
    • U UDP steku optimizovana je obrada dolaznih paketa u uslovima DDoS napada, koji dovode do primanja velikog broja paketa u jedan ili više UDP soketa. Uvedene optimizacije, kao što su smanjenje konkurentnih blokada, optimizacija rasporeda struktura podataka u memoriji i korišćenje blokada koje uzimaju u obzir NUMA arhitekturu (Neuniformni pristup memoriji), omogućile su povećanje performansi prilikom prijema UDP paketa za 47% i više u ekstremnim uslovima.
    • Implementirana je mogućnost onemogućavanja keširanja ulaza/izlaza na NFS serveru, što omogućava korišćenje NFS servera u sistemima sa malom količinom memorije (na primer, u smanjenim cloud okruženjima). Onemogućavanje keša može takođe biti korisno na opterećenim NFS serverima kako bi se izbeglo izbacivanje keširanih podataka povezanim sa lokalnim skladištima zbog oslobađanja memorije za NFS keš.
    • Maksimalna veličina bafera za dolazne i odlazne pakete za mrežne sokete (net.core.rmem_max i net.core.wmem_max) povećana je sa 2 MB na 4 MB. Podrazumevana veličina nije promenjena (net.core.rmem_default i net.core.wmem_default = 2 MB).
    • Dodavan je drajver za akcelerator mrežnih operacija Qualcomm PPE (Motor za obradu paketa), koji se koristi u SoC Qualcomm IPQ9574.
  • Oprema
    • V jedru je sprejet gonilnik Tyr, napisan v jeziku Rust, ki omogoča delovanje z GPU ARM Mali, ki uporabljajo tehnologijo CSF (Command Stream Frontend), kot so Mali G310, G510 in G710. Gonilnik trenutno še ni pripravljen za stalno uporabo običajnih uporabnikov in se obravnava kot eksperimentalni prototip za testiranje abstrakcij za razvoj gonilnikov v jeziku Rust.
    • Gonilnikom za naprave vnosa z vmesnikom HID (Human Interface Device) je bila dodana podpora za sledilne ploščice s taktilno povratno informacijo in svojimi senzorji pritiska.
    • Delo na drm-gonilniku (Direct Rendering Manager) Xe za GPU na osnovi arhitekture Intel Xe, ki se uporablja v grafičnih karticah Intel družine Arc in integrirani grafiki, je bilo nadaljeno, začelo pa se je že s procesorji Tiger Lake. V novi različici je dodan vmesnik madvise, vključena je podpora za SR-IOV PF (Single Root I/O Virtualization Physical Function), dodana je podpora za način Intel PSMI za validacijo strojne opreme, obdelava prenesenih informacij o napakah iz programske opreme je bila omogočena, implementiran je bil profil porabe energije SLPC ter dodana podpora za nalaganje pomožnih programski oprem (na primer za krmilnik ventilatorja in regulator napetosti) med preverjanjem gonilnika.
    • V gonilniku AMDGPU je bila dodana podpora za naprave z APU Cyan Skillfish, izboljšana je podpora za AMD GCN 1.0, dosežena je bila združljivost z orodji criu, dodane so bile metrike temperature v sysfs, omogočena pa so bila tudi vprašanja remapiranja MMIO iz uporabniškega prostora.
    • V gonilniku i915 je bila vključena podpora za čipe družine Wildcat Lake ter izboljšano delovanje z GPU Jasper Lake, Elkhart Lake, Gen7 in Gen6.
    • V gonilniku Nouveau so kot privzeti vklopljeni GSP-programi NVIDIA in izboljšana obravnava napak.
    • Nadaljevala se je integracija komponent gonilnika Nova za GPU NVIDIA, opremljene z GSP-programi, ki se uporabljajo od serije NVIDIA GeForce RTX 2000 na osnovi mikroarhitekture Turing. Gonilnik je napisan v jeziku Rust. V novi različici je bila razširjena podpora za GSP-programske opreme, izboljšana je implementacija makra 'register!', dodana je podpora za razrede PCI naprav in identificiranje proizvajalcev.
    • Dodaja se gonilnik rocket za NPU pospeševalnike, ki se uporabljajo v SoC Rockchip RK3588.
    • Dodana je bila jedrna nastavitev 'boot_display' za izbiro izhodne naprave za prikaz postopka nalaganja na sistemih z več GPU.
    • V gonilniku vesadrm je bila implementirana podpora za 8-bitne palete.
    • V draiverju msm je bila dodana podpora za GPU Adreno 663 in implementirana podpora za tehnologijo zmanjševanja porabe energije IFPC (Inter Frame Power Collapse).
    • V draiverju panthor je bila dodana podpora za GPU Mali-G710, Mali-G510, Mali-G310, Mali-Gx15, Mali-Gx20 in Mali-Gx25.
    • Dodana je bila podpora za avdiosisteme ASoC Qualcomm Glymur in PM4125, Realtek RT1321, Shanghai FourSemi FS2104/5S, Texas Instruments PCM1754 in TAS2783A, qcs615, CS35L56 B2, tas2118, tas2x20, tas5825. Dodana je bila podpora za zvočne USB kartice Tascam US-144mkII in Presonus S1824c.
    • Dodana je bila podpora za ARM CPU Cortex-A320/A520AE/A720AE in C1-Nano/Pro/Premium/Ultra.
    • Dodana je bila podpora za ARM platforme, SoC in naprave: Apple M2 Pro, M2 Max in M2 Ultra, Sony Xperia SP, Samsung Galaxy S22, Samsung Galaxy S20 FE, ASUS Eee Pad Slider SL101, Lenovo ThinkBook 16, HP Omnibook X14 X1P42100, Dell Inspiron 7441 / Latitude 7455, Sige1, NanoPi Zero2, Axis Artpec8, NXP i.MX91, ROCK 2A/2F, Qualcomm Lemans Auto, Renesas RZ/T2H, RZ/N2H, RZ/T2H in RZ/N2H, Aspeed AST27xx, Meta Clemente BMC, Netcube Nagami som, Tqma91xx, Ultratronik i.MX8MP Ultra-MACH, i.MX8ULP EVK9, Buffalo WXR-1750DHP.

Hkrati je latinskoameriška Fundacija prostega programske opreme oblikovala različico popolnoma prostega jedra 6.18 — Linux-libre 6.18-gnu, očiščeno od elementov vdelanih programov in draiverjev, ki vsebujejo nesvobodne komponente ali delčke kode, katerih področje uporabe je omejeno s strani proizvajalca. V izdaji 6.18 je bil posodobljen koda čiščenja blobov v draiverjih Nova-Core, Intel XE, TI PRUeth, Lantiq GSWIP, Marvell WiFi-Ex. Opravljena je bila tudi čistka imen blobov v dts-datotekah (devicetree) za ARM čipe Qualcomm, Mediatek in TI ARM64. Neutrializirana je bila nalaganje blobov v novih draiverjih FourSemi fs2104/5s, TI TAS2783 in Qualcomm GENI.

Izvor: opennet.ru

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster