Llançament del nucli Linux 5.18

Després de dos mesos de desenvolupament, Linus Torvalds va presentar el llançament del nucli Linux 5.18. Entre els canvis més notables: es va dur a terme una neteja important de la funcionalitat obsoleta, el Reiserfs FS es va declarar obsolet, es van implementar esdeveniments de seguiment de processos d'usuari, es va afegir suport per al mecanisme de bloqueig d'explotacions Intel IBT, es va habilitar un mode de detecció de desbordament de buffer quan utilitzant la funció memcpy(), es va afegir un mecanisme per fer el seguiment de les trucades de la funció fprobe, s'ha millorat el rendiment del planificador de tasques a les CPU AMD Zen, s'ha inclòs un controlador per gestionar la funcionalitat de la CPU Intel (SDS), s'han integrat alguns pedaços per a la reestructuració dels fitxers de capçalera i s'ha aprovat l'ús de l'estàndard C11.

La nova versió inclou 16206 correccions de 2127 desenvolupadors (en la darrera versió hi havia 14203 correccions de 1995 desenvolupadors), la mida del pedaç és de 108 MB (els canvis van afectar 14235 fitxers, s'hi van afegir 1340982 línies de codi, es van eliminar 593836 línies, 44). Al voltant del 5.18% de tots els canvis introduïts a 16 estan relacionats amb controladors de dispositiu, aproximadament el 11% dels canvis estan relacionats amb l'actualització de codi específic de les arquitectures de maquinari, l'3% estan relacionats amb la pila de xarxa, el 3% estan relacionats amb sistemes de fitxers i el XNUMX% estan relacionats amb subsistemes interns del nucli.

Innovacions clau al nucli 5.18:

  • Subsistema de disc, E/S i sistemes de fitxers
    • El sistema de fitxers Btrfs ha afegit suport per reenviar dades comprimides quan es realitzen operacions d'enviament i recepció. Anteriorment, quan s'utilitzava enviar/rebre, el costat emissor descomprimia les dades emmagatzemades en forma comprimida i el costat receptor les recomprimia abans d'escriure-les. Al nucli 5.18, les aplicacions d'espai d'usuari que utilitzaven trucades d'enviament/recepció tenien la possibilitat de transmetre dades comprimides sense tornar a empaquetar. La funcionalitat s'implementa gràcies a les noves operacions ioctl BTRFS_IOC_ENCODED_READ i BTRFS_IOC_ENCODED_WRITE, que us permeten llegir i escriure directament informació en extens.

      A més, Btrfs millora el rendiment de fsync. S'ha afegit la possibilitat de desduplicar i realitzar reflink (clonació de metadades del fitxer creant un enllaç a les dades existents sense copiar-les) per a tot l'emmagatzematge, sense limitar-se als punts de muntatge.

    • En el mode d'E/S directa, és possible accedir als fitxers xifrats quan fscrypt utilitza el xifratge en línia, en el qual les operacions de xifratge i desxifrat les realitza el controlador de la unitat en lloc del nucli. Amb el xifratge normal del nucli, l'accés als fitxers xifrats mitjançant l'E/S directa encara és impossible, ja que s'accedeix als fitxers sense passar pel mecanisme de memòria intermèdia del nucli.
    • El servidor NFS inclou suport per al protocol NFSv3 de manera predeterminada, que ara no requereix una activació independent i està disponible quan NFS està habilitat generalment. Es considera que NFSv3 és la versió principal i sempre suportada de NFS, i el suport per a NFSv2 es pot suspendre en el futur. S'ha millorat significativament l'eficiència de la lectura del contingut del directori.
    • El sistema de fitxers ReiserFS ha quedat obsolet i s'espera que s'elimini el 2025. L'obsoletació de ReiserFS reduirà l'esforç necessari per mantenir els canvis a tot el sistema de fitxers relacionats amb la compatibilitat amb la nova API per al muntatge, el iomap i els tomes.
    • Per al sistema de fitxers F2FS, s'ha implementat la capacitat de mapejar els ID d'usuari dels sistemes de fitxers muntats, que s'utilitza per fer coincidir els fitxers d'un usuari específic en una partició estrangera muntada amb un altre usuari del sistema actual.
    • S'ha reelaborat el codi per calcular les estadístiques als controladors del mapeador de dispositius, la qual cosa ha millorat significativament la precisió de la comptabilitat en controladors com ara dm-crypt.
    • Els dispositius NVMe ara admeten sumes de comprovació de 64 bits per comprovar la integritat.
    • Per al sistema de fitxers exfat, s'ha proposat una nova opció de muntatge "keep_last_dots", que desactiva l'eliminació de punts al final del nom del fitxer (a Windows, els punts al final del nom del fitxer s'eliminen de manera predeterminada).
    • EXT4 millora el rendiment del mode fast_commit i augmenta l'escalabilitat. L'opció de muntatge “mb_optimize_scan”, que permet augmentar el rendiment en condicions de gran fragmentació del sistema de fitxers, està adaptada per treballar amb fitxers amb extensions.
    • S'ha deixat de suportar els fluxos d'escriptura al subsistema que admet dispositius de bloc. Aquesta característica es va proposar per als SSD, però no estava molt estesa i actualment no hi ha dispositius en ús que admeti aquest mode i és poc probable que apareguin en el futur.
  • Serveis de memòria i sistema
    • S'ha iniciat la integració d'un conjunt de pedaços, que permeten reduir significativament el temps de reconstrucció del nucli mitjançant la reestructuració de la jerarquia dels fitxers de capçalera i la reducció del nombre de dependències creuades. El nucli 5.18 inclou pedaços que optimitzen l'estructura dels fitxers de capçalera del planificador de tasques (kernel/sched). En comparació amb la versió anterior, el consum de temps de la CPU en muntar el codi kernel/sched/ es va reduir un 61% i el temps real es va reduir un 3.9% (de 2.95 a 2.84 segons).
    • El codi del nucli pot utilitzar l'estàndard C11, publicat el 2011. Anteriorment, el codi afegit al nucli havia de complir amb l'especificació ANSI C (C89), formada el 1989. En els scripts de compilació del nucli 5.18, l'opció '—std=gnu89' es substitueix per '—std=gnu11 -Wno-shift-negative-value'. Es va considerar la possibilitat d'utilitzar l'estàndard C17, però en aquest cas caldria augmentar la versió mínima admesa de GCC, mentre que la inclusió del suport C11 s'ajusta als requisits actuals per a la versió GCC (5.1).
    • Rendiment millorat de la programació de tasques en processadors AMD amb microarquitectura Zen, que proporcionen múltiples cachés d'últim nivell (LLC) per a cada node amb canals de memòria locals. La nova versió elimina el desequilibri de LLC entre els nodes NUMA, que va provocar un augment significatiu del rendiment per a alguns tipus de càrrega de treball.
    • S'han ampliat les eines per rastrejar aplicacions a l'espai d'usuari. La nova versió del nucli afegeix la possibilitat que els processos d'usuari creïn esdeveniments d'usuari i escriguin dades a la memòria intermèdia de traça, que es pot veure mitjançant utilitats estàndard de traça del nucli com ara ftrace i perf. Els esdeveniments de traça de l'espai d'usuari s'aïllen dels esdeveniments de traça del nucli. L'estat de l'esdeveniment es pot veure a través del fitxer /sys/kernel/debug/tracing/user_events_status i el registre d'esdeveniments i l'enregistrament de dades mitjançant el fitxer /sys/kernel/debug/tracing/user_events_data.
    • S'ha afegit un mecanisme per supervisar les trucades de funcions (sonda) - fprobe. L'API fprobe es basa en ftrace, però només està limitada per la capacitat d'adjuntar controladors de devolució de trucada als punts d'entrada de funcions i punts de sortida de funcions. A diferència de kprobes i kretprobes, el nou mecanisme us permet utilitzar un gestor per a diverses funcions alhora.
    • S'ha interromput la compatibilitat amb processadors ARM antics (ARMv4 i ARMv5) que no estan equipats amb una unitat de gestió de memòria (MMU). Es manté el suport per als sistemes ARMv7-M sense MMU.
    • El suport per a l'arquitectura NDS32 semblant a RISC que s'utilitza en els processadors d'Andes Technologies s'ha interromput. El codi es va eliminar a causa de la manca de manteniment i la manca de demanda de suport NDS32 al nucli principal de Linux (la resta d'usuaris utilitzen compilacions de nucli especialitzades de fabricants de maquinari).
    • Per defecte, la creació del nucli amb suport per al format de fitxer executable a.out està desactivada per a les arquitectures alfa i m68k, que continuen utilitzant aquest format. És probable que el suport per al format heretat a.out s'elimini completament del nucli aviat. Els plans per eliminar el format a.out es discuteixen des del 2019.
    • L'arquitectura PA-RISC proporciona un suport mínim per al mecanisme vDSO (objectes dinàmics compartits virtuals), que proporciona un conjunt limitat de trucades al sistema disponibles a l'espai d'usuari sense canvi de context. El suport de vDSO va permetre implementar la capacitat d'executar-se amb una pila no executable.
    • S'ha afegit suport per al mecanisme Intel HFI (Hardware Feedback Interface), que permet que el maquinari transmeti informació al nucli sobre el rendiment actual i l'eficiència energètica de cada CPU.
    • S'ha afegit un controlador per al mecanisme Intel SDSi (Software-Defined Silicon), que permet controlar la inclusió de funcions addicionals al processador (per exemple, instruccions especialitzades i memòria cau addicional). La idea és que els xips es puguin subministrar a un preu més baix amb funcions avançades bloquejades, que després es poden "comprar" i activar capacitats addicionals sense substitució de maquinari del xip.
    • S'ha afegit el controlador amd_hsmp per donar suport a la interfície AMD HSMP (Port de gestió del sistema amfitrió), que proporciona accés a les funcions de gestió del processador mitjançant un conjunt de registres especials que han aparegut als processadors del servidor AMD EPYC a partir de la generació Fam19h. Per exemple, mitjançant HSMP podeu obtenir dades sobre el consum d'energia i la temperatura, establir límits de freqüència, activar diversos modes de millora del rendiment i gestionar els paràmetres de memòria.
    • La interfície d'E/S asíncrona io_uring implementa l'opció IORING_SETUP_SUBMIT_ALL per registrar un conjunt de descriptors de fitxers en una memòria intermèdia d'anell i l'operació IORING_OP_MSG_RING per enviar un senyal d'una memòria intermèdia d'anell a un altre buffer d'anell.
    • El mecanisme DAMOS (Data Access Monitoring-based Operation Schemes), que permet alliberar memòria tenint en compte la freqüència d'accés a la memòria, ha ampliat les capacitats per supervisar les operacions de memòria des de l'espai d'usuari.
    • S'ha integrat una tercera sèrie de pedaços amb la implementació del concepte de fulls de pàgines, que s'assemblen a pàgines compostes, però tenen una semàntica millorada i una organització més clara del treball. L'ús de tomes us permet accelerar la gestió de la memòria en alguns subsistemes del nucli. En els pedaços proposats, les funcions de gestió de memòria interna es van traduir a fulls, incloses les variacions de la funció get_user_pages(). Suport per a la creació de grans volums en codi de lectura anticipada.
    • El sistema de muntatge ara admet les variables d'entorn USERCFLAGS i USERLDFLAGS, amb les quals podeu passar senyals addicionals al compilador i a l'enllaçador.
    • Al subsistema eBPF, el mecanisme BTF (BPF Type Format), que proporciona informació per a la verificació de tipus en pseudocodi BPF, implementa la capacitat d'afegir anotacions a variables que fan referència a àrees de memòria a l'espai d'usuari. Les anotacions ajuden el sistema de verificació del codi BPF a identificar i verificar millor els accessos a la memòria.
    • S'ha proposat un nou controlador d'assignació de memòria per emmagatzemar programes BPF carregats, que permet un ús més eficient de la memòria en situacions en què es carreguen un gran nombre de programes BPF.
    • S'ha afegit el senyalador MADV_DONTNEED_LOCKED a la crida al sistema madvise(), que proporciona eines per optimitzar la gestió de la memòria del procés, que complementa el senyalador MADV_DONTNEED existent, mitjançant el qual es pot informar prèviament al nucli sobre l'alliberament imminent d'un bloc de memòria, és a dir. que aquest bloc ja no és necessari i pot ser utilitzat pel nucli. A diferència de MADV_DONTNEED, l'ús de la bandera MADV_DONTNEED_LOCKED està permesa per a pàgines de memòria fixades a la RAM, que, quan es crida a madvise, són desallotjades sense canviar el seu estat de fixació i, en cas d'accés posterior al bloqueig i generació d'una "pàgina". culpa", es retornen amb l'enquadernació conservada. A més, s'ha afegit un canvi per permetre que la marca MADV_DONTNEED s'utilitzi amb pàgines de memòria gran a HugeTLB.
  • Virtualització i seguretat
    • Per a l'arquitectura x86, s'ha afegit suport per al mecanisme de protecció del flux d'ordres Intel IBT (Indirect Branch Tracking), que impedeix l'ús de tècniques de construcció d'explotacions utilitzant tècniques de programació orientades al retorn (ROP, Return-Oriented Programming), en què l'exploit es forma en forma d'una cadena de trucades ja existents a la memòria de peces d'instruccions de màquina que acaben amb una instrucció de retorn de control (per regla general, aquests són els extrems de les funcions). L'essència del mètode de protecció implementat és bloquejar les transicions indirectes al cos d'una funció afegint una instrucció especial ENDBR al començament de la funció i permetent l'execució d'una transició indirecta només en el cas d'una transició a aquesta instrucció (una instrucció indirecta). crida a través de JMP i CALL sempre ha de recaure en la instrucció ENDBR, que es col·loca a les funcions inicials).
    • S'ha habilitat una comprovació més estricta dels límits de la memòria intermèdia a les funcions memcpy(), memmove() i memset(), realitzada en temps de compilació quan el mode CONFIG_FORTIFY_SOURCE està habilitat. El canvi afegit es redueix a comprovar si els elements de les estructures de les quals es coneix la mida superen els límits. Cal assenyalar que la característica implementada permetria bloquejar tots els desbordaments de memòria intermèdia del nucli relacionats amb memcpy() identificats en almenys els darrers tres anys.
    • S'ha afegit la segona part del codi per a la implementació actualitzada del generador de números pseudoaleatoris RDRAND, que és responsable del funcionament dels dispositius /dev/random i /dev/urandom. La nova implementació destaca per unificar el funcionament de /dev/random i /dev/urandom, afegint protecció contra l'aparició de duplicats en el flux de números aleatoris en iniciar màquines virtuals i canviar a utilitzar la funció hash de BLAKE2s en lloc de SHA1 per operacions de mescla d'entropia. El canvi va millorar la seguretat del generador de números pseudoaleatoris eliminant el problemàtic algorisme SHA1 i eliminant la sobreescriptura del vector d'inicialització RNG. Com que l'algoritme BLAKE2s és superior a SHA1 en rendiment, el seu ús també va tenir un efecte positiu en el rendiment.
    • Per a l'arquitectura ARM64, s'ha afegit suport per a un nou algorisme d'autenticació de punter: "QARMA3", que és més ràpid que l'algoritme QARMA tot mantenint el nivell de seguretat adequat. La tecnologia us permet utilitzar instruccions especialitzades ARM64 per verificar les adreces de retorn mitjançant signatures digitals que s'emmagatzemen als bits superiors no utilitzats del propi punter.
    • Per a l'arquitectura ARM64, s'ha implementat suport per al muntatge amb la inclusió a GCC 12 d'un mode de protecció contra la sobreescritura de l'adreça de retorn d'una funció en cas de desbordament de memòria intermèdia a la pila. L'essència de la protecció és desar l'adreça de retorn en una pila "ombra" separada després de transferir el control a una funció i recuperar aquesta adreça abans de sortir de la funció.
    • S'ha afegit un nou anell de claus: "màquina", que conté les claus del propietari del sistema (MOK, claus del propietari de la màquina), compatibles amb el carregador d'arrencada shim. Aquestes claus es poden utilitzar per signar digitalment components del nucli carregats en una fase posterior a l'arrencada (per exemple, mòduls del nucli).
    • S'ha eliminat el suport per a les claus privades asimètriques per als TPM, que s'oferien en una versió heretada de TPM, tenien problemes de seguretat coneguts i no es van adoptar àmpliament a la pràctica.
    • S'ha afegit protecció de dades amb el tipus size_t contra desbordaments d'enters. El codi inclou controladors size_mul(), size_add() i size_sub(), que us permeten multiplicar, sumar i restar mides amb seguretat amb el tipus size_t.
    • Quan es construeix el nucli, s'activen els indicadors "-Warray-bounds" i "-Wzero-length-bounds", que mostren avisos quan l'índex va més enllà del límit de la matriu i quan s'utilitzen matrius de longitud zero.
    • El dispositiu virtio-crypto ha afegit suport per al xifratge mitjançant l'algorisme RSA.
  • Subsistema de xarxa
    • En la implementació de ponts de xarxa, s'ha afegit suport per al mode d'enllaç de ports (mode bloquejat), en què l'usuari només pot enviar trànsit a través del port des d'una adreça MAC autoritzada. També s'ha afegit la possibilitat d'utilitzar diverses estructures per avaluar l'estat del protocol STP (Spanning Tree Protocol). Anteriorment, les VLAN només es podien assignar directament a STP (1:1), amb cada VLAN gestionada de manera independent. La nova versió afegeix el paràmetre mst_enable, quan està activat, l'estat de les VLAN està controlat pel mòdul MST (Multiple Spanning Trees) i la vinculació de les VLAN pot correspondre al model M:N.
    • Es va continuar treballant en la integració d'eines a la pila de xarxa per fer un seguiment dels motius per deixar caure paquets (codis de motiu). El codi de motiu s'envia quan s'allibera la memòria associada al paquet i permet situacions com ara descartar paquets a causa d'errors de capçalera, detecció de falsificació de rp_filter, suma de verificació no vàlida, memòria sense memòria, regles IPSec XFRM activades, número de seqüència TCP no vàlid, etc.
    • És possible transferir paquets de xarxa de programes BPF llançats des de l'espai d'usuari en el mode BPF_PROG_RUN, en què els programes BPF s'executen al nucli, però retornen el resultat a l'espai d'usuari. Els paquets es transmeten mitjançant el subsistema XDP (eXpress Data Path). S'admet el mode de processament de paquets en directe, en què el processador XDP pot redirigir els paquets de xarxa sobre la marxa a la pila de xarxa o a altres dispositius. També és possible crear generadors de programari de trànsit extern o substituir trames de xarxa a la pila de xarxa.
    • Per als programes BPF connectats als cgroups de xarxa, s'han proposat funcions d'ajuda per establir explícitament el valor de retorn de les trucades al sistema, cosa que permet transmetre informació més completa sobre els motius del bloqueig de la trucada al sistema.
    • El subsistema XDP (eXpress Data Path) ha afegit suport per a paquets fragmentats col·locats en múltiples buffers, que us permet processar trames Jumbo en XDP i utilitzar TSO/GRO (Descàrrega de segmentació TCP/Descàrrega de recepció genèrica) per a XDP_REDIRECT.
    • El procés d'eliminació d'espais de noms de xarxa s'ha accelerat significativament, que es demandava en alguns sistemes grans amb un gran volum de trànsit.
  • Оборудование
    • El controlador amdgpu inclou per defecte la tecnologia de sincronització adaptativa FreeSync, que us permet ajustar la taxa d'actualització de la informació a la pantalla, garantint imatges suaus i sense llàgrimes mentre jugueu i mireu vídeos. S'ha anunciat que el suport de la GPU Aldebaran és estable.
    • El controlador i915 afegeix suport per a xips Intel Alderlake N i targetes gràfiques discretes Intel DG2-G12 (Arc Alchemist).
    • El controlador nouveau ofereix suport per a velocitats de bits més altes per a interfícies DP/eDP i suport per a extensors de cable lttprs (Link-Training Tunable PHY Repeaters).
    • Al subsistema drm (Direct Rendering Manager) als controladors Armada, exynos, gma500, hyperv, imx, ingenic, mcde, mediatek, msm, omap, rcar-du, rockchip, sprd, sti, tegra, tilcdc, xen i vc4 s'ha afegit nomodeset, que us permet desactivar el canvi de modes de vídeo a nivell del nucli i l'ús d'eines d'acceleració de renderització de maquinari, deixant només la funcionalitat relacionada amb el framebuffer del sistema.
    • S'ha afegit suport per a ARM SoС Qualcomm Snapdragon 625/632 (utilitzat en telèfons intel·ligents LG Nexus 5X i Fairphone FP3), Samsung Exynos 850, Samsung Exynos 7885 (utilitzat en Samsung Galaxy A8), Airoha (Mediatek/EcoNet) EN7523, Mediatek mt6582Prestigio PST5008 tauleta 3G), Microxip Lan966, Renesas RZ/G2LC, RZ/V2L, Tesla FSD, TI K3/AM62 i i.MXRTxxxx.
    • S'ha afegit suport per a dispositius i plaques ARM de Broadcom (Raspberry Pi Zero 2 W), Qualcomm (Google Herobrine R1 Chromebook, SHIFT6mq, Samsung Galaxy Book2), Rockchip (Pine64 PineNote, Bananapi-R2-Pro, STM32 Emtrion emSBS, Samsung Galaxy Tab S , tauleta Prestigio PMT5008 3G), Allwinner (A20-Marsboard), Amlogic (Amediatek X96-AIR, CYX A95XF3-AIR, Haochuangy H96-Max, Amlogic AQ222 i OSMC Vero 4K+), Aspeed (Quanta S6Q, ASMVE8 ROMED), Marvell3 / Armada (Ctera C200 V1 i V2 NAS), Mstar (DongShanPiOne, Miyoo Mini), NXP i.MX (Protonic PRT8MM, emCON-MX8M Mini, Toradex Verdin, Gateworks GW7903).
    • S'ha afegit suport per a sistemes de so i còdecs AMD PDM, Atmel PDMC, Awinic AW8738, i.MX TLV320AIC31xx, Intel CS35L41, ESSX8336, Mediatek MT8181, nVidia Tegra234, Qualcomm SC7280, Renesas RZ/V2L585M, Texas Instruments. S'ha afegit la implementació inicial del controlador de so per al xip Intel AVS DSP. S'ha actualitzat el suport del controlador per a Intel ADL i Tegra234 i s'han fet canvis per millorar el suport d'àudio als dispositius Dell, HP, Lenovo, ASUS, Samsung i Clevo.

    Al mateix temps, la Latin American Free Software Foundation va formar una versió del nucli completament lliure 5.18 - Linux-libre 5.18-gnu, esborrat d'elements de microprogramari i controladors que contenen components o seccions de codi no lliures, l'abast dels quals és limitat. pel fabricant. La nova versió neteja els controladors per als panells MIPI DBI, VPU Amphion, WiFi MediaTek MT7986 WMAC, Mediatek MT7921U (USB) i Realtek 8852a/8852c, Intel AVS i xips de so Texas Instruments TAS5805M. Els fitxers DTS també es van netejar per a diversos SoC Qualcomm amb processadors basats en l'arquitectura AArch64. Codi de neteja de blob actualitzat als controladors i subsistemes de la GPU AMD, MediaTek MT7915, Silicon Labs WF200+ WiFi, Mellanox Spectru Ethernet, Realtek rtw8852c, Qualcomm Q6V5, Wolfson ADSP, MediaTek HCI UART.

Font: opennet.ru

Afegeix comentari