Rilascio del kernel Linux 5.19

Dopo due mesi di sviluppo, Linus Torvalds ha presentato il rilascio del kernel Linux 5.19. Tra le modifiche più significative ci sono: supporto per l'architettura della CPU LoongArch, integrazione delle patch 'BIG TCP', modalità 'on-demand' in fscache, rimozione del codice per il supporto del formato a.out, possibilità di utilizzare ZSTD per la compressione del firmware, interfaccia per la gestione dello swapping della memoria dallo spazio utente, aumento dell'affidabilità e delle prestazioni del generatore di numeri pseudocasuali, supporto per le estensioni Intel IFS (In-Field Scan), AMD SEV-SNP (Secure Nested Paging), Intel TDX (Trusted Domain Extensions) e ARM SME (Scalable Matrix Extension).

Nell'annuncio, Linus ha dichiarato che probabilmente al prossimo rilascio del kernel sarà assegnato il numero 6.0, poiché nel ramo 5.x si sono accumulati sufficienti rilasci per modificare il primo numero nella versione. Il cambiamento della numerazione avviene per motivi estetici ed è un passo formale che allevia il disagio derivante dall'accumulo di un gran numero di versioni nella serie.

Linus ha inoltre menzionato di aver utilizzato un laptop Apple basato su architettura ARM64 (Apple Silicon) con un ambiente Linux basato sulla distribuzione Asahi Linux per generare il rilascio. Questa non è la workstation principale di Linus, ma ha utilizzato questa piattaforma per verificare la sua idoneità per lavorare sul kernel e per essere sicuro di poter generare rilascio del kernel in viaggio, avendo a disposizione un laptop leggero. Molti anni fa, Linus aveva già esperienza nell'uso di hardware Apple per lo sviluppo, avendo utilizzato un computer basato su CPU ppc970 e un laptop Macbook Air.

