Llançament del nucli Linux 5.16

Després de dos mesos de desenvolupament, Linus Torvalds va presentar el llançament del nucli Linux 5.16. Entre els canvis més destacats: la crida al sistema futex_waitv per millorar el rendiment dels jocs de Windows a Wine, el seguiment d'errors al FS a través de fanotify, el concepte de folis en el sistema de gestió de memòria, suport per a instruccions del processador AMX, la possibilitat de reservar memòria per endolls de xarxa, suport per a la classificació de paquets en l'etapa de "sortida" de netfilter, utilitzant el subsistema DAMON per desallotjar de manera proactiva les àrees de memòria no utilitzades, millorant el maneig de sobrecàrregues amb un gran volum d'operacions d'escriptura, suport per a discs durs multidisc.

La nova versió inclou 15415 correccions de 2105 desenvolupadors, la mida del pedaç és de 45 MB (els canvis van afectar 12023 fitxers, es van afegir 685198 línies de codi, es van suprimir 263867 línies). Al voltant del 44% de tots els canvis introduïts a 5.16 estan relacionats amb controladors de dispositiu, aproximadament el 16% dels canvis estan relacionats amb l'actualització de codi específic de les arquitectures de maquinari, el 16% estan relacionats amb la pila de xarxa, el 4% estan relacionats amb sistemes de fitxers i el 4% estan relacionats amb subsistemes interns del nucli.

