Rilascio del kernel Linux 5.19

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

Nell'annuncio, Linus ha affermato che molto probabilmente la prossima versione del kernel sarà numerata 6.0, poiché il ramo 5.x ha accumulato abbastanza versioni per cambiare il primo numero nel numero di versione. Il cambio di numerazione è effettuato per ragioni estetiche ed è un passaggio formale che allevia il disagio dovuto all'accumulo di un gran numero di numeri nella serie.

Linus ha anche affermato di aver utilizzato un laptop Apple basato sull'architettura ARM64 (Apple Silicon) con un ambiente Linux basato sulla distribuzione Asahi Linux per creare la versione. Non è la workstation principale di Linus, ma ha utilizzato la piattaforma per testarne l'idoneità al funzionamento del kernel e per assicurarsi di poter produrre rilasci del kernel mentre viaggiava con un laptop leggero a portata di mano. In precedenza, molti anni fa, Linus aveva esperienza nell'uso delle apparecchiature Apple per lo sviluppo: una volta utilizzava un PC basato sulla CPU ppc970 e un laptop Macbook Air.

La nuova versione include 16401 correzioni da 2190 sviluppatori (nell'ultima versione c'erano 16206 correzioni da 2127 sviluppatori), la dimensione della patch è di 90 MB (le modifiche hanno interessato 13847 file, sono state aggiunte 1149456 righe di codice, 349177 righe cancellate). Circa il 39% di tutte le modifiche introdotte nella versione 5.19 sono legate ai driver di dispositivo, circa il 21% delle modifiche sono legate all'aggiornamento del codice specifico per le architetture hardware, l'11% è legato allo stack di rete, il 4% è legato ai file system e il 3% sono legati ai sottosistemi interni del kernel.