Nella nuova versione sono stati accettati 16401 aggiornamenti da 2190 sviluppatori (nel rilascio precedente c'erano 16206 aggiornamenti da 2127 sviluppatori), la dimensione della patch è di 90 MB (le modifiche hanno riguardato 13847 file, sono state aggiunte 1149456 righe di codice e sono state rimosse 349177 righe). Circa il 39% di tutte le modifiche presentate nel 5.19 riguardano i driver dei dispositivi, circa il 21% delle modifiche riguarda l'aggiornamento del codice specifico per le architetture hardware, l'11% riguarda lo stack di rete, il 4% riguarda i file system e il 3% riguarda i sottosistemi interni del kernel.

Le principali novità nel kernel 5.19:

  • Sottosistema di disco, input/output e file system
    • Il file system EROFS (Enhanced Read-Only File System), progettato per l'utilizzo su partizioni accessibili in modalità di sola lettura, è stato aggiornato per utilizzare il sotto-sistema fscache, che fornisce la memorizzazione nella cache dei dati. Questa modifica ha permesso di aumentare notevolmente le prestazioni dei sistemi in cui viene avviato un gran numero di container da un'immagine basata su EROFS.
    • Nella sotto-sistema fscache è stata aggiunta una modalità di lettura su richiesta (‘on-demand’), attivata per ottimizzare EROFS. Questa nuova modalità consente di organizzare la memorizzazione nella cache delle letture da immagini FS presenti nel sistema locale. A differenza della modalità di funzionamento inizialmente disponibile, orientata alla memorizzazione nella cache nella filesystem locale dei dati trasmessi tramite sistemi di file di rete, la modalità ‘on-demand’ delega le funzioni di estrazione dei dati e della loro memorizzazione nella cache a un processo in background separato, eseguito nello spazio utente.
    • In XFS è stata garantita la possibilità di memorizzare miliardi di attributi estesi nell'i-node. Il numero massimo di extents per un singolo file è stato aumentato da 4 miliardi a 247. È stata implementata una modalità per l'aggiornamento atomico di più attributi estesi di un file.
    • Nel file system Btrfs è stata ottimizzata la gestione dei lock, il che ha consentito un aumento delle prestazioni di circa il 7% durante la scrittura diretta in modalità nowait. Le prestazioni delle operazioni in modalità NOCOW (senza copy-on-write) sono state migliorate di circa il 3%. È stata ridotta il carico sulla cache delle pagine durante l'esecuzione del comando 'send'. La dimensione minima delle sottopagine è stata ridotta da 64K a 4K (è possibile utilizzare sottopagine di dimensioni inferiori a quelle delle pagine del kernel). È stato effettuato il passaggio dall'uso dell'albero radice (radix tree) all'algoritmo XArrays.
    • Nel server NFS è stata aggiunta una modalità di estensione della conservazione dello stato del lock, impostato dal client, che ha smesso di rispondere alle richieste. La nuova modalità consente di ritardare la pulizia del lock fino a un giorno, se un altro client non richiede un lock concorrente. In modalità normale, il lock viene ripulito dopo 90 secondi dalla cessazione della risposta del client.
    • Nella sotto-sistema di tracciamento eventi nel FS fanotify è stata implementata la flag FAN_MARK_EVICTABLE, tramite la quale è possibile disabilitare il bloccaggio degli i-node target nella cache, ad esempio, per ignorare le ramificazioni senza bloccare le loro parti nella cache.
    • Nel driver per il filesystem FAT32 è stata aggiunta la supporto per l'ottenimento delle informazioni sulla data di creazione del file tramite la chiamata di sistema statx, con un'implementazione più efficiente e funzionale della stat(), che restituisce informazioni estese sul file.
    • Significative ottimizzazioni sono state apportate al driver exFAT, relative alla gestione della cancellazione simultanea di un gruppo di settori in modalità 'dirsync', invece della cancellazione sequenziale settore per settore. Grazie alla riduzione del numero di richieste di blocchi dopo le ottimizzazioni, le prestazioni di creazione di un gran numero di cataloghi su schede SD sono aumentate di oltre il 73-85% a seconda delle dimensioni del cluster.
    • È stato incluso nel kernel il primo aggiornamento correttivo del driver ntfs3. Dalla sua inclusione nel kernel 5.15 nell'ottobre dello scorso anno, il driver non è stato aggiornato e i contatti con gli sviluppatori erano stati persi, ma ora gli sviluppatori hanno ripreso la pubblicazione delle modifiche. Nei patch proposti sono stati corretti bug che causavano perdite di memoria e crash, risolti problemi con l'esecuzione di xfstests, è stata effettuata una pulizia del codice non utilizzato e corretti errori di battitura.
    • Per OverlayFS è stata implementata la possibilità di mappare gli identificatori degli utenti dei filesystem montati, utilizzata per associare i file di un determinato utente su una partizione montata di un altro utente nel sistema attuale.
  • Memoria e servizi di sistema
    • È stata aggiunta la supporto iniziale per l'architettura del set di istruzioni LoongArch, utilizzata nei processori Loongson 3 5000 e che implementa un nuovo ISA RISC, simile a MIPS e RISC-V. L'architettura LoongArch è disponibile in tre varianti: ridotta a 32 bit (LA32R), normale a 32 bit (LA32S) e a 64 bit (LA64).
    • È stato rimosso il codice per supportare il formato dei file eseguibili a.out, che è stato dichiarato obsoleto nella versione 5.1. Il formato a.out non è più utilizzato sui sistemi Linux, e la generazione di file a.out non è supportata dagli attuali strumenti nelle configurazioni predefinite per Linux. Un caricatore per i file a.out può essere implementato completamente nello spazio utente.
    • È stata interrotta la supporto per le opzioni di avvio specifiche per l'architettura x86: nosep, nosmap, nosmep, noexec e noclflush).
    • È stata interrotta la supporto per l'architettura CPU obsoleta h8300 (Renesas H8/300), ormai da tempo non più mantenuta.
    • Sono state ampliate le funzionalità relative alla reazione all'identificazione di blocchi suddivisi («split lock»), che si verificano quando si accede a dati non allineati in memoria, a causa del fatto che durante l'esecuzione di un'istruzione atomica i dati attraversano due linee della cache CPU. Tali blocchi portano a un significativo calo delle prestazioni. In precedenza, il core emetteva un avviso con informazioni sul processo che aveva provocato il blocco; ora, il processo problematico sarà ulteriormente rallentato per mantenere le prestazioni del resto del sistema.
    • È stato aggiunto il supporto per il meccanismo IFS (In-Field Scan) implementato nei processori Intel, che consente di eseguire test diagnostici a basso livello sul CPU in grado di individuare problemi non rilevati dagli strumenti standard basati su codici di correzione degli errori (ECC) o bit di parità. I test eseguiti vengono presentati sotto forma di firmware caricabile, simile agli aggiornamenti del microcodice. I risultati dei test sono disponibili tramite sysfs.
    • È stata aggiunta la possibilità di incorporare nel kernel un file bootconfig, che consente di definire i parametri di funzionamento del kernel tramite un file di configurazione oltre alle opzioni della riga di comando. L'incorporamento avviene tramite l'opzione di compilazione ‘CONFIG_BOOT_CONFIG_EMBED_FILE=»/PATH/TO/BOOTCONFIG/FILE»‘. In precedenza, il bootconfig veniva definito tramite l'allegato all'immagine initrd. L'incorporamento nel kernel consente di utilizzare il bootconfig in configurazioni senza initrd.
    • È stata implementata la possibilità di caricare firmware compressi utilizzando l'algoritmo Zstandard. In sysfs è stato aggiunto un insieme di file di controllo /sys/class/firmware/*, che consente di avviare il caricamento dei firmware dallo spazio utente.
    • Nell'interfaccia di input/output asincrono io_uring è stata proposta una nuova flag IORING_RECVSEND_POLL_FIRST, che, quando attivata, permette che l'operazione di rete venga inizialmente gestita tramite polling, il che può risparmiare risorse in situazioni in cui è consentito gestire l'operazione con un certo ritardo. In io_uring è stato anche aggiunto il supporto per la chiamata di sistema socket(), sono state introdotte nuove flag per semplificare la gestione dei descrittori di file, è stata aggiunta la modalità «multi-shot» per accettare più connessioni in un'unica chiamata accept(), e sono state aggiunte operazioni per inoltrare comandi NVMe direttamente al dispositivo.
    • Per l'architettura Xtensa è supportato lo strumento di debug KCSAN (Kernel Concurrency Sanitizer), progettato per l'identificazione dinamica delle condizioni di competizione all'interno del kernel. È stata anche aggiunta la supporto per la modalità di sospensione e i coprocessori.
    • Per l'architettura m68k (Motorola 68000) è stata implementata macchina virtuale (simulatore della piattaforma), basata sull'emulatore Android Goldfish.
    • Per l'architettura AArch64 è stata implementata la supporto per le estensioni Armv9-A SME (Scalable Matrix Extension).
    • Nel sottosistema eBPF è consentito il salvataggio di puntatori tipizzati nelle strutture map, e sono stati aggiunti il supporto per puntatori dinamici.
    • È stato proposto un nuovo meccanismo proattivo di espulsione della memoria, che supporta la gestione dallo spazio utente tramite il file memory.reclaim. Scrivere un numero in questo file porterà a un tentativo di espulsione del corrispondente numero di byte dal set associato al cgroup.
    • È stata aumentata la precisione nel conteggio dell'uso della memoria durante la compressione dei dati nella partizione di swap grazie al meccanismo zswap.
    • Per l'architettura RISC-V è fornita la supporto per l'esecuzione di file eseguibili a 32 bit su sistemi a 64 bit, è stata aggiunta una modalità per legare gli attributi limitanti alle pagine di memoria (ad esempio, per vietare la memorizzazione nella cache) ed è stata implementata la funzione kexec_file_load().
    • L'implementazione del supporto per i sistemi a 32 bit Armv4T e Armv5 è stata adattata per l'uso in build di kernel multipiattaforma universali, adatte a diversi sistemi ARM.
  • Virtualizzazione e sicurezza
    • Nel sottosistema EFI è stata implementata la possibilità di trasmettere informazioni riservate ai sistemi guest senza rivelarle al sistema host. I dati vengono forniti tramite la directory security/coco in securityfs.
    • Nella modalità di protezione Lockdown, che limita l'accesso dell'utente root al kernel e blocca i percorsi di bypass del Secure Boot UEFI, è stata rimossa una vulnerabilità che consentiva di eludere la protezione tramite manomissioni con il debugger del kernel.
    • Sono stati inclusi patch mirati a migliorare l'affidabilità e le prestazioni del generatore di numeri pseudo-casuali.
    • Durante la compilazione con Clang 15 è stata implementata la supporto per il meccanismo di randomizzazione delle strutture del kernel.
    • Nel meccanismo Landlock, che consente di limitare l'interazione di un gruppo di processi con l'ambiente esterno, è stata fornita la supporto per regole che consentono di controllare l'esecuzione delle operazioni di rinominazione dei file.
    • Il sottosistema IMA (Integrity Measurement Architecture), destinato a verificare l'integrità dei componenti del sistema operativo tramite firme digitali e hash, è stato adattato per utilizzare il modulo fs-verity per la verifica dei file.
    • È stata modificata la logica delle azioni in caso di disattivazione dell'accesso non privilegiato al sottosistema eBPF: in precedenza venivano disattivate tutte le istruzioni relative alla chiamata di sistema bpf(), mentre a partire dalla versione 5.19 è stato mantenuto l'accesso alle istruzioni che non comportano la creazione di oggetti. Con questo comportamento, per caricare un programma BPF è necessario un processo privilegiato, ma in seguito i processi non privilegiati possono interagire con questo programma.
    • È stata aggiunta la supporto per l'estensione AMD SEV-SNP (Secure Nested Paging), che garantisce un funzionamento sicuro con tabelle di pagine annidate e protegge dagli attacchi 'undeSErVed' e 'SEVerity' sui processori AMD EPYC, consentendo di oltrepassare il meccanismo di protezione AMD SEV (Secure Encrypted Virtualization).
    • È stata aggiunta la supporto per il meccanismo Intel TDX (Trusted Domain Extensions), che consente di bloccare i tentativi di accesso non autorizzato alla memoria crittografata. macchine virtuali.
    • Nel driver virtio-blk, utilizzato per l'emulazione dei dispositivi a blocchi, è stata aggiunta la supporto per l'input/output utilizzando il polling, il che, secondo i test condotti, ha consentito di ridurre i ritardi di circa il 10%.
  • Sottosistema di rete
    • È stata inclusa una serie di patch BIG TCP che consentono di aumentare la dimensione massima del pacchetto TCP fino a 4 GB per ottimizzare il funzionamento delle reti interne ad alta velocità nei data center. Questo aumento della dimensione del pacchetto, in presenza di un campo di intestazione di 16 bit, viene raggiunto tramite l'implementazione di pacchetti 'jumbo', la cui dimensione nell'intestazione IP è impostata a 0, mentre la dimensione effettiva viene trasmessa in un campo separato a 32 bit in un'intestazione separata. Nei test di prestazioni, l'impostazione della dimensione del pacchetto a 185 KB ha consentito di aumentare la larghezza di banda del 50% e di ridurre notevolmente i ritardi nella trasmissione dei dati.
    • Sono continuate le attività per l'integrazione nel stack di rete di strumenti per il monitoraggio delle cause di scarto dei pacchetti (codici reason). Il codice di causa viene trasmesso durante il rilascio della memoria associata al pacchetto e consente di considerare situazioni come lo scarto di pacchetti a causa di errori di compilazione dei campi nell'intestazione, il rilevamento di spoofing da parte del filtro rp_filter, checksum errato, mancanza di memoria, attivazione delle regole IPSec XFRM, numero di sequenza TCP errato, ecc.
    • È stato aggiunto il supporto per il rollback delle connessioni MPTCP (MultiPath TCP) all'uso del TCP normale, in situazioni in cui alcune funzionalità di MPTCP non possono essere utilizzate. MPTCP è un'estensione del protocollo TCP per gestire una connessione TCP con la consegna di pacchetti su più percorsi contemporaneamente attraverso diverse interfacce di rete associate a diversi indirizzi IP. È stata aggiunta un'API per gestire i flussi MPTCP dallo spazio utente.
  • Apparecchiatura
    • Sono state aggiunte oltre 420 mila righe di codice relative al driver amdgpu, di cui circa 400 mila righe riguardano file di intestazione generati automaticamente con i dati per i registri ASIC nel driver per GPU AMD, e ulteriori 22,5 mila righe forniscono l'implementazione iniziale del supporto per AMD SoC21. La dimensione totale del driver per GPU AMD ha superato i 4 milioni di righe di codice. Oltre a SoC21, il driver AMD include il supporto per SMU 13.x (System Management Unit), è stato aggiornato il supporto USB-C e GPUVM, e sono stati compiuti preparativi per il supporto delle prossime generazioni di piattaforme RDNA3 (RX 7000) e CDNA (AMD Instinct).
    • Nel driver i915 (Intel) sono state ampliate le funzionalità relative alla gestione del consumo energetico. Sono stati aggiunti gli identificatori GPU Intel DG2 (Arc Alchemist), utilizzati nei laptop, è stato fornito il supporto iniziale per la piattaforma Intel Raptor Lake-P (RPL-P), sono state aggiunte informazioni sulle schede grafiche Arctic Sound-M, è stata implementata una ABI per i motori di calcolo, è stato aggiunto il supporto per il formato Tile4 per le schede DG2, e per i sistemi basati sull'architettura microarchitetturale Haswell è stato implementato il supporto per DisplayPort HDR.
    • Nel driver Nouveau è stato attuato il passaggio all'uso del gestore drm_gem_plane_helper_prepare_fb, per alcune strutture e variabili è stata applicata l'allocazione statica della memoria. Per quanto riguarda l'uso dei testi sorgente aperti dei moduli del kernel forniti da NVIDIA, il lavoro attuale si concentra sull'identificazione e la risoluzione dei bug. In futuro, si prevede di utilizzare il firmware pubblicato per migliorare le prestazioni del driver.
    • È stato aggiunto un driver per il controller NVMe utilizzato nei computer Apple basati sul chip M1.

Contemporaneamente, il fondo latinoamericano per il software libero ha rilasciato una versione completamente libera del kernel 5.19 — Linux-libre 5.19-gnu, purificato da elementi di firmware e driver contenenti componenti non liberi o sezioni di codice, la cui applicabilità è limitata dal produttore. In questo nuovo rilascio è stata effettuata una pulizia dei driver per pureLiFi X/XL/XC e TI AMx3 Wkup-M3 IPC. È stato aggiornato il codice di pulizia dei blob nei driver e nelle sottosistemi Silicon Labs WFX, AMD amdgpu, Qualcomm WCNSS Peripheral Image Loader, Realtek Bluetooth, Mellanox Spectrum, Marvell WiFi-Ex, Intel AVS, IFS, pu3-imgu drivers. È stata implementata la gestione dei file devicetree di Qualcomm AArch64. È stato aggiunto il supporto per un nuovo schema di denominazione dei componenti Sound Open Firmware. È stata interrotta la pulizia del driver ATM Ambassador, rimosso dal kernel. La gestione della pulizia dei blob in HDCP e Mellanox Core è stata trasferita in tag kconfig separati.

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster