Po dveh mesecih razvoja je Linus Torvalds predstavil izdajo jedra Linux 5.14. Med najbolj opaznimi spremembami so novi sistemski klici quotactl_fd() in memfd_secret(), odstranitev gonilnikov ide in raw, novi kontroler prioritet vnosa/izvoda za cgroup, način načrtovanja nalog SCHED_CORE in infrastruktura za izdelavo zagonskih nalog verificiranih BPF programov.
V novo različico je bilo sprejetih 15883 popravkov od 2002 razvijalcev, velikost popravka pa je 69 MB (spremembe so zajele 12580 datotek, dodanih je bilo 861501 vrstic kode, odstranjeno pa 321654 vrstic). Približno 47% vseh predstavljenih sprememb v 5.14 se nanaša na gonilnike naprav, približno 14% sprememb zadeva posodobitev kode, specifične za strojno arhitekturo, 13% pa je povezanih s omrežnim skladom, 3% s datotečnimi sistemi in 3% z notranjimi podsystemi jedra.
Glavne novosti:
- Дисковая подсистема, ввод/вывод и файловые системы
- Za cgroup je bil realiziran novi kontroler prioritetizacije vnosa/izvoda — rq-qos, ki lahko upravlja s prednostjo obdelave zahtevkov do blokovnih naprav, ki jih generirajo udeleženci vsake cgroup. Podpora za novi prioritetni kontroler je bila dodana v načrtovalnik vnosa/izvoda mq-deadline.
- V datotečnem sistemu ext4 je bila реализирана nova ioctl-ukaz EXT4_IOC_CHECKPOINT, ki prisilno zaključi vse čakajoče transakcije iz dnevnika in povezane predpomnilnike ter ponovno zapiše območje, ki ga uporablja dnevnik, v shrambo. Sprememba je bila pripravljena v okviru pobude za preprečevanje puščanja informacij iz datotečnih sistemov.
- V Btrfs so bile uvedene optimizacije delovanja: z izjemo odvečnega dnevnikovanja razširjenih atributov med izvajanjem fsync se je zmogljivost intenzivnih operacij z razširjenimi atributi povečala do 17%. Poleg tega je ob izvajanju operacij ukinjanja, ki ne vplivajo na ekstente, onemogočeno izvajanje polne sinhronizacije, kar je skrajšalo čas izvajanja operacije za 12%. V sysfs je bila dodana nastavitev za omejitev prepustnosti vnosa/izvoda pri preverjanju FS. Dodani so bili ioctl-klici za preklic operacij spremembe velikosti in odstranjevanja naprave.
- V XFS je bila predelava implementacije predpomnilniške predpomnilnika, ki je bila preusmerjena na dodeljevanje pomnilniških strani v paketu. Povečana je bila učinkovitost delovanja predpomnilnika.
- V F2FS je bila dodana možnost delovanja v načinu samo za branje in uvedena je bila funkcija predpomnjenja stisnjenih blokov (compress_cache) za povečanje zmogljivosti naključnega branja. Uvedena je podpora za stiskanje datotek, odraženih v pomnilnik s pomočjo operacije mmap(). Za selektivno onemogočanje stiskanja datotek po maski je bila predlagana nova možnost priponke nocompress.
- V gonilniku exFAT so bili opravljeni izboljšave za večjo združljivost s pomnilniki nekaterih digitalnih kamer.
- Dodana je sistemska klica quotactl_fd(), ki omogoča upravljanje kvot ne preko datoteke posebne naprave, ampak preko navedbe deskriptorja datoteka, povezanega s datotečnim sistemom, za katerega se uporablja kvota.
- Iz jedra so bili odstranjeni stari gonilniki za blokovne naprave z vmesnikom IDE, ki jih je že dolgo nadomestila podskupina libata.
- Iz jedra je bil odstranjen gonilnik „raw“, ki nudi nepredpomnjen dostop do blokovnih naprav preko vmesnika /dev/raw. Omenjena funkcionalnost se že dolgo izvaja v aplikacijah s pomočjo zastavice O_DIRECT.
- Pomnilnik in sistemske storitve
- V načrtovalniku opravil je posamezna nova vrsta načrtovanja SCHED_CORE, ki omogoča upravljanje s tem, kateri procesi lahko delujejo skupaj na eni CPU jedru. Vsakemu procesu je lahko dodeljen cookie-identifikator, ki opredeljuje območje zaupanja med procesi (na primer pripadnost enemu uporabniku ali vsebniku). Pri organizaciji izvajanja kode lahko načrtovalnik omogoči skupno rabo ene CPU jedra le za procese, povezane z enim lastnikom, kar se lahko uporabi za blokiranje nekaterih napadov iz razreda Spectre z preprečevanjem izvajanja v eni niti SMT (Hyper Threading) zaupanja vrednih in nezaupanja vrednih nalog.
- Za cgroup je bila uvedena podpora za operacijo kill, ki omogoča skupinsko končanje vseh procesov, povezanih s skupino (pošiljanje SIGKILL), z zapisom „1“ v virtualno datoteko cgroup.kill.
- Rasprošene su mogućnosti vezane za reakciju na otkrivanje razdvojenih zaključavanja („split lock“) koja se javljaju prilikom pristupa neporavnatim podacima u memoriji zbog toga što prilikom izvršavanja atomske instrukcije podaci prelaze preko dve linije CPU keša. Ovakva zaključavanja dovode do značajnog pada performansi, zbog čega je ranije postojala mogućnost prisilnog završavanja aplikacije koja je izazivala zaključavanje. U novom izdanju dodat je parametar komandne linije jezgra „split_lock_detect=ratelimit:N“, koji omogućava određivanje opšteg sistemskog limita intenziteta operacija zaključavanja u sekundi, nakon čega će svaki proces koji postane izvor razdvojenog zaključavanja umesto završetka biti prisilno zaustavljen na 20 ms.
- U cgroup kontroleru propusnosti CFS (CFS bandwidth controller), koji definiše koliko procesorskog vremena može da se dodeli svakoj cgroup, implementirana je mogućnost postavljanja limita ograničenih zadatim vremenom trajanja, što omogućava bolje regulisanje opterećenja osetljivih na kašnjenje. Na primer, postavljanje vrednosti cpu.cfs_quota_us na 50000 i cpu.cfs_period_us na 100000 omogućiće grupi procesa da troši 50 ms CPU vremena svakih 100 ms.
- Dodata je inicijalna infrastruktura za kreiranje učitavača BPF programa, koja će u budućnosti omogućiti učitavanje samo BPF programa potpisanih pouzdanim digitalnim ključem.
- Dodana je nova futex operacija FUTEX_LOCK_PI2, koja koristi monoton timer za izračunavanje vremenskog ograničenja koje uzima u obzir vreme provedeno u hibernaciji.
- Za RISC-V arhitekturu implementirana je podrška za velike stranice memorije (Transparent Huge-Pages) i mogućnost primene mehanizma KFENCE za otkrivanje grešaka u radu sa memorijom.
- В системный вызов madvise() добавлены флаги MADV_POPULATE_READ и MADV_POPULATE_WRITE, которые обеспечивают генерацию «page fault» для всех страниц памяти, используемых для операций чтения или записи, без фактического выполнения чтения или записи (prefault). Эти флаги могут помочь снизить задержки в работе программы, позволяя заранее выполнять обработчик «page fault» для всех невыделенных страниц, не дожидаясь фактического обращения к ним.
- В системе юнит-тестирования kunit добавлена поддержка запуска тестов в окружении QEMU.
- Добавлены новые трассировщики: «osnoise» для отслеживания задержек в приложениях, связанных с обработкой прерываний, и «timerlat» для предоставления детальной информации о задержках при пробуждениях по сигналу таймера.
- Virtualizacija in varnost
- Добавлен системный вызов memfd_secret(), который позволяет создать приватную область памяти в изолированном адресном пространстве, видимую только процессу-владельцу, не отражаемую в других процессах и недоступную непосредственно для ядра.
- В системе фильтрации системных вызовов seccomp при выносе обработчиков блокировки в пользовательское пространство реализована возможность использования одной атомарной операции для создания файлового дескриптора для изолируемой задачи и его возвращения при обработке системного вызова. Эта операция решает проблему с прерыванием обработчика в пользовательском пространстве при получении сигнала.
- Добавлено новое средство управления ограничением ресурсов в пространстве имён идентификаторов пользователей, которое привязывает отдельные счётчики rlimit к пользователю в «user namespace». Это изменение решает проблему применения общих счётчиков ресурсов при запуске одним пользователем процессов в разных контейнерах.
- V hipervizor KVM Для систем ARM64 добавлена возможность использовать в гостевых системах расширение MTE (MemTag, Memory Tagging Extension), которое позволяет привязывать теги к каждой операции выделения памяти и организовать проверку корректности использования указателей для предотвращения эксплуатации уязвимостей, вызванных обращением к уже освобождённым блокам памяти, переполнением буфера, обращениями до инициализации и использованием вне текущего контекста.
- Sredstva za autentikaciju pokazivača (Pointer Authentication) koja pruža platforma ARM64 sada se mogu zasebno konfigurirati za jezgru i prostor korisnika. Tehnologija omogućava korištenje specijaliziranih ARM64 instrukcija za provjeru adresa povratka pomoću digitalnih potpisanih koji se pohranjuju u neiskorištenim gornjim bitovima samog pokazivača.
- U User-mode Linux dodana je podrška za korištenje drajvera za PCI uređaje s virtualnom PCI magistralom koja se implementira putem PCI-over-virtio drajvera.
- Za x86 sisteme dodana je podrška za para-virtualizirani uređaj virtio-iommu, koji omogućava slanje IOMMU zahtjeva, kao što su ATTACH, DETACH, MAP i UNMAP, preko virtio transporta bez emulacije tabela stranica memorije.
- Za Intel CPU, počevši od Skylake porodice pa sve do Coffee Lake, prema zadanim postavkama onemogućena je upotreba Intel TSX (Transactional Synchronization Extensions) ekstenzija, koje pružaju sredstva za povećanje performansi višedretvenih aplikacija putem dinamičkog izuzeća suvišnih operacija sinkronizacije. Ekstenzije su onemogućene zbog mogućnosti izvršenja Zombieload napada, koji manipulira curenjem informacija kroz sporedne kanale, nastalim tokom rada mehanizma asinkronih prekida operacija (TAA, TSX Asynchronous Abort).
- Mrežna podsistem
- Nadaljuje se integracija razširitve protokola MPTCP (MultiPath TCP) v jedro, ki omogoča delovanje TCP povezave, pri čemer se paketi dostavljajo hkrati po več poteh prek različnih omrežnih vmesnikov, povezanih z različnimi. IP-naslovovU novom izdanju dodat je mehanizam za postavljanje vlastitih politika heširanja prometa za IPv4 i IPv6 (multipath hash policy), koji omogućuju iz korisničkog prostora određivanje koja će se polja u paketima, uključujući uvrštene, koristiti prilikom izračunavanja heša, koji osigurava izbor puta za paket.
- U virtio transport dodana je podrška za SOCK_SEQPACKET sokete (uredujenih i pouzdanih prijenosa datagrama).
- Proširene su mogućnosti mehanizma soketa SO_REUSEPORT, koji omogućava više slušnih soketa da se povežu na jedan port za primanje veza s raspodjelom dolaznih zahtjeva između svih povezanih soketa putem SO_REUSEPORT, što olakšava stvaranje višedretvenih poslužiteljskih aplikacija. U novoj verziji dodana su sredstva za prijenos kontrole drugom soketu u slučaju neuspjeha pri obradi zahtjeva od strane izvorno odabranog soketa (rješava problem gubitka pojedinih veza prilikom ponovnog pokretanja servisa).
- Oprema
- V driverju amdgpu je implementirana podpora za nove serije GPU AMD Radeon RX 6000, ki se razvijajo pod kodnimi imeni «Beige Goby» (Navi 24) in «Yellow Carp», ter izboljšana podpora za GPU Aldebaran (gfx90a) in APU Van Gogh. Dodana je možnost sočasnega delovanja z več eDP paneli. Za APU Renoir je bila implementirana podpora za delo s šifriranimi vpisi v video pomnilniku (TMZ, Trusted Memory Zone). Dodana je podpora za vroče izklapljanje grafičnih kartic. Za GPU Radeon RX 6000 (Navi 2x) in stare GPU AMD je privzeto omogočena podpora za mehanizem varčevanja z energijo ASPM (Active State Power Management), ki je bil prej omogočen le za GPU Navi 1x, Vega in Polaris.
- Za čipe AMD je dodana podpora za deljeno virtualno pomnilnik (SVM, shared virtual memory) na osnovi podsistema HMM (Heterogeneous memory management), ki omogoča uporabo naprav s svojimi enotami za upravljanje pomnilnika (MMU, memory management unit), ki lahko dostopajo do glavnega pomnilnika. Med drugim je s pomočjo HMM mogoče organizirati skupni naslovni prostor med GPU in CPU, kjer GPU lahko dostopa do glavnega pomnilnika procesa.
- Dodana je začetna podpora za tehnologijo AMD Smart Shift, ki dinamično spreminja parametre porabe energije CPU in GPU v prenosnikih s čipovjem in grafično kartico AMD, da se izboljša zmogljivost pri igranju iger, video urejanju in 3D upodabljanju.
- V driverju i915 za grafične kartice Intel je vključena podpora za čipe Intel Alderlake P.
- Dodane so gonilnike drm/hyperv za virtualni grafični adapter Hyper-V.
- Dodana je podpora za računalnik enega kosa Raspberry Pi 400.
- Dodana je gonilnik dell-wmi-privacy za podporo strojnih stikal kamer in mikrofonov, ki so vključena v prenosnike Dell.
- Za prenosnike Lenovo je dodan WMI vmesnik za spreminjanje nastavitev BIOS preko sysfs /sys/class/firmware-attributes/.
- Podpora za naprave z vmesnikom USB4 je razširjena.
- Dodana je podpora za zvočne kartice in kodeke AmLogic SM1 TOACODEC, Intel AlderLake-M, NXP i.MX8, NXP TFA1, TDF9897, Rockchip RK817, Qualcomm Quinary MI2 in Texas Instruments TAS2505. Izboljšana je podpora za zvok v prenosnikih HP in ASUS. Dodane so popravke za zmanjšanje zakasnitve pred začetkom predvajanja zvoka na napravah z vmesnikom USB.
Izvor: opennet.ru