Principali innovazioni nel kernel 5.19:

  • Sottosistema disco, I/O e file system
    • Il file system EROFS (Enhanced Read-Only File System), destinato all'uso su partizioni di sola lettura, è stato convertito per utilizzare il sottosistema fscache, che fornisce la memorizzazione nella cache dei dati. La modifica ha migliorato significativamente le prestazioni dei sistemi in cui un gran numero di contenitori vengono avviati da un'immagine basata su EROFS.
    • Una modalità di lettura su richiesta è stata aggiunta al sottosistema fscache, utilizzata per ottimizzare EROFS. La nuova modalità consente di organizzare la memorizzazione nella cache di lettura dalle immagini FS situate nel sistema locale. In contrasto con la modalità operativa inizialmente disponibile, che si concentra sulla memorizzazione nella cache nel file system locale dei dati trasferiti attraverso i file system di rete, la modalità “on-demand” delega le funzioni di recupero dei dati e di scrittura nella cache a un separato processo in background in esecuzione nello spazio utente.
    • XFS offre la possibilità di archiviare miliardi di attributi estesi in un i-node. Il numero massimo di estensioni per un file è stato aumentato da 4 miliardi a 247. È stata implementata una modalità per aggiornare atomicamente diversi attributi di file estesi contemporaneamente.
    • Il file system Btrfs ha ottimizzato il lavoro con i lock, consentendo 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 aumentate di circa il 3%. Il carico sulla cache della pagina durante l'esecuzione del comando "invia" è stato ridotto. La dimensione minima delle sottopagine è stata ridotta da 64K a 4K (è possibile utilizzare sottopagine più piccole delle pagine del kernel). È stata effettuata una transizione dall'utilizzo di un albero radice all'algoritmo XArrays.
    • È stata aggiunta una modalità al server NFS per estendere la conservazione dello stato di blocco impostato da un client che ha smesso di rispondere alle richieste. La nuova modalità consente di ritardare la rimozione del blocco fino a un giorno, a meno che un altro client non richieda un blocco concorrente. In modalità normale, il blocco viene annullato 90 secondi dopo che il client smette di rispondere.
    • Il sottosistema di tracciamento degli eventi in fanotify FS implementa il flag FAN_MARK_EVICTABLE, con il quale è possibile disabilitare il blocco degli i-node di destinazione nella cache, ad esempio, per ignorare i sottorami senza bloccare le loro parti nella cache.
    • Il driver per il file system FAT32 ha aggiunto il supporto per ottenere informazioni sull'ora di creazione del file tramite la chiamata di sistema statx con l'implementazione di una versione più efficiente e funzionale di stat(), che restituisce informazioni estese sul file.
    • Sono state apportate ottimizzazioni significative al driver exFAT per consentire la cancellazione simultanea di un gruppo di settori quando la modalità 'dirsync' è attiva, invece della cancellazione sequenziale settore per settore. Riducendo il numero di richieste di blocco dopo l'ottimizzazione, le prestazioni di creazione di un gran numero di directory sulla scheda SD sono aumentate di oltre il 73-85%, a seconda delle dimensioni del cluster.
    • Il kernel include il primo aggiornamento correttivo del driver ntfs3. Da quando ntfs3 è stato incluso nel kernel 5.15 lo scorso ottobre, il driver non è stato aggiornato e la comunicazione con gli sviluppatori è stata persa, ma gli sviluppatori hanno ora ripreso a pubblicare le modifiche. Le patch proposte hanno eliminato errori che portavano a perdite di memoria e arresti anomali, risolto problemi con l'esecuzione di xfstests, ripulito il codice inutilizzato e corretto errori di battitura.
    • Per OverlayFS è stata implementata la possibilità di mappare gli ID utente dei file system montati, che viene utilizzata per abbinare i file di un utente specifico su una partizione esterna montata con un altro utente sul sistema corrente.
  • Servizi di memoria e di sistema
    • Aggiunto il supporto iniziale per l'architettura del set di istruzioni LoongArch utilizzata nei processori Loongson 3 5000, che implementa il nuovo RISC ISA, simile a MIPS e RISC-V. L'architettura LoongArch è disponibile in tre versioni: ridotta a 32 bit (LA32R), normale a 32 bit (LA32S) e 64 bit (LA64).
    • Rimosso il codice per supportare il formato di file eseguibile a.out, che era deprecato nella versione 5.1. Il formato a.out è stato a lungo deprecato sui sistemi Linux e la generazione di file a.out non è supportata dagli strumenti moderni nelle configurazioni Linux predefinite. Il caricatore per i file a.out può essere implementato interamente nello spazio utente.
    • Il supporto per le opzioni di avvio specifiche per x86 è stato interrotto: nosp, nosmap, nosmep, noexec e noclflush).
    • Il supporto per la vecchia architettura CPU h8300 (Renesas H8/300), rimasta a lungo senza supporto, è stato interrotto.
    • Funzionalità estese relative alla risposta al rilevamento di split lock (“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 di cache della CPU. Tali blocchi portano ad un significativo calo delle prestazioni. Se prima, per impostazione predefinita, il kernel emetteva un avviso con informazioni sul processo che ha causato il blocco, ora il processo problematico verrà ulteriormente rallentato per preservare le prestazioni del resto del sistema.
    • Aggiunto il supporto per il meccanismo IFS (In-Field Scan) implementato nei processori Intel, che consente di eseguire test diagnostici della CPU di basso livello in grado di identificare problemi non rilevati dagli strumenti standard basati su codici di correzione errori (ECC) o bit di parità . I test eseguiti sono sotto forma di firmware scaricabile, progettato in modo simile agli aggiornamenti del microcodice. I risultati dei test sono disponibili tramite sysfs.
    • Aggiunta la possibilità di incorporare un file bootconfig nel kernel, che consente, oltre alle opzioni della riga di comando, di determinare i parametri del kernel tramite un file di impostazioni. L'incorporamento viene eseguito utilizzando l'opzione di assemblaggio 'CONFIG_BOOT_CONFIG_EMBED_FILE=»/PATH/TO/BOOTCONFIG/FILE»'. In precedenza, bootconfig veniva determinato allegandolo all'immagine initrd. L'integrazione nel kernel consente di utilizzare bootconfig in configurazioni senza initrd.
    • È stata implementata la possibilità di scaricare firmware compresso utilizzando l'algoritmo Zstandard. Una serie di file di controllo /sys/class/firmware/* è stata aggiunta a sysfs, consentendo di avviare il caricamento del firmware dallo spazio utente.
    • L'interfaccia I/O asincrona io_uring offre un nuovo flag, IORING_RECVSEND_POLL_FIRST, che, se impostato, invierà prima un'operazione di rete da elaborare utilizzando il polling, il che può far risparmiare risorse in situazioni in cui è accettabile l'elaborazione dell'operazione con un certo ritardo. io_uring ha anche aggiunto il supporto per la chiamata di sistema socket(), ha proposto nuovi flag per semplificare la gestione dei descrittori di file, ha aggiunto una modalità "multi-shot" per accettare più connessioni contemporaneamente nella chiamata accetta() e ha aggiunto operazioni per l'inoltro di NVMe comandi direttamente al dispositivo.
    • L'architettura Xtensa fornisce il supporto per lo strumento di debug KCSAN (Kernel Concurrency Sanitizer), progettato per rilevare dinamicamente le condizioni di competizione all'interno del kernel. Aggiunto anche il supporto per la modalità sospensione e i coprocessori.
    • Per l'architettura m68k (Motorola 68000), è stata implementata una macchina virtuale (simulatore di piattaforma) basata sull'emulatore Android Goldfish.
    • Per l'architettura AArch64 è stato implementato il supporto alle estensioni Armv9-A SME (Scalable Matrix Extension).
    • Il sottosistema eBPF consente di memorizzare puntatori digitati nelle strutture della mappa e aggiunge anche il supporto per puntatori dinamici.
    • Viene proposto un nuovo meccanismo proattivo di recupero della memoria che supporta il controllo dello spazio utente utilizzando il file memory.reclaim. Scrivendo un numero nel file specificato si tenterà di eliminare il numero corrispondente di byte dall'insieme associato al cgroup.
    • Migliorata la precisione dell'utilizzo della memoria durante la compressione dei dati nella partizione di swap utilizzando il meccanismo zswap.
    • Per l'architettura RISC-V, viene fornito il supporto per l'esecuzione di eseguibili a 32 bit su sistemi a 64 bit, viene aggiunta una modalità per associare attributi restrittivi alle pagine di memoria (ad esempio, per disabilitare la memorizzazione nella cache) e viene implementata la funzione kexec_file_load() .
    • L'implementazione del supporto per i sistemi Armv32T e Armv4 a 5 bit è adattata per l'uso in build di kernel multipiattaforma universali adatte a diversi sistemi ARM.
  • Virtualizzazione e sicurezza
    • Il sottosistema EFI implementa la capacità di trasferire in modo confidenziale informazioni segrete ai sistemi ospiti senza rivelarle al sistema host. I dati vengono forniti tramite la directory security/coco in securityfs.
    • La modalità di protezione di blocco, che limita l'accesso dell'utente root al kernel e blocca i percorsi di bypass dell'avvio sicuro UEFI, ha eliminato una scappatoia che consentiva di aggirare la protezione manipolando il debugger del kernel.
    • Sono incluse le patch volte a migliorare l'affidabilità e le prestazioni del generatore di numeri pseudo-casuali.
    • Quando si compila utilizzando Clang 15, viene implementato il supporto per il meccanismo di randomizzazione delle strutture del kernel.
    • Il meccanismo Landlock, che consente di limitare l'interazione di un gruppo di processi con l'ambiente esterno, fornisce il supporto per regole che consentono di controllare l'esecuzione delle operazioni di ridenominazione dei file.
    • Il sottosistema IMA (Integrity Measurement Architecture), progettato per verificare l'integrità dei componenti del sistema operativo utilizzando firme digitali e hash, è stato passato all'utilizzo del modulo fs-verity per la verifica dei file.
    • La logica delle azioni durante la disabilitazione dell'accesso non privilegiato al sottosistema eBPF è stata modificata: in precedenza tutti i comandi associati alla chiamata di sistema bpf() erano disabilitati e, a partire dalla versione 5.19, viene lasciato l'accesso ai comandi che non portano alla creazione di oggetti . Questo comportamento richiede che un processo privilegiato carichi un programma BPF, ma i processi non privilegiati possono interagire con il programma.
    • Aggiunto il supporto per l'estensione AMD SEV-SNP (Secure Nested Paging), che fornisce un lavoro sicuro con tabelle di pagine di memoria nidificate e protegge dagli attacchi "undeSErVed" e "SEVerity" sui processori AMD EPYC, che consentono di bypassare AMD SEV (Secure Encrypted Virtualization ) meccanismo di protezione.
    • Aggiunto il supporto al meccanismo Intel TDX (Trusted Domain Extensions), che consente di bloccare i tentativi di terze parti di accedere alla memoria crittografata delle macchine virtuali.
    • Il driver virtio-blk, utilizzato per emulare i dispositivi a blocchi, ha aggiunto il supporto per l'I/O utilizzando il polling che, secondo i test, ha ridotto la latenza di circa il 10%.
  • Sottosistema di rete
    • Il pacchetto include una serie di BIG patch TCP che consentono di aumentare la dimensione massima di un pacchetto TCP a 4 GB per ottimizzare il funzionamento delle reti interne dei data center ad alta velocità. Un aumento simile nella dimensione del pacchetto con una dimensione del campo di intestazione a 16 bit si ottiene attraverso l'implementazione di pacchetti "jumbo", la cui dimensione nell'intestazione IP è impostata su 0 e la dimensione effettiva viene trasmessa in un pacchetto separato a 32 bit. campo in un'intestazione allegata separata. Nei test delle prestazioni, l'impostazione della dimensione del pacchetto su 185 KB ha aumentato la velocità effettiva del 50% e ridotto significativamente la latenza di trasferimento dei dati.
    • È proseguito il lavoro sull'integrazione di strumenti nello stack di rete per tracciare i motivi della perdita dei pacchetti (codici motivo). Il codice motivo viene inviato quando la memoria associata al pacchetto viene liberata e consente situazioni quali l'eliminazione del pacchetto a causa di errori di intestazione, rilevamento spoofing rp_filter, checksum non valido, memoria esaurita, regole IPSec XFRM attivate, numero di sequenza TCP non valido, ecc.
    • Aggiunto il supporto per le connessioni MPTCP (MultiPath TCP) fallback per utilizzare il TCP normale, in situazioni in cui non è possibile utilizzare alcune funzionalità MPTCP. MPTCP è un'estensione del protocollo TCP per organizzare il funzionamento di una connessione TCP con la consegna di pacchetti contemporaneamente lungo più percorsi attraverso diverse interfacce di rete associate a diversi indirizzi IP. Aggiunta API per controllare i flussi MPTCP dallo spazio utente.
  • Attrezzatura
    • Aggiunte oltre 420 righe di codice relative al driver amdgpu, di cui circa 400 righe sono file di intestazione generati automaticamente per i dati di registro ASIC nel driver GPU AMD, e altre 22.5 righe forniscono l'implementazione iniziale del supporto per AMD SoC21. La dimensione totale dei driver per le 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), supporto aggiornato per USB-C e GPUVM ed è preparato per supportare le prossime generazioni di RDNA3 (RX 7000) e CDNA (AMD Instinct) piattaforme.
    • Il driver i915 (Intel) ha ampliato le funzionalità relative alla gestione dell'alimentazione. Aggiunti identificatori per le GPU Intel DG2 (Arc Alchemist) utilizzate sui laptop, fornito supporto iniziale per la piattaforma Intel Raptor Lake-P (RPL-P), aggiunte informazioni sulle schede grafiche Arctic Sound-M), implementato ABI per motori di elaborazione, aggiunto per Supporto delle schede DG2 per il formato Tile4; per i sistemi basati sulla microarchitettura Haswell, è implementato il supporto DisplayPort HDR.
    • Il driver Nouveau è passato all'utilizzo del gestore drm_gem_plane_helper_prepare_fb; l'allocazione statica della memoria è stata applicata ad alcune strutture e variabili. Per quanto riguarda l'utilizzo dei moduli kernel open source di NVIDIA in Nouveau, il lavoro finora si è ridotto all'identificazione ed eliminazione degli errori. In futuro, si prevede che il firmware pubblicato venga utilizzato per migliorare le prestazioni del driver.
    • Aggiunto un driver per il controller NVMe utilizzato nei computer Apple basati sul chip M1.

Allo stesso tempo, la Latin American Free Software Foundation ha formato una versione del kernel 5.19 completamente libera - Linux-libre 5.19-gnu, priva di elementi di firmware e driver contenenti componenti o sezioni di codice non libere, il cui scopo è limitato dal produttore. La nuova versione ripulisce i driver per pureLiFi X/XL/XC e TI AMx3 Wkup-M3 IPC. Codice di pulizia blob aggiornato in Silicon Labs WFX, AMD amdgpu, Qualcomm WCNSS Peripheral Image Loader, Realtek Bluetooth, Mellanox Spectrum, Marvell WiFi-Ex, Intel AVS, IFS, driver e sottosistemi pu3-imgu. È stata implementata l'elaborazione dei file devicetree Qualcomm AArch64. Aggiunto il supporto per il nuovo schema di denominazione dei componenti Sound Open Firmware. Interrotta la pulizia del driver ATM Ambassador, che è stato rimosso dal kernel. La gestione della pulizia dei blob in HDCP e Mellanox Core è stata spostata in tag kconfig separati.

Fonte: opennet.ru

Aggiungi un commento