Pēc divu mēnešu izstrādes Linuss Torvalds prezentēja Linux 5.16 kodola izlaišanu. Starp visredzamākajām izmaiņām ir sistēmas izsaukuma futex_waitv, kas uzlabo Windows spēļu veiktspēju Wine, kļūdu izsekošana failu sistēmā caur fanotify, foliantus koncepcija atmiņas pārvaldībā, AMX procesoru instrukcijas atbalsts, iespēja rezervēt atmiņu tīkla soketiem, atbalsts netfilter pakotņu klasifikācijai
Jaunajā versijā ir iekļauti 15415 labojumi no 2105 izstrādātājiem, plāksnes izmērs ir 45 MB (izmaiņas skārušas 12023 failus, pievienotas 685198 koda rindas, noņemtas 263867 rindas). Apmēram 44% no visām izmaiņām 5.16 ir saistītas ar ierīču draiveriem, aptuveni 16% izmaiņu attiecas uz kodu, kas specifisks aparatūras arhitektūrām, 16% ir saistīts ar tīkla steku, 4% - ar failu sistēmām un 4% - ar kodola iekšējām apakšsistēmām.
Galvenās jaunās funkcijas kodolā 5.16:
- Disku apakšsistēma, I/O un failu sistēmas
- Fanotify mehānismā ir pievienoti rīki, lai uzraudzītu failu sistēmas stāvokli un izsekotu kļūdu rašanos. Informācija par kļūdām tiek nodota, izmantojot jauna veida notikumus — FAN_FS_ERROR, kurus var pārņemt lietotāju telpā izpildes uzraudzības sistēmas, lai operatīvi informētu administratoru vai uzsāktu atkopšanas procesus. Kaskādiskā kļūdu rašanās gadījumā fanotify nodrošina ziņojuma par pirmo kļūdu piegādi kopā ar kopējo problēmu skaitītāju, lai vienkāršotu turpmāko kļūmes cēloņu izpēti. Atbalsts kļūdu izsekošanai pagaidām ir īstenots tikai Ext4 failu sistēmai.
- Uzlabota pārslodzes apstrāde rakstīšanas operāciju izpildē (write congestion), kas rodas, kad rakstīšanas operāciju apjoms pārsniedz krātuves caurlaidspēju un sistēma ir spiesta bloķēt rakstīšanas procesu pieprasījumus līdz jau aizsūtīto pieprasījumu izpildei. Jaunajā versijā pilnībā pārstrādāts kodola mehānisms, kas tiek izmantots, lai iegūtu informāciju par pārslodzes rašanos un uzdevumu bloķēšanu, jo iepriekšējā realizācijā novērotas problēmas ar rakstīšanas pārslodzes apstrādes saskaņošanu ar atmiņas lapu izsistīšanu apmaiņas nodaļā, kad sistēmā trūka atmiņas.
- Btrfs ir ieviesta ierīču zonēšanas tehnoloģijas (Zoned Namespace) atbalsts, kas tiek izmantots cietajos diskos vai NVMe SSD, lai sadalītu uzglabāšanas telpu zonās, kas veido grupas bloku vai sektoru, kuros ir atļauta tikai secīga datu pievienošana ar visiem grupas blokiem atjauninātu. Turklāt veiktas nelielas optimizācijas inode žurnāla logēšanā, kas ļāva palielināt caurlaidspēju dbench testā par 3% un samazināt aizturi par 11%. Pārstrādāta katalogu logēšanas mehānika, kurā efektivitātes uzlabošanai samazināts meklēšanas un bloķēšanas operāciju skaits kokā. Paātrināta elementu ievietošana btree struktūrā partijas režīmā (masveida elementu ievietošanas laiks samazinājies par 4%, savukārt dzēšanas – par 12%). Ievesta ierobežota atbalsta iespēja izmantot kompresiju nepilnu lapu rakstīšanas laikā, kā arī iespēja defragmentēt apakšlapas (subpage). Veikta sagatavošanās otrās versijas protokola atbalsta iekļaušanai komandai “send”.
- Failu sistēmā XFS samazināta atmiņas patēriņš, izmantojot atsevišķas slab kešus bieži izmantotiem elementiem un samazinot dažādus datu struktūras.
- Failu sistēmā Ext4 atzīmēti tikai kļūdu labojumi un precīzāka parametru aprēķināšana atlikušās inode tabulas inicializācijas gadījumā.
- Bloku ierīču līmenī ieviestas optimizācijas, kas būtiski uzlabo operāciju piesaisti CPU kodoliem.
- Ievesta sākotnējā atbalsta iespēja cietajiem diskiem ar vairākiem neatkarīgiem piedziņām (multi-actuator), kas sniedz iespēju vienlaikus piekļūt vairākiem sektoriem dažādās magnētiskās plāksnes zonās.
- Pievienota jauna ioctl komanda CDROM_TIMED_MEDIA_CHANGE, lai noteiktu notikumus, kas saistīti ar datu nesēju maiņu optiskajos diskos.
- EROFS (Uzlabotā tikai lasāmā failu sistēma) failu sistēmā pievienota iespēja strādāt virs vairākiem glabāšanas ierīcēm. Dažādas ierīces var būt atspoguļotas vienā 32 bitu bloku adreses telpā. Pievienota arī atbalsta saspiešanai, izmantojot LZMA algoritmu.
- F2FS failu sistēmā pievienotas montēšanas opcijas, lai kontrolētu failu fragmentāciju, tos novietojot glabāšanā (piemēram, optimizētas darbu ar fragmentētiem glabāšanas risinājumiem labojumu nolūkos).
- Ceph pēc noklusējuma iekļauj katalogu izveides un dzēšanas operācijas asinkronajā režīmā (lai atjaunotu iepriekšējo uzvedību, montējot, jāizmanto karogs '-o wsync'). Pievienots metriku uzskaite, kas seko ārējo objektu kopēšanas operācijām.
- CIFS pievienots montēšanas parametrs tcpnodelay, kurā tīkla soketam tiek iestatīts režīms tcp_sock_set_nodelay, izslēdzot gaidīšanu, lai aizpildītu rindu TCP kaudzes. Pievienots arī atbalsts iegultajiem DFS Link (Distribuētā failu sistēma) pie montēšanas.
- Pievienots atbalsts blokierīces pieprasījumu pabeigšanai partijas režīmā. Izmaiņu testēšana parādīja, ka nejaušu lasīšanas operāciju intensitāte Optane glabāšanas ierīcēs palielinājās no 6.1 līdz 6.6 milj. IOPS uz vienu CPU kodolu.
- Atmiņa un sistēmas pakalpojumi
- Pievienots jauns sistēmas zvans futex_waitv, kas ļauj sekot vairāku fjučeru stāvoklim, izmantojot vienu sistēmas zvanu. Šī funkcionalitāte atgādina Windows pieejamo funkcionalitāti WaitForMultipleObjects, kuras emulācija ar futex_waitv var būt noderīga Windows spēļu veiktspējas uzlabošanai, kuras tiek palaistas Wine vai Proton vidē. Turklāt vienlaicīga fjučeru gaidīšana var tikt izmantota, lai optimizētu native Linux spēļu būvju veiktspēju.
- Ir īstenota page folios koncepcija, kuras izmantošana dažās kodola apakšsistēmās ļaus paātrināt atmiņas pārvaldību tipiskās slodzes gadījumos. Šobrīd galvenā atmiņas pārvaldības apakšsistēma kodolā un lappušu kešatmiņas realizācija jau ir pārgājusi uz folijām, un nākotnē ir plānots pāriet arī uz failu sistēmām. Nākotnē kodolā arī plānots pievienot atbalstu vairāku lappušu folijām.
Folijas atgādina apvienotās atmiņas lapas, taču atšķiras ar uzlabotu semantiku un skaidrāku darbības organizāciju. Lai pārvaldītu sistēmas atmiņu, pieejamā RAM tiek sadalīta atmiņas lapās, kuru izmērs ir atkarīgs no arhitektūras, bet x86 sistēmās tiek aprēķināts kilobaitos (parasti 4096 baitus). Mūsdienu sistēmas ir aprīkotas ar desmitiem gigabaitu RAM, kas sarežģī atmiņas pārvaldību, jo ir nepieciešams apstrādāt milzīgu lapu skaitu. Lai samazinātu lappušu skaitu, agrāk kodolā tika ieviesta apvienoto lapu koncepcija ar struktūrām, kas aptver vairāk nekā vienu fizisko atmiņas lapu. Tomēr API manevrēšanai ar apvienotajām atmiņas lapām atstāja daudz vēlams un radīja papildu izmaksas.
- Uzdevumu plānotājam pievienots apstrādātājs, kas ņem vērā CPU kešatmiņas klasterizāciju. Dažos procesoros, piemēram, Kunpeng 920 (ARM) un Intel Jacobsville (x86), noteikts skaits CPU kodolu, parasti 4, var apvienot L3 vai L2 kešu. Šādu topoloģiju ņemšana vērā var ievērojami palielināt uzdevumu izplatīšanas efektivitāti CPU kodolos uzdevumu plānotājā, jo uzdevumu pārvietošana vienā CPU klasterī ļauj palielināt piekļuves atmiņai caurlaidību un samazināt konkurenci kešatmiņā.
- Pievienots AMX (Advanced Matrix Extensions) instrukciju atbalsts, kas tiks ieviests gaidāmajos Intel Xeon Scalable serveru procesoros, kuru kods nosaukums ir Sapphire Rapids. AMX piedāvā jaunus pielāgojamus TMM «TILE» reģistrus un instrukcijas datu manipulācijai šajos reģistros, piemēram, TMUL (Tile matrix MULtiply) matricas reizināšanai.
- Ir īstenotas vairākas jaunas iespējas, pamatojoties uz iepriekšējā laidiena pievienoto DAMON (Data Access MONitor) apakšsistēmu, kas ļauj izsekot piekļuvi datiem operatīvajā atmiņā, saistībā ar izvēlēto procesu, kas darbojas lietotāja telpā. Piemēram, apakšsistēma sniedz iespēju analizēt, uz kādām tieši atmiņas jomām process ir vērsies visu savu darbības laiku un kādas atmiņas jomas palikušas neizmantotas.
- DAMON_RECLAIM, lai identificētu un izsistītu atmiņas jomas, kurām nav bijusi piekļuve. Mehānismu var izmantot, lai proaktīvi maigi izsistu atmiņas lapas, tuvojas brīvas atmiņas izsīkšanai.
- DAMOS (Data Access Monitoring-based Operation Schemes) paredzētas konkrētu madvise() operāciju piemērošanai, piemēram, pārmērīgas brīvas atmiņas atbrīvošanai uz procesu atmiņas jomām, kurām tiek fiksēta noteikta piekļuves biežums. DAMOS parametru konfigurēšana tiek veikta, izmantojot debugfs.
- Fiziskā atmiņas adresācijas telpas monitoringa iespēja (agrāk tika uzraudzīti tikai virtuālie adresi).
- Zstd kompresijas algoritma īstenojums ir atjaunināts līdz versijai 1.4.10, kas ļāva ievērojami paaugstināt dažādu kodola apakšsistēmu veiktspēju, kurās tiek izmantota kompresija (piemēram, kodola attēla izsaiņošana paātrināta par 35%, kompresēto datu izsaiņošana Btrfs un SquashFS palielinājās par 15%, bet ZRAM — par 30%). Sākotnēji kodolā tika izmantota atsevišķa zstd īstenošana, kas balstīta uz versiju 1.3.1, kas tika izdota pirms vairāk nekā trim gadiem un neietver daudzas svarīgas optimizācijas. Papildus pārejai uz aktuālo versiju pievienotā plākstere arī vienkāršo synchronizāciju ar upstream zstd zaru, ļaujot ģenerēt kodu iekļaušanai kodolā tieši no galvenā zstd repozitorija. Nākotnē zstd kods kodolā tiks atjaunināts, kā izejas jaunas bibliotēkas zstd versijas.
- Ir ievadīta liela uzlabojumu porcija eBPF apakšsistēmā. Nepieciešama iespēja izsaukt no BPF programmām kodola moduļu funkcijas. Realizēta funkcija bpf_trace_vprintk(), atšķirībā no bpf_trace_printk(), kas ļauj izvadīt vairāk nekā trīs argumentus kopā. Pievienota jauna datu struktūras (BPF map) bloom filter, kas ļauj izmantot vienādu nosaukumu izlases datu struktūru elementa klātbūtnes noteikšanai kopumā. Pievienots jauns atribūts BTF_KIND_TAG, kas var tikt lietots BPF programmās, lai saistītu tagus ar funkciju parametriem, piemēram, lai vienkāršotu kļūdu noteikšanu lietotāju programmās. Libbpf atļauts izveidot savas sekcijas .rodata.* .data.*, ieviesta atbalsts uprobe un kprobe izsekošanas notikumiem, pievienots API, lai kopētu visus BTF veidus no viena objekta uz citu. Atbalsts AF_XDP ir pārcelts no libbpf uz atsevišķu bibliotēku libxdp. MIPS arhitektūrai ir izstrādāts JIT kompilators BPF virtuālajai mašīnai.
- ARM64 arhitektūrai ir ieviests atbalsts ARMv8.6 paplašinājumiem taimeram, tostarp ļaujot nodrošināt pašsinhronizāciju sistēmas reģistru attēlojumā bez ISB instrukciju izmantošanas.
- PA-RISC arhitektūrai ir ieviesta KFENCE mehānisma lietošana, lai noteiktu kļūdas atmiņas operācijās, kā arī pievienots atbalsts KCSAN sacensību stāvokļu detektoram.
- Ir nodrošināta piekļuves tiesību konfigurācija tracefs līmenī atsevišķiem lietotājiem un grupām, piemēram, tagad var atļaut piekļuvi izsekošanas līdzekļiem tikai konkrētās grupas dalībniekiem.
- Virtualizācija un drošība
- io_uring un device-mapper apakšsistēmās ir ieviests atbalsts auditēšanas notikumu ģenerēšanai. io_uring nodrošina piekļuves pārvaldību, izmantojot LSM moduļus. Pievienota iespēja auditēt sistēmas izsaukumu openat2().
- Koda kodolā pilnībā izslēgti nepārtraukti izteiksmes gadījumi switch (bez return vai break pēc katra case bloka). Tagad kodola būvē varēs izmantot režīmu „-Wimplicit-fallthrough”.
- Tiek iekļauti grozījumi stingru robežu pārbaudes pastiprināšanai memcpy() funkcijas izpildē.
- Asinhronā ievades/izvades io_uring interfeisā ir ieviesta iespēja piemērot drošības politikas ievades/izvades operācijām, ko nosaka SELinux un Smack moduļi.
- IMA (Integrity Measurement Architecture) apakšsistēmā, kas ļauj ārējai pakalpojumu sistēmai pārbaudīt kodola apakšsistēmu stāvokli, lai pārliecinātos par to autentiskumu, ir ieviesta iespēja piemērot noteikumus, pamatojoties uz grupas identifikatoru (GID), pie kā pieder fails vai kurā ietilpst lietotājs, kurš piekļūst failam.
- Noklusējumā ir atslēgti daži paplašinātie aizsardzības mehānismi seccomp(), kas paredzēti aizsardzībai pret Spectre klases uzbrukumiem, jo tie tika uzskatīti par pārmērīgiem un būtiski nepazemināja drošību, taču negatīvi ietekmēja veiktspēju. Tika pārskatīta Retpoline aizsardzības izmantošana.
- Tika izņemta cryptoloop mehānisma īstenošana, kas 2004. gadā tika aizvietota ar dm-crypt un pēc nepieciešamības atbalsta tos pašus algoritmus.
- Noklusējumā ir aizliegta nepārvalstītas piekļuves sniegšana eBPF apakšsistēmai. Izmaiņas veiktas, lai novērstu BPF programmu izmantošanu, lai apietu aizsardzību pret blakus kanālu uzbrukumiem. Pēc vajadzības administrators var atjaunot eBPF izmantošanu nepārvalstītiem lietotājiem.
- ACRN hipervizors, kas paredzēts reāllaika uzdevumu izpildei un izmantošanai kritiskās sistēmās, ir pievienojusi atbalstu virtuālo ierīču izveidei/izdzēšanai un MMIO ierīču pārliešanai.
- Kriptovadītājā ir pievienots KPP (Key-agreement Protocol Primitives) definīciju atbalsts, kas vienkāršo kriptosistēmu draiveru izstrādes loģiku.
- Hyper-V hipervizoram ir ieviests izolācijas režīms virtuālo mašīnu, kas paredz atmiņas satura šifrēšanu.
- Hipervizorā KVM ir pievienots RISC-V arhitektūras atbalsts. Ir ieviesta iespēja migrēt virtuālās mašīnas, kas izmanto AMD SEV un SEV-ES paplašinājumus, within host environment. Papildināts API live migrācijai viesu sistēmām, kas tiek šifrētas ar AMD SEV (Secure Encrypted Virtualization).
- PowerPC arhitektūrā noklusējumā ir ieslēgts STRICT_KERNEL_RWX režīms, kas bloķē atmiņas lapu izmantošanu, kas vienlaikus ir pieejamas rakstīšanai un izpildei.
- 32 bitu x86 sistēmās ir pārtraukta atmiņas karstās pievienošanas (Memory hotplug) atbalsts, kas vairāk nekā gadu bija neaktīvs.
- No kodola ir izslēgta bibliotēka liblockdep, kas tagad tiks apkalpota atsevišķi no kodola.
- Tīkla subsistēma
- Socketiem ir ieviesta jauna opcija SO_RESERVE_MEM, kas ļauj rezervēt noteiktu atmiņas apjomu, kas vienmēr būs pieejams soketiem un netiks izņemts. Šīs opcijas izmantošana ļauj palielināt veiktspēju, samazinot tīkla steka atmiņas piešķiršanas un atgriešanas operācijas, īpaši gadījumos, kad sistēmā trūkst atmiņas.
- Pievienota atbalsta plāksne automātiskajam multicast satiksmes tunelējumam (Automatic Multicast Tunneling, RFC 7450), kas ļauj piegādāt multicast satiksmi no tīkliem, kuros ir pieejams Multicast, saņēmējiem tīkliem bez Multicast. Protokols darbojas, iepakojot paketēs UDP.
- Uzlabota IOAM (In-situ Operations, Administration, and Maintenance) datu iepakošana tranzīta paketēs.
- Ethetool netlink API ir ieviesta iespēja pārvaldīt strāvas patēriņa režīmus uztvērēju un raidītāju.
- Netfilter apakšsistēmā ieviesta paketi klasifikācijas iespēja egress līmenī, proti, kad draiveris saņem paketi no kodola tīkla steka. Nftables atbalsts attiecīgajiem filtriem parādījās versijā 1.0.1. Netfilter pievienota iespēja salīdzināt un mainīt iekšējās galvenes un datus UDP un TCP (iekšējā galvene / slodze), kas iet uz transporta galvenes.
- Tika pievienoti jauni sysctl parametri arp_evict_nocarrier un ndisc_evict_nocarrier, kuru iestatīšanas gadījumā ARP kešatmiņa un ndisc (neighbor discovery) tabula tiks notīrīta saiknes pārtraukuma (NOCARRIER) gadījumā.
- Tīkla rindas pārvaldības mehānismā fq_codel (Controlled Delay) pievienoti režīmi Low Latency, Low Loss un Scalable Throughput (L4S).
- Aprīkojums
- Draiverī amdgpu ir ieviests sākotnējais atbalsts DP 2.0 (DisplayPort 2.0) specifikācijai un DisplayPort tunelēšanai caur USB4. APU Cyan Skillfish (aprīkots ar GPU Navi 1x) ir pievienots displeja kontrolieru atbalsts. Paplašināts atbalsts APU Yellow Carp (mobilie Ryzen 6000 «Rembrandt» procesori).
- Draiverī i915 ir stabilizēts Intel Alderlake S čipu atbalsts un ieviests Intel PXP (Protected Xe Path) tehnoloģijas atbalsts, kas ļauj organizēt aparatūras aizsargātu grafisko sesiju uz sistēmām ar Intel Xe čipiem.
- Draiverī nouveau ir veikti kļūdu labojumi un uzlabota koda stila noformēšana.
- Pievienota atbalsts x86 saderīgiem CPU Vortex (Vortex86MX). Linux uz šādiem procesoriem jau iepriekš darbojās, taču skaidra šo CPU identificēšana bija nepieciešama, lai atslēgtu aizsardzību pret Spectre/Meltdown uzbrukumiem, kas nav attiecināmi uz šiem čipiem.
- Pievienots sākotnējais atbalsts x86 platformām Surface Pro 8 un Surface Laptop Studio.
- Pievienots draiveris atbalstam skaņas čipiem, kas tiek izmantoti APU AMD Yellow Carp, Van Gogh, kā arī pievienots atbalsts skaņas sistēmām un kodekiem Cirrus CS35L41, Maxim MAX98520/MAX98360A, Mediatek MT8195, Nuvoton NAU8821, NVIDIA Tegra210, NXP i.MX8ULP, Qualcomm AudioReach, Realtek ALC5682I-VS, RT5682S, RT9120, Rockchip RV1126 un RK3568.
- Pievienots draiveris ishtp_eclite piekļuvei Intel PSE (Programmable Service Engine) iebūvētajiem kontrolieriem, izmantojot ISHTP (Integratd Sensor Hub Transport Protocol) protokolu, piemēram, lai iegūtu informāciju par akumulatoru, temperatūru un datiem, kas saistīti ar UCSI (USB Type-C Connector System Software Interface).
- Pievienots draiveris Nintendo Switch spēļu kontrolieriem, kas atbalsta Switch Pro un Joy-Cons ierīces. Pievienots atbalsts Wacom Intuos BT planšetdatoriem (CTL-4100WL/CTL-6100WL) un Apple 2021 Magic Keyboard tastatūrai. Uzlabots atbalsts Sony PlayStation DualSense kontrolieriem. Pievienots atbalsts Xiaomi Mi peles sānu pogām.
- Pievienots draiveris RT89 ar atbalstu bezvadu čipiem Realtek 802.11ax, kā arī draiveri Ethernet adapteriem Asix AX88796C-SPI un Realtek RTL8365MB-VC slēdžiem.
- Apple M1 čipiem pievienoti draiveri PCI un PASemi i2c.
- Pievienots atbalsts ARM SoC, ierīcēm un Raspberry Pi Compute Module 4, Fairphone 4, Snapdragon 690, LG G Watch R, Sony Xperia 10 III, Samsung Galaxy S4 Mini Value Edition, Xiaomi MSM8996 (Mi 5, Mi Note 2, Mi 5s, Mi Mix, Mi 5s Plus un Xiaomi Mi 5), Sony Yoshino (Sony Xperia XZ1 un Sony Xperia XZ Premium), F(x)tec Pro1 QX1000, Microchip LAN966, CalAmp LMU5000, Exegin Q5xR5, sama7g5, Samsung ExynosAutov9, Rockchip RK3566, RK3399 ROCK Pi 4A+, RK3399 ROCK Pi 4B+, Firefly ROC-RK3328-PC, Firefly ROC-RK3399-PC-PLUS, ASUS Chromebook Tablet CT100, Pine64 Quartz64-A, Netgear GS110EMX, Globalscale MOCHAbin 7040, NXP S32G2, Renesas R8A779M*, Xilinx Kria, Radxa Zero, JetHub D1/H1, Netronix E70K02.
Avots: opennet.lv