Innovacions clau al nucli 5.16:

  • Subsistema de disc, E/S i sistemes de fitxers
    • S'han afegit eines al mecanisme de fanotify per supervisar l'estat del sistema de fitxers i fer un seguiment de l'aparició d'errors. La informació sobre errors es transmet mitjançant un nou tipus d'esdeveniments: FAN_FS_ERROR, que es pot interceptar en sistemes de monitorització que s'executen a l'espai d'usuari per informar ràpidament a l'administrador o iniciar processos de recuperació. Quan es produeixen una sèrie d'errors en cascada, fanotify assegura que es lliura el primer missatge d'error juntament amb un comptador de problemes general per simplificar l'anàlisi posterior de la causa de la fallada. Actualment, el suport de seguiment d'errors només s'implementa per al sistema de fitxers Ext4.
    • Gestió millorada de la congestió d'escriptura, que es produeix quan el volum d'operacions d'escriptura supera el rendiment de la unitat i el sistema es veu obligat a bloquejar les sol·licituds d'escriptura d'un procés fins que es completin les sol·licituds que ja s'han enviat. En la nova versió, el mecanisme del nucli utilitzat per obtenir informació sobre l'ocurrència de sobrecàrrega i bloqueig de tasques s'ha redissenyat completament, ja que a l'antiga implementació hi havia problemes per acoblar el processament de la sobrecàrrega d'escriptura amb el desplaçament de pàgines de memòria a l'intercanvi. secció quan no hi ha prou memòria al sistema.
    • Btrfs implementa suport per a la tecnologia de zonificació de dispositius (Zoned Namespace), utilitzada en discs durs o SSD NVMe per dividir l'espai d'emmagatzematge en zones, que formen grups de blocs o sectors, en els quals només es permet l'addició seqüencial de dades, actualitzant tot el grup de blocs. A més, es van fer optimitzacions menors al registre d'inodes, que van augmentar el rendiment de la prova dbench en un 3% i van reduir la latència en un 11%. S'ha redissenyat el mecanisme de registre de directoris, en el qual s'ha reduït el nombre d'operacions de cerca i bloqueig a l'arbre per augmentar l'eficiència. S'ha accelerat la inserció d'elements a l'estructura btree en mode batch (el temps per a la inserció massiva d'elements s'ha reduït un 4% i la supressió un 12%). S'ha afegit un suport limitat per utilitzar la compressió en escriure pàgines parcials, així com la capacitat de desfragmentar subpàgines. S'han fet els preparatius per habilitar el suport per a la segona versió del protocol per a l'ordre "send".
    • El sistema de fitxers XFS redueix el consum de memòria mitjançant l'ús de memòria cau de lloses separades per als elements d'ús freqüent i reduint algunes estructures de dades.
    • Al sistema de fitxers Ext4, només s'observen correccions d'errors i un càlcul més precís dels paràmetres d'inicialització mandrosa de la taula Inode.
    • S'han implementat optimitzacions a nivell de dispositiu de bloc per augmentar significativament l'eficiència d'enllaçar les operacions als nuclis de la CPU.
    • S'ha afegit suport inicial per a discs durs amb múltiples unitats independents (multi-actuador), que permet accedir simultàniament a diversos sectors en diferents zones del plat magnètic.
    • S'ha afegit una nova ordre ioctl CDROM_TIMED_MEDIA_CHANGE per detectar esdeveniments de canvi de suport en una unitat de disc òptic.
    • El sistema de fitxers EROFS (Enhanced Read-Only File System) ha afegit la possibilitat de treballar a sobre de diversos dispositius d'emmagatzematge. Es poden assignar diferents dispositius a un únic espai d'adreces de bloc de 32 bits. També s'ha afegit suport per a la compressió mitjançant l'algoritme LZMA.
    • S'han afegit opcions de muntatge al sistema de fitxers F2FS per controlar la fragmentació dels fitxers quan es col·loquen a l'emmagatzematge (per exemple, per depurar optimitzacions per treballar amb emmagatzematge fragmentat).
    • CEPH permet la creació i supressió de directoris aixíncrons de manera predeterminada (utilitza el senyalador '-o wsync' quan es munta per tornar al comportament anterior). S'ha afegit el manteniment de mètriques que fan un seguiment de les operacions de còpia d'objectes externs.
    • S'ha afegit un paràmetre de muntatge tcpnodelay a CIFS, que estableix el mode tcp_sock_set_nodelay per al sòcol de xarxa, que desactiva l'espera que la cua ompli la pila TCP. S'ha afegit suport per a enllaços DFS imbricats (sistema de fitxers distribuïts) en tornar a muntar.
    • S'ha afegit suport per completar sol·licituds a un dispositiu de bloc en mode per lots. Les proves del canvi van mostrar un augment de la intensitat de les operacions de lectura aleatòries de les unitats Optane de 6.1 a 6.6 milions d'IOPS en un sol nucli de CPU.
  • Serveis de memòria i sistema
    • S'ha afegit una nova trucada al sistema futex_waitv, que us permet supervisar l'estat de diversos futex alhora mitjançant una única trucada al sistema. Aquesta característica recorda la funcionalitat WaitForMultipleObjects disponible a Windows, l'emulació de la qual mitjançant futex_waitv pot ser útil per millorar el rendiment dels jocs de Windows que s'executen amb Wine o Proton. A més, l'espera simultània de futexes també es pot utilitzar per optimitzar el rendiment de les compilacions natives de jocs per a Linux.
    • S'ha implementat el concepte de fulls de pàgines, l'ús dels quals en alguns subsistemes del nucli accelerarà la gestió de la memòria amb càrregues de treball típiques. Actualment, el subsistema de gestió de memòria principal del nucli i la implementació de la memòria cau de pàgines ja s'han transferit als fulls, i es preveu transferir sistemes de fitxers en el futur. En el futur, també està previst afegir suport per a fulls de diverses pàgines al nucli.

      Els toms s'assemblen a pàgines compostes, però tenen una semàntica millorada i una organització més clara del treball. Per gestionar la memòria del sistema, la memòria RAM disponible es divideix en pàgines de memòria, la mida de les quals varia segons l'arquitectura, però als sistemes x86 es mesura en kilobytes (normalment 4096 bytes). Els sistemes moderns inclouen desenes de gigabytes de memòria RAM, la qual cosa fa que la gestió de la memòria sigui més complexa a causa de la necessitat de processar un gran nombre de pàgines de memòria. Per reduir el nombre de pàgines, el nucli va implementar anteriorment el concepte de pàgines compostes amb estructures que abasten més d'una pàgina física de memòria. Però l'API per manipular pàgines de memòria combinades deixava molt a desitjar i va comportar una sobrecàrrega addicional.

    • S'ha afegit un controlador al planificador de tasques que té en compte l'agrupació de memòria cau a la CPU. En alguns processadors, com ara Kunpeng 920 (ARM) i Intel Jacobsville (x86), un cert nombre de nuclis de CPU, normalment 4, poden combinar memòria cau L3 o L2. Tenir en compte aquestes topologies pot millorar significativament l'eficiència de la distribució de tasques entre nuclis de CPU al planificador de tasques, ja que moure tasques dins del mateix clúster de CPU permet augmentar el rendiment d'accés a la memòria i reduir la contenció de la memòria cau.
    • S'ha afegit suport per a les instruccions AMX (Advanced Matrix Extensions) implementades als propers processadors de servidor Intel Xeon Scalable, amb el nom en clau Sapphire Rapids. AMX ofereix nous registres configurables TMM "TILE" i instruccions per manipular dades en aquests registres, com ara TMUL (Multiplicació de matrius de rajoles) per a la multiplicació de matrius.
    • S'han implementat diverses funcions noves basades en el subsistema DAMON (Data Access MONitor) afegit a la darrera versió, que permet supervisar l'accés a les dades a la memòria RAM en relació amb el procés seleccionat que s'executa a l'espai d'usuari. Per exemple, el subsistema permet analitzar a quines àrees de memòria va accedir el procés durant tot el seu funcionament i quines àrees de memòria van romandre sense reclamar.
      • DAMON_RECLAIM per identificar i desallotjar àrees de memòria a les quals no s'ha accedit. El mecanisme es pot utilitzar per desallotjar de manera proactiva les pàgines de memòria quan la memòria lliure està a punt d'esgotar-se.
      • DAMOS (Data Access Monitoring-based Operation Schemes) per aplicar operacions madvise() especificades, com ara l'alliberament de memòria lliure addicional, per processar àrees de memòria per a les quals es fixa una determinada freqüència d'accés a la memòria. Els paràmetres DAMOS es configuren mitjançant debugfs.
      • Capacitat de supervisar l'espai d'adreces físiques de la memòria (abans només es podien controlar les adreces virtuals).
    • La implementació de l'algorisme de compressió zstd s'ha actualitzat a la versió 1.4.10, que ha millorat significativament el rendiment de diversos subsistemes del nucli que utilitzen la compressió (per exemple, el desempaquetat d'una imatge del nucli s'ha accelerat un 35%, el rendiment de desempaquetar dades comprimides). en Btrfs i SquashFS ha augmentat un 15%, i en ZRAM - un 30%). El nucli va utilitzar inicialment una implementació separada de zstd, basada en la versió 1.3.1, que es va publicar fa més de tres anys i no incloïa moltes optimitzacions importants. A més de passar a la versió actual, el pedaç afegit també simplifica la sincronització amb la branca amunt de zstd, cosa que us permet generar codi per incloure'l al nucli directament des del dipòsit principal de zstd. En el futur, es preveu que el codi zstd del nucli s'actualitzi a mesura que es publiquin noves versions de la biblioteca zstd.
    • S'ha fet una gran part de millores al subsistema eBPF. S'ha afegit la possibilitat de cridar funcions del mòdul del nucli des dels programes BPF. La funció bpf_trace_vprintk() s'ha implementat, a diferència de bpf_trace_printk(), que us permet generar més de tres arguments alhora. S'ha afegit un nou filtre de floració de l'estructura d'emmagatzematge de dades (mapa BPF), que permet utilitzar l'estructura de dades probabilística del mateix nom per determinar la presència d'un element al conjunt. S'ha afegit un nou atribut BTF_KIND_TAG, que es pot utilitzar en programes BPF per vincular etiquetes a paràmetres de funció, per exemple, per simplificar la detecció d'errors en programes d'usuari. A libbpf, és possible crear les vostres pròpies seccions .rodata.*/.data.*, s'ha implementat suport per a esdeveniments de traça uprobe i kprobe i s'ha afegit una API per copiar tots els tipus BTF d'un objecte a un altre. El suport AF_XDP s'ha mogut de libbpf a una biblioteca libxdp independent. Per a l'arquitectura MIPS, s'ha implementat un compilador JIT per a la màquina virtual BPF.
    • Per a l'arquitectura ARM64, s'ha implementat suport per a les extensions ARMv8.6 per al temporitzador, incloses les que permeten la representació autosincronitzada dels registres del sistema sense utilitzar instruccions ISB.
    • Per a l'arquitectura PA-RISC, s'ha implementat la possibilitat d'utilitzar el mecanisme KFENCE per detectar errors quan es treballa amb memòria i s'ha afegit suport per al detector de condicions de carrera KCSAN.
    • És possible configurar els drets d'accés a tracefs a nivell d'usuaris i grups individuals, per exemple, ara podeu permetre l'accés a les eines de traça només als membres d'un grup determinat.
  • Virtualització i seguretat
    • Els subsistemes io_uring i device-mapper implementen suport per generar esdeveniments d'auditoria. io_uring ofereix la possibilitat de controlar l'accés mitjançant mòduls LSM. S'ha afegit la possibilitat d'auditar la crida al sistema openat2().
    • El codi del nucli està completament lliure d'expressions de majúscules i minúscules contínues a l'interruptor (no hi ha retorn ni interrupció després de cada bloc de majúscules). Quan es construeix el nucli, ara serà possible utilitzar el mode "-Wimplicit-fallthrough".
    • S'han inclòs canvis per endurir les comprovacions de límits quan s'executa la funció memcpy().
    • La interfície d'E/S asíncrona io_uring implementa la capacitat d'aplicar polítiques de seguretat definides pels mòduls SELinux i Smack a les operacions d'E/S.
    • El subsistema IMA (Integrity Measurement Architecture), que permet a un servei extern verificar l'estat dels subsistemes del nucli per assegurar-ne l'autenticitat, implementa la possibilitat d'aplicar regles basades en l'identificador de grup (GID) al qual pertany el fitxer o al qual l'usuari. l'accés al fitxer pertany.
    • S'han desactivat per defecte alguns mecanismes avançats per protegir els fils seccomp() dels atacs Spectre, que es consideraven innecessaris i no milloraven significativament la seguretat, però afectaven negativament el rendiment. S'ha revisat l'ús de la protecció Retpoline.
    • S'ha eliminat la implementació del mecanisme cryptoloop, que va ser substituït l'any 2004 per dm-crypt i, si cal, admet els mateixos algorismes.
    • Per defecte, l'accés sense privilegis al subsistema eBPF està prohibit. El canvi es va fer per evitar que els programes BPF s'utilitzin per evitar la protecció contra atacs de canal lateral. Si és necessari, l'administrador pot restaurar la capacitat dels usuaris no privilegiats d'utilitzar eBPF.
    • L'hipervisor ACRN, dissenyat per a tasques en temps real i ús en sistemes de missió crítica, ha afegit suport per crear/suprimir dispositius virtuals i reenviar dispositius MMIO.
    • S'ha afegit suport per a les definicions de KPP (Key-agreement Protocol Primitives) al motor criptogràfic, simplificant la lògica de desenvolupament de controladors per a sistemes criptogràfics.
    • L'hipervisor Hyper-V ara admet el mode d'aïllament de la màquina virtual, que implica el xifratge del contingut de la memòria.
    • L'hipervisor KVM ha afegit suport per a l'arquitectura RISC-V. S'ha implementat la possibilitat de migrar màquines virtuals que s'executen amb les extensions AMD SEV i SEV-ES dins de l'entorn amfitrió. S'ha afegit API per a la migració en directe de sistemes convidats xifrats mitjançant AMD SEV (Secure Encrypted Virtualization).
    • Per a l'arquitectura PowerPC, el mode STRICT_KERNEL_RWX està habilitat per defecte, que bloqueja l'ús de pàgines de memòria que estan simultàniament disponibles per a l'escriptura i l'execució.
    • Als sistemes x32 de 86 bits, el suport per a la connexió en calent de memòria s'ha interromput, que fa més d'un any que no funciona.
    • La biblioteca liblockdep s'ha eliminat del nucli i ara es mantindrà per separat del nucli.
  • Subsistema de xarxa
    • Per als sòcols, s'ha implementat una nova opció SO_RESERVE_MEM, amb la qual podeu reservar una certa quantitat de memòria per a un sòcol, que sempre romandrà disponible per al sòcol i no s'eliminarà. L'ús d'aquesta opció us permet augmentar el rendiment reduint l'assignació de memòria i les operacions de recuperació a la pila de xarxa, especialment quan es produeixen condicions de poca memòria al sistema.
    • S'ha afegit suport per al protocol de túnel de multidifusió automàtica (RFC 7450), que permet lliurar trànsit de multidifusió des de xarxes que admeten Multicast als destinataris de xarxes sense Multicast. El protocol funciona mitjançant l'encapsulació en paquets UDP.
    • Encapsulament millorat de dades IOAM (operacions in situ, administració i manteniment) en paquets de trànsit.
    • La capacitat de controlar els modes de consum d'energia del transceptor s'ha afegit a l'API ethtool netlink.
    • El subsistema netfilter implementa la capacitat de classificar paquets a nivell de sortida, és a dir. en l'etapa en què el controlador rep un paquet de la pila de xarxa del nucli. A nftables, el suport per als filtres corresponents va aparèixer a la versió 1.0.1. Netfilter ha afegit la possibilitat de comparar i canviar les capçaleres internes i les dades per a UDP i TCP (capçalera interior / càrrega útil) després de la capçalera de transport.
    • S'han afegit nous paràmetres sysctl arp_evict_nocarrier i ndisc_evict_nocarrier, quan s'estableixin, la memòria cau ARP i la taula ndisc (descobriment de veïns) s'esborraran en cas d'error de connexió (NOCARRIER).
    • S'han afegit els modes de baixa latència, baixa pèrdua i rendiment escalable (L4S) al mecanisme de gestió de cues de xarxa fq_codel (Retard controlat).
  • Оборудование
    • El controlador amdgpu proporciona suport inicial per a l'especificació DP 2.0 (DisplayPort 2.0) i el túnel de DisplayPort a través d'USB4. Per a les APU Cyan Skillfish (equipades amb GPU Navi 1x) s'ha afegit suport per als controladors de pantalla. S'ha ampliat el suport per a les APU Yellow Carp (processadors mòbils Ryzen 6000 "Rembrandt").
    • El controlador i915 estabilitza el suport per als xips Intel Alderlake S i implementa el suport per a la tecnologia Intel PXP (Protected Xe Path), que us permet organitzar una sessió de gràfics protegits per maquinari en sistemes amb xips Intel Xe.
    • S'ha treballat al controlador nouveau per corregir errors i millorar l'estil del codi.
    • S'ha afegit suport per a CPU Vortex compatibles amb x86 (Vortex86MX). Linux ha treballat amb processadors similars abans, però es va requerir una identificació explícita de les CPU especificades per desactivar la protecció contra els atacs Spectre/Meltdown, que no són aplicables als xips especificats.
    • S'ha afegit suport inicial per a plataformes x86 per a Surface Pro 8 i Surface Laptop Studio.
    • S'ha afegit un controlador per admetre xips de so utilitzats a AMD Yellow Carp, APU Van Gogh, també s'ha afegit suport per a sistemes de so i còdecs Cirrus CS35L41, Maxim MAX98520/MAX98360A, Mediatek MT8195, Nuvoton NAU8821, NVIDIA Tegra210, NXP i.MX8ULP, Qualcomtekm Audio, Qualcomtekm AudioReach ALC5682I-VS, RT5682S, RT9120, Rockchip RV1126 i RK3568.
    • S'ha afegit el controlador ishtp_eclite per accedir als controladors integrats Intel PSE (Programmable Service Engine) mitjançant ISHTP (Protocol de transport del concentrador de sensors integrats), com ara la bateria, la temperatura i la interfície d'informació relacionada amb UCSI (programari del sistema de connector USB Type-C).
    • S'ha afegit un controlador per als controladors de joc de Nintendo Switch que admet Switch Pro i Joy-Cons. S'ha afegit suport per a tauletes Wacom Intuos BT (CTL-4100WL/CTL-6100WL) i Apple 2021 Magic Keyboard. Suport millorat per als controladors Sony PlayStation DualSense. S'ha afegit suport per als botons laterals del ratolí Xiaomi Mi.
    • S'ha afegit el controlador RT89 amb suport per a xips sense fil Realtek 802.11ax, així com controladors per a adaptadors Ethernet Asix AX88796C-SPI i commutadors Realtek RTL8365MB-VC.
    • S'han afegit controladors per a PCI i PASemi i1c per als xips Apple M2.
    • S'ha afegit suport per a ARM SoС, dispositius i plaques 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 i Xiaomi Mi 5), Sony Yoshino (Sony Xperia XZ1 i 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 GSPC110, GSP7040G32 , com a R2A8M * , Xilinx Kria, Radxa Zero, JetHub D779/H1, Netronix E1K70.

Font: opennet.ru

Afegeix comentari