Llançament del nucli Linux 6.2

Després de dos mesos de desenvolupament, Linus Torvalds va presentar el llançament del nucli Linux 6.2. Entre els canvis més destacats: es permet l'acceptació de codi sota la llicència Copyleft-Next, es millora la implementació de RAID5/6 en Btrfs, continua la integració del suport per al llenguatge Rust, es redueix la sobrecàrrega de protecció contra atacs de Retbleed, la s'afegeix la capacitat de regular el consum de memòria durant l'escriptura, s'afegeix un mecanisme per a l'equilibri TCP PLB (Protective Load Balancing), s'ha afegit un mecanisme de protecció de flux d'ordres híbrid (FineIBT), BPF ara té la capacitat de definir els seus propis objectes i estructures de dades , s'inclou la utilitat rv (Verificació en temps d'execució), el consum d'energia en la implementació de bloquejos RCU s'ha reduït.

La nova versió inclou 16843 correccions de 2178 desenvolupadors, la mida del pedaç és de 62 MB (els canvis van afectar 14108 fitxers, es van afegir 730195 línies de codi, es van suprimir 409485 línies). Al voltant del 42% de tots els canvis introduïts a 6.2 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 12% estan relacionats amb la pila de xarxa, el 4% estan relacionats amb sistemes de fitxers i el 3% estan relacionats amb subsistemes interns del nucli.

Innovacions clau al nucli 6.2:

  • Serveis de memòria i sistema
    • Es permet incloure al codi del nucli i els canvis proporcionats sota la llicència Copyleft-Next 0.3.1. La llicència Copyleft-Next va ser creada per un dels autors de GPLv3 i és totalment compatible amb la llicència GPLv2, tal com han confirmat els advocats de SUSE i Red Hat. En comparació amb GPLv2, la llicència Copyleft-Next és molt més compacta i més fàcil d'entendre (s'han eliminat la part introductòria i la menció dels compromisos obsolets), defineix el període de temps i el procediment per eliminar les infraccions i elimina automàticament els requisits de copyleft per al programari obsolet que té més de 15 anys.

      Copyleft-Next també conté una clàusula de concessió de tecnologia propietària que, a diferència de GPLv2, fa que aquesta llicència sigui compatible amb la llicència d'Apache 2.0. Per garantir la compatibilitat total amb GPLv2, Copyleft-Next indica explícitament que un treball derivat es pot distribuir sota la llicència GPL a més de la llicència Copyleft-Next original.

    • L'estructura inclou la utilitat "rv", que proporciona una interfície per a la interacció des de l'espai d'usuari amb els gestors del subsistema RV (Runtime Verification), dissenyat per comprovar el correcte funcionament en sistemes altament fiables que garanteixen l'absència de fallades. La verificació es realitza en temps d'execució mitjançant l'adhesió de controladors a punts de traça que comproven el progrés real de l'execució amb un model determinista de referència predeterminat de la màquina que defineix el comportament esperat del sistema.
    • El dispositiu zRAM, que permet emmagatzemar la partició d'intercanvi a la memòria en forma comprimida (es crea un dispositiu de bloc a la memòria al qual es realitza l'intercanvi amb compressió), implementa la capacitat de tornar a empaquetar pàgines mitjançant un algorisme alternatiu per aconseguir un nivell superior. de compressió. La idea principal és oferir una opció entre diversos algorismes (lzo, lzo-rle, lz4, lz4hc, zstd), oferint els seus propis compromisos entre la velocitat de compressió/descompressió i el nivell de compressió, o òptims en situacions especials (per exemple, per comprimir grans pàgines de memòria).
    • S'ha afegit l'API "iommufd" per gestionar el sistema de gestió de memòria d'E/S - IOMMU (Unitat de gestió de memòria d'E/S) des de l'espai d'usuari. La nova API permet gestionar taules de pàgines de memòria d'E/S mitjançant descriptors de fitxers.
    • BPF ofereix la possibilitat de crear tipus, definir els vostres propis objectes, crear la vostra pròpia jerarquia d'objectes i crear de manera flexible les vostres estructures de dades, com ara llistes enllaçades. Per als programes BPF que entren en mode de repòs (BPF_F_SLEEPABLE), s'ha afegit suport per als bloquejos bpf_rcu_read_{,un}lock(). Suport implementat per desar objectes task_struct. S'ha afegit el tipus de mapa BPF_MAP_TYPE_CGRP_STORAGE, que proporciona emmagatzematge local per a cgroups.
    • Per al mecanisme de bloqueig RCU (Read-copy-update), s'implementa un mecanisme opcional de trucades de devolució "mandrosa", en què es processen diverses trucades de devolució alhora utilitzant un temporitzador en mode per lots. L'aplicació de l'optimització proposada ens permet reduir el consum d'energia en dispositius Android i ChromeOS en un 5-10% posposant les sol·licituds de RCU durant els temps d'inactivitat o baixa càrrega del sistema.
    • S'ha afegit sysctl split_lock_mitigate per controlar com reacciona el sistema quan detecta bloquejos dividits que es produeixen en accedir a dades no alineades a la memòria a causa de les dades que creuen dues línies de memòria cau de la CPU quan s'executa una instrucció atòmica. Aquests bloquejos provoquen una caiguda important del rendiment. L'establiment de split_lock_mitigate a 0 només emet un avís que hi ha un problema, mentre que l'establiment de split_lock_mitigate a 1 també fa que el procés que va provocar que el bloqueig es ralentís per preservar el rendiment de la resta del sistema.
    • S'ha proposat una nova implementació de qspinlock per a l'arquitectura PowerPC, que demostra un major rendiment i soluciona alguns problemes de bloqueig que sorgeixen en casos excepcionals.
    • S'ha reelaborat el codi de gestió d'interrupcions MSI (Message-Signaled Interrupts), eliminant els problemes arquitectònics acumulats i afegint suport per vincular controladors individuals a diferents dispositius.
    • Per als sistemes basats en l'arquitectura de conjunt d'instruccions LoongArch que s'utilitza als processadors Loongson 3 5000 i que implementen el nou RISC ISA, similar a MIPS i RISC-V, s'implementa el suport per als modes ftrace, protecció de pila, sleep i standby.
    • S'ha proporcionat la possibilitat d'assignar noms a àrees de memòria anònima compartida (abans els noms només es podien assignar a la memòria anònima privada assignada a un procés específic).
    • S'ha afegit un nou paràmetre de línia d'ordres del nucli "trace_trigger", dissenyat per activar un activador de traça que s'utilitza per vincular ordres condicionals trucades quan s'activa una comprovació de control (per exemple, trace_trigger="sched_switch.stacktrace si prev_state == 2").
    • S'han augmentat els requisits per a la versió del paquet binutils. La construcció del nucli ara requereix almenys binutils 2.25.
    • Quan es crida a exec(), s'ha afegit la possibilitat de col·locar un procés en un espai de noms de temps, en el qual el temps és diferent de l'hora del sistema.
    • Hem començat a transferir funcionalitats addicionals de la branca Rust-for-Linux relacionada amb l'ús del llenguatge Rust com a segon llenguatge per desenvolupar controladors i mòduls del nucli. El suport de Rust està desactivat per defecte i no fa que Rust s'inclogui com a dependència de construcció del nucli necessària. La funcionalitat bàsica que s'ofereix a la darrera versió s'amplia per suportar codi de baix nivell, com ara el tipus Vec i les macros pr_debug!(), pr_cont!() i pr_alert!(), així com la macro de procediment "#[vtable". ]”, que simplifica el treball amb taules de punters en funcions. En futures versions s'espera l'addició d'enllaços Rust d'alt nivell sobre subsistemes del nucli, que permetran la creació de controladors complets a Rust.
    • El tipus "char" utilitzat al nucli ara es declara sense signar per defecte per a totes les arquitectures.
    • El mecanisme d'assignació de memòria de lloses - SLOB (assignador de lloses), que va ser dissenyat per a sistemes amb una petita quantitat de memòria, s'ha declarat obsolet. En lloc de SLOB, en condicions normals es recomana utilitzar SLUB o SLAB. Per als sistemes amb una petita quantitat de memòria, es recomana utilitzar SLUB en el mode SLUB_TINY.
  • Subsistema de disc, E/S i sistemes de fitxers
    • S'han fet millores a Btrfs amb l'objectiu de solucionar el problema del "forat d'escriptura" a les implementacions RAID 5/6 (un intent de restaurar un RAID si es produeix un error durant l'escriptura i és impossible entendre quin bloc en quin dispositiu RAID s'ha escrit correctament, que pot conduir a la destrucció de blocs, corresponents a blocs subscrits). A més, ara els SSD permeten automàticament l'operació de descartament asíncrona de manera predeterminada quan és possible, cosa que permet un rendiment millorat gràcies a l'agrupació eficient de les operacions de descart en cues i al processament de la cua per un processador en segon pla. Millora del rendiment de les operacions d'enviament i lseek, així com del FIEMAP ioctl.
    • S'han ampliat les capacitats per gestionar l'escriptura diferida (reescritura, desament en segon pla de les dades modificades) per als dispositius de bloc. En algunes situacions, com ara quan s'utilitzen dispositius de bloc de xarxa o unitats USB, les escriptures mandroses poden provocar un gran consum de memòria RAM. Per tal de controlar el comportament de les escriptures mandroses i mantenir la mida de la memòria cau de la pàgina dins de certs límits, s'han introduït nous paràmetres strict_limit, min_bytes, max_bytes, min_ratio_fine i max_ratio_fine a sysfs (/sys/class/bdi/).
    • El sistema de fitxers F2FS implementa una operació de substitució atòmica ioctl, que us permet escriure dades en un fitxer dins d'una única operació atòmica. F2FS també afegeix una memòria cau d'extensió de bloc per ajudar a identificar les dades utilitzades activament o les dades a les quals no s'ha accedit durant molt de temps.
    • A l'ext4 FS només es noten les correccions d'error.
    • El sistema de fitxers ntfs3 ofereix diverses opcions de muntatge noves: "nocase" per controlar la distinció entre majúscules i minúscules als noms de fitxers i directoris; windows_name per prohibir la creació de noms de fitxers que continguin caràcters que no siguin vàlids per a Windows; hide_dot_files per controlar l'assignació de l'etiqueta del fitxer amagat per als fitxers que comencen amb un punt.
    • El sistema de fitxers Squashfs implementa una opció de muntatge "threads=", que us permet definir el nombre de fils per paral·lelitzar les operacions de descompressió. Squashfs també va introduir la capacitat de mapejar els ID d'usuari dels sistemes de fitxers muntats, utilitzats 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 la implementació de les llistes de control d'accés POSIX (POSIX ACL). La nova implementació elimina problemes arquitectònics, simplifica el manteniment de la base de codis i introdueix tipus de dades més segurs.
    • El subsistema fscrypt, que s'utilitza per al xifratge transparent de fitxers i directoris, ha afegit suport per a l'algoritme de xifratge SM4 (estàndard xinès GB/T 32907-2016).
    • S'ha proporcionat la possibilitat de construir el nucli sense suport NFSv2 (en el futur tenen previst deixar de donar suport a NFSv2).
    • S'ha canviat l'organització de la comprovació dels drets d'accés als dispositius NVMe. Proporciona la possibilitat de llegir i escriure en un dispositiu NVMe si el procés d'escriptura té accés al fitxer dedicat del dispositiu (anteriorment el procés havia de tenir el permís CAP_SYS_ADMIN).
    • S'ha eliminat el controlador del paquet de CD/DVD, que va quedar obsolet el 2016.
  • Virtualització i seguretat
    • S'ha implementat un nou mètode de protecció contra la vulnerabilitat de Retbleed a les CPU Intel i AMD, utilitzant el seguiment de la profunditat de la trucada, que no alenteix el treball tant com la protecció actual contra Retbleed. Per habilitar el nou mode, s'ha proposat el paràmetre de línia d'ordres del nucli "retbleed=stuff".
    • S'ha afegit un mecanisme híbrid de protecció del flux d'instruccions FineIBT, que combina l'ús d'instruccions de maquinari Intel IBT (seguiment indirecte de branques) i la protecció de programari kCFI (kernel Control Flow Integrity) per bloquejar la violació de l'ordre d'execució normal (flux de control) com a resultat de l'ús. d'explotacions que modifiquen els punters emmagatzemats a la memòria sobre funcions. FineIBT permet l'execució per salt indirecte només en el cas d'un salt a la instrucció ENDBR, que es col·loca al principi de la funció. A més, per analogia amb el mecanisme kCFI, els hash es comproven per garantir la immutabilitat dels punters.
    • S'han afegit restriccions per bloquejar els atacs que manipulen la generació d'estats "vay", després de les quals es completen les tasques problemàtiques i es restaura l'estat sense aturar el sistema. Amb un nombre molt gran de trucades a l'estat "oops", es produeix un desbordament del comptador de referència (refcount), que permet l'explotació de vulnerabilitats causades per desreferències de punter NULL. Per protegir-se d'aquests atacs, s'ha afegit un límit al nucli per al nombre màxim d'activadors "oops", després de superar el qual el nucli iniciarà una transició a l'estat de "pànic" seguit d'un reinici, que no permetrà aconseguir el nombre d'iteracions necessàries per desbordar el refcount. Per defecte, el límit s'estableix en 10 mil "oops", però si es desitja, es pot canviar mitjançant el paràmetre oops_limit.
    • S'ha afegit el paràmetre de configuració LEGACY_TIOCSTI i sysctl legacy_tiocsti per desactivar la possibilitat de posar dades al terminal mitjançant ioctl TIOCSTI, ja que aquesta funcionalitat es pot utilitzar per substituir caràcters arbitraris a la memòria intermèdia d'entrada del terminal i simular l'entrada de l'usuari.
    • Es proposa un nou tipus d'estructura interna, encoded_page, en la qual els bits inferiors del punter s'utilitzen per emmagatzemar informació addicional que s'utilitza per protegir contra la desreferència accidental del punter (si la desreferència és realment necessària, primer s'han d'esborrar aquests bits addicionals). .
    • A la plataforma ARM64, en l'etapa d'arrencada, és possible habilitar o desactivar la implementació de programari del mecanisme Shadow Stack, que s'utilitza per protegir contra sobreescriure 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 la funció i recuperar l'adreça donada abans de sortir de la funció). El suport per a les implementacions de maquinari i programari de Shadow Stack en un conjunt de nucli us permet utilitzar un nucli en diferents sistemes ARM, independentment del seu suport per a instruccions per a l'autenticació del punter. La inclusió d'una implementació de programari es realitza mitjançant la substitució de les instruccions necessàries al codi durant la càrrega.
    • S'ha afegit suport per utilitzar el mecanisme de notificació de sortida asíncrona als processadors Intel, que permet detectar atacs d'un sol pas al codi executat en enclavaments SGX.
    • Es proposa un conjunt d'operacions que permeten a l'hipervisor suportar les sol·licituds dels sistemes convidats Intel TDX (Trusted Domain Extensions).
    • S'han eliminat els paràmetres de compilació del nucli RANDOM_TRUST_BOOTLOADER i RANDOM_TRUST_CPU, a favor de les opcions de línia d'ordres corresponents random.trust_bootloader i random.trust_cpu.
    • El mecanisme Landlock, que permet limitar la interacció d'un grup de processos amb l'entorn extern, ha afegit suport per al senyalador LANDLOCK_ACCESS_FS_TRUNCATE, que permet controlar l'execució d'operacions de truncament de fitxers.
  • Subsistema de xarxa
    • Per a IPv6, s'ha afegit suport per a PLB (Protective Load Balancing), un mecanisme d'equilibri de càrrega entre enllaços de xarxa destinat a reduir els punts de sobrecàrrega als commutadors del centre de dades. En canviar l'etiqueta de flux d'IPv6, el PLB canvia aleatòriament els camins de paquets per equilibrar la càrrega als ports del commutador. Per reduir la reordenació de paquets, aquesta operació es realitza després de períodes d'inactivitat sempre que sigui possible. L'ús de PLB als centres de dades de Google ha reduït el desequilibri de càrrega als ports de commutació en un 60% de mitjana, la pèrdua de paquets en un 33% i la latència en un 20%.
    • S'ha afegit un controlador per a dispositius MediaTek compatibles amb Wi-Fi 7 (802.11be).
    • S'ha afegit suport per a enllaços de 800 gigabits.
    • S'ha afegit la possibilitat de canviar el nom de les interfícies de xarxa sobre la marxa, sense aturar el treball.
    • S'ha afegit una menció de l'adreça IP a la qual va arribar el paquet als missatges de registre sobre SYN flood.
    • Per a UDP, s'ha implementat la possibilitat d'utilitzar taules hash separades per a diferents espais de noms de xarxa.
    • Per als ponts de xarxa, s'ha implementat el suport per al mètode d'autenticació MAB (MAC Authentication Bypass).
    • Per al protocol CAN (CAN_RAW), s'ha implementat suport per al mode de sòcol SO_MARK per adjuntar filtres de trànsit basats en fwmark.
    • ipset implementa un nou paràmetre de màscara de bits que us permet establir una màscara basada en bits arbitraris a l'adreça IP (per exemple, "ipset create set1 hash:ip bitmask 255.128.255.0").
    • S'ha afegit suport per processar capçaleres internes dins de paquets tunelitzats a nf_tables.
  • Оборудование
    • El subsistema "accel" s'ha afegit amb la implementació d'un marc per a acceleradors computacionals, que es pot subministrar en forma d'ASIC individuals o en forma de blocs IP dins del SoC i la GPU. Aquests acceleradors estan destinats principalment a accelerar la solució de problemes d'aprenentatge automàtic.
    • El controlador amdgpu inclou suport per als components IP GC, PSP, SMU i NBIO. Per als sistemes ARM64, s'implementa el suport per a DCN (Display Core Next). La implementació de la sortida de pantalla protegida s'ha mogut d'utilitzar DCN10 a DCN21 i ara es pot utilitzar quan es connecten diverses pantalles.
    • El controlador i915 (Intel) té suport estabilitzat per a targetes de vídeo Intel Arc (DG2/Alchemist) discretes.
    • El controlador Nouveau admet les GPU NVIDIA GA102 (RTX 30) basades en l'arquitectura Ampere. Per a les targetes nva3 (GT215), s'ha afegit la possibilitat de controlar la llum de fons.
    • S'ha afegit suport per a adaptadors sense fil basats en Realtek 8852BE, Realtek 8821CU, 8822BU, 8822CU, 8723DU (USB) i xips MediaTek MT7996, interfícies Broadcom BCM4377/4378/4387 Bluetooth, així com els controladors Motorcomm ytVIDIA yt8521 i Ethernet.
    • S'ha afegit compatibilitat ASoC (ALSA System on Chip) per a xips de so integrats HP Stream 8, Advantech MICA-071, Dell SKU 0C11, Intel ALC5682I-VD, Xiaomi Redmi Book Pro 14 2022, i.MX93, Armada 38x, RK3588. S'ha afegit suport per a la interfície d'àudio Focusrite Saffire Pro 40. S'ha afegit el còdec d'àudio Realtek RT1318.
    • S'ha afegit suport per a telèfons intel·ligents i tauletes de Sony (Xperia 10 IV, 5 IV, X i X compactes, OnePlus One, 3, 3T i Nord N100, Xiaomi Poco F1 i Mi6, Huawei Watch, Google Pixel 3a, Samsung Galaxy Tab 4 10.1.
    • S'ha afegit suport per a ARM SoC i Apple T6000 (M1 Pro), T6001 (M1 Max), T6002 (M1 Ultra), Qualcomm MSM8996 Pro (Snapdragon 821), SM6115 (Snapdragon 662), SM4250 (Snapdragon 460), SM6375 (Snapdragon 695), (SM670) plaques , SDM670 (Snapdragon 8976), MSM652 (Snapdragon 8956), MSM650 (Snapdragon 3326), RK351 Odroid-Go/rg310, Zyxel NSA8S, InnoComm i.MXXNUMXMM, Odroid Go.

Al mateix temps, la Latin American Free Software Foundation va formar una versió del nucli completament lliure 6.2 - Linux-libre 6.2-gnu, esborrat d'elements de microprogramari i controladors que contenien components propietaris o seccions de codi, l'abast dels quals està limitat per el fabricant. La nova versió neteja noves taques al controlador nouveau. La càrrega de blob està desactivada als controladors mt7622, ​​​​mt7996 wifi i bcm4377 bluetooth. S'han netejat els noms de blob als fitxers dts per a l'arquitectura Aarch64. Codi de neteja de blob actualitzat en diversos controladors i subsistemes. Va deixar de netejar el controlador s5k4ecgx, ja que es va eliminar del nucli.

Font: opennet.ru

Afegeix comentari