Dopo due mesi di sviluppo, Linus Torvalds ha presentato il rilascio del kernel Linux 5.12. Tra le modifiche più significative: supporto per dispositivi a blocchi zonati in Btrfs, possibilità di mappare gli identificatori degli utenti per i file system, rimozione delle architetture ARM obsolete, modalità di scrittura 'impaZiente' in NFS, meccanismo LOOKUP_CACHED per la determinazione dei percorsi dei file dalla cache, supporto per istruzioni atomiche in BPF, sistema di debug KFENCE per identificare errori nella gestione della memoria, modalità di polling NAPI nel kernel attiva in un thread separato nel stack di rete, hypervisor ACRN, possibilità di modificare dinamicamente il modello di preempt nel pianificatore dei processi e supporto per ottimizzazioni LTO durante la compilazione in Clang.
Nella nuova versione sono stati accettati 14170 (nel rilascio precedente 15480) correzioni da 1946 (1991) sviluppatori, la dimensione della patch è di 38 MB (le modifiche hanno riguardato 12102 (12090) file, aggiunti 538599 (868025) righe di codice, e rimosse 333377 (261456) righe). Circa il 43% di tutte le modifiche presentate in 5.12 sono legate ai driver dei dispositivi, circa il 17% delle modifiche riguardano l'aggiornamento del codice specifico per le architetture hardware, il 12% è relativo allo stack di rete, il 5% ai file system e il 4% ai sottosistemi interni del kernel.
Novità principali:
- Sottosistema di disco, input/output e file system
- È stata implementata la possibilità di mappare gli identificatori degli utenti per i file system montati (è possibile associare file di un utente in una partizione remota con un altro utente nel sistema attuale). Il mapping è supportato per i file system FAT, ext4 e XFS. La funzionalità proposta semplifica la condivisione di file tra utenti diversi e su computer differenti, incluso che il mapping verrà applicato nel meccanismo delle directory home portabili systemd-homed, permettendo agli utenti di spostare le loro directory home su supporti esterni e utilizzarle su computer diversi, i cui identificatori degli utenti non coincidono. Un'altra applicazione utile è l'organizzazione dell'accesso condiviso ai file da un host esterno, senza modificare effettivamente i dati sui proprietari dei file nel file system.
- Nel kernel sono stati accettati i patch LOOKUP_CACHED, che consentono di eseguire operazioni di determinazione del percorso file dallo spazio utente senza bloccaggi, basandosi esclusivamente sui dati già presenti nella cache. La modalità LOOKUP_CACHED viene attivata nella chiamata openat2() tramite la trasmissione del flag RESOLVE_CACHED, grazie al quale i dati vengono forniti solo dalla cache e, se la determinazione del percorso richiede l'accesso alla memoria, viene restituito l'errore EAGAIN.
- Nel file system Btrfs è stato aggiunto il supporto iniziale per i dispositivi a blocchi zonati (dispositivi su dischi magnetici rigidi o NVMe SSD, il cui spazio di memorizzazione è suddiviso in zone che costituiscono gruppi di blocchi o settori, dove è consentito solo l'aggiunta sequenziale dei dati con l'aggiornamento di interi gruppi di blocchi). Nella modalità di sola lettura è stato implementato il supporto per i blocchi contenenti metadati e dati di dimensioni inferiori alla pagina (subpage).
- Nel file system F2FS è stata aggiunta la possibilità di scegliere l'algoritmo e il livello di compressione. È stato introdotto il supporto per un alto livello di compressione per l'algoritmo LZ4. È stata implementata l'opzione di montaggio checkpoint_merge.
- È stata introdotta una nuova comando ioctl FS_IOC_READ_VERITY_METADATA per la lettura di metadati da file protetti tramite fs-verity.
- Nel client NFS è stata implementata la modalità di scrittura "immediata" (writes=eager), che, se attivata, invia immediatamente le operazioni di scrittura su file al server, bypassando la cache a pagina. Questa modalità consente di ridurre il consumo di memoria, fornisce informazioni immediate sul completamento dello spazio libero nel file system e, in alcune situazioni, può migliorare le prestazioni.
- Nel CIFS (SMB) sono state aggiunte nuove opzioni di montaggio: acregmax per gestire la cache dei file e acdirmax per gestire la cache dei metadati delle cartelle.
- In XFS è stata attivata la modalità di verifica delle quote multithread, accelerata l'esecuzione di fsync e preparato il codice growfs per attuare la funzionalità di ridimensionamento del file system.
- Memoria e servizi di sistema
- È stata aggiunta la sottosistema DTMP (Dynamic Thermal Power Management), che consente di regolare dinamicamente il consumo energetico dei vari dispositivi in base alle restrizioni generali di temperatura impostate.
- È stata implementata la possibilità di assemblare il kernel con il compilatore Clang includendo ottimizzazioni durante la fase di collegamento (LTO, Link Time Optimization). Le ottimizzazioni LTO si distinguono per il fatto che tengono conto dello stato di tutti i file coinvolti nel processo di assemblaggio, mentre le modalità tradizionali di ottimizzazione ottimizzano ogni file singolarmente e non considerano le condizioni di invocazione delle funzioni definite in altri file. Ad esempio, con LTO è possibile l'inlining delle funzioni da altri file, non viene incluso nel file eseguibile il codice non utilizzato, viene effettuato un controllo dei tipi e un'ottimizzazione generale a livello di progetto. Attualmente, il supporto per LTO è limitato alle architetture x86 e ARM64.
- È stata fornita la possibilità di scegliere le modalità di preemption (PREEMPT) nel pianificatore dei processi durante la fase di avvio (preempt=none/voluntary/full) o durante l'esecuzione tramite debugfs (/debug/sched_debug), nel caso venga indicata durante l'assemblaggio del kernel l'impostazione PREEMPT_DYNAMIC. In precedenza, la modalità di preemption poteva essere impostata solo a livello di parametri di assemblaggio. Questa modifica consente alle distribuzioni di fornire kernel con la modalità PREEMPT attivata, garantendo latenza minima per i desktop a costo di una leggera diminuzione della larghezza di banda, e se necessario, di tornare alle modalità PREEMPT_VOLUNTARY (modalità intermedia per desktop) o PREEMPT_NONE (che garantisce la massima larghezza di banda per server).
- Nella sottosistema BPF è stato aggiunto il supporto per le operazioni atomiche BPF_ADD, BPF_AND, BPF_OR, BPF_XOR, BPF_XCHG e BPF_CMPXCHG.
- Ai programmi BPF è stata fornita la possibilità di accedere ai dati nello stack utilizzando puntatori con offset variabile. Ad esempio, prima era possibile accedere a un array nello stack solo utilizzando un indice fisso, mentre ora è possibile utilizzare uno variabile. Il controllo dell'accesso è effettuato dal verificatore BPF solo entro i limiti esistenti. Questa possibilità è riservata ai programmi privilegati per timore dell'esploitazione di vulnerabilità legate all'esecuzione speculativa del codice.
- È stata aggiunta la possibilità di collegare programmi BPF a punti di tracciamento 'bare', non correlati agli eventi di tracciamento visibili nello spazio utente (per tali punti di tracciamento non è garantita la conservazione dell'ABI).
- È stato implementato il supporto per il bus CXL 2.0 (Compute Express Link), utilizzato per organizzare un'interazione ad alta velocità tra CPU e dispositivi di memoria (consente di utilizzare dispositivi di memoria esterni come parte della RAM o della memoria permanente, come se tale memoria fosse collegata tramite un controller di memoria standard nella CPU).
- È stato aggiunto il driver nvmem per ottenere dati dalle aree di memoria riservate dai firmware, direttamente non accessibili per Linux (ad esempio, memoria EEPROM, fisicamente accessibile solo al firmware, o dati disponibili solo nelle prime fasi di avvio).
- È stato rimosso il supporto per il sistema di profilazione 'oprofile', che non ha avuto una diffusione adeguata ed è stato superato da un meccanismo più moderno chiamato perf.
- Nell'interfaccia di input/output asincrono io_uring è stata garantita l'integrazione con cgroup, che controllano l'uso della memoria.
- Per l'architettura RISC-V è stato implementato il supporto per i sistemi NUMA, così come per i meccanismi kprobes e uprobes.
- È stata aggiunta la possibilità di utilizzare la chiamata di sistema kcmp() indipendentemente dalla funzionalità di checkpoint/restaurazione dello stato dei processi.
- Sono stati rimossi i macro EXPORT_UNUSED_SYMBOL() e EXPORT_SYMBOL_GPL_FUTURE(), che non vengono utilizzati nella pratica da molti anni.
- Virtualizzazione e sicurezza
- È stato aggiunto un meccanismo di protezione KFence (Kernel Electric Fence), che cattura errori nella gestione della memoria, come l'uscita dai limiti del buffer e l'accesso dopo il rilascio della memoria. A differenza del meccanismo di debug KASAN, il sottosistema KFence si distingue per l'elevata velocità di funzionamento e i bassi costi operativi, che consentono di catturare errori di gestione della memoria che si manifestano solo su sistemi operativi o dopo un lungo periodo di funzionamento.
- È stato aggiunto il supporto per il hypervisor ACRN, progettato tenendo conto della prontezza per compiti in tempo reale e dell'idoneità per l'uso in sistemi critici. ACRN garantisce costi operativi minimi, bassa latenza e una risposta adeguata nell'interazione con l'hardware. Supporta la virtualizzazione delle risorse CPU, input/output, sottosistema di rete, operazioni con grafica e suono. ACRN può essere utilizzato per avviare più ambienti isolati. macchine virtuali nei blocchi di controllo elettronici, nei cruscotti, nei sistemi informativi automobilistici, nei dispositivi IoT dei consumatori e in altre tecnologie embedded. ACRN supporta due tipi di sistemi guest: il Service VM privilegiato, utilizzato per la gestione delle risorse di sistema (CPU, memoria, input/output, ecc.), e il User VM, in cui possono essere eseguite distribuzioni Linux, Android e Windows.
- Nella sottosistema IMA (Integrity Measurement Architecture), che fornisce il mantenimento di un database di hash per la verifica dell'integrità dei file e dei relativi metadati, è stata introdotta la possibilità di verificare l'integrità dei dati del kernel stesso, ad esempio per monitorare le modifiche alle regole di SELinux.
- Nel hypervisor KVM è stata aggiunta la funzione di intercettazione delle hypercall di Xen e il loro inoltro a un emulatore in esecuzione nello spazio utente.
- È stata aggiunta la possibilità di utilizzare Linux come ambiente root per l'hypervisor Hyper-V. L'ambiente root ha accesso diretto all'hardware e viene utilizzato per avviare i sistemi guest (analogo a Dom0 in Xen). Finora Hyper-V (Microsoft Hypervisor) supportava Linux solo negli ambienti guest, ma lo stesso hypervisor era gestito da un ambiente basato su Windows.
- È stata aggiunta la supporto per la crittografia inline per le schede eMMC, che consente di utilizzare i meccanismi di crittografia incorporati nel controllore di archiviazione, che effettuano la crittografia e decrittografia trasparente di input/output.
- È stata rimossa dal sottosistema crittografico la sottomodifica non utilizzata per gli hash RIPE-MD 128/256/320 e Tiger 128/160/192, così come per il cifrario a flusso Salsa20, che è stato sostituito dall'algoritmo ChaCha20. L'algoritmo blake2 è stato aggiornato alla realizzazione blake2s.
- Sottosistema di rete
- È stata aggiunta la possibilità di spostare il gestore di polling NAPI dei dispositivi di rete in un thread kernel separato, il che consente di migliorare le prestazioni per alcuni tipi di carico. Prima, il polling veniva eseguito nel contesto di softirq e non era coperto dal pianificatore di attività, rendendo difficile effettuare ottimizzazioni fini per ottenere le massime prestazioni. L'esecuzione in un thread kernel separato consente di monitorare il gestore di polling dallo spazio utente, di allegarlo a singoli core CPU e di tenerne conto durante la pianificazione dello switching delle attività. Per attivare la nuova modalità, è stato proposto il parametro /sys/class/net//threaded.
- È proseguita l'integrazione nel nucleo MPTCP (MultiPath TCP), un'estensione del protocollo TCP per la gestione delle connessioni TCP con la consegna dei pacchetti su più percorsi contemporaneamente attraverso diversi interfacce di rete collegate a indirizzi IP diversi. Nella nuova versione è stata aggiunta la possibilità di assegnare priorità a determinati flussi, permettendo, ad esempio, di attivare flussi di riserva che si attivano solo in caso di problemi con il flusso principale.
- In IGMPv3 è stato aggiunto il supporto per il meccanismo EHT (Explicit Host Tracking).
- Nel meccanismo di filtraggio dei pacchetti netfilter è stata implementata la possibilità di possedere determinate tabelle per ottenere un controllo esclusivo (ad esempio, un processo di monitoraggio del firewall può riservare specifiche tabelle, impedendo a chiunque altro di intervenire in esse).
- Apparecchiatura
- È stata effettuata una pulizia delle piattaforme ARM obsolete e abbandonate. È stato rimosso il codice delle piattaforme efm32, picoxcell, prima2, tango, u300, zx e c6x, insieme ai relativi driver.
- Nel driver amdgpu è stata implementata la possibilità di overclocking (OverDrive) delle schede basate su GPU Sienna Cichlid (Navi 22, Radeon RX 6xxx). È stato aggiunto il supporto per il formato pixel FP16 per il DCE (display controller engine) dalla 8ª alla 11ª generazione. Per GPU Navy Flounder (Navi 21) e APU Van Gogh è stata realizzata la possibilità di reset del GPU.
- Nel driver i915 per le schede grafiche Intel è stato implementato il parametro i915.mitigations per disabilitare i meccanismi di isolamento e protezione a favore di un aumento delle prestazioni. Per i chip a partire da Tiger Lake è stato abilitato il supporto per il meccanismo VRR (Variable Rate Refresh), che consente di adattare dinamicamente la frequenza di aggiornamento del monitor per garantire fluidità e assenza di scatti durante i giochi. È stato attivato il supporto per la tecnologia Intel Clear Color per migliorare la precisione della resa cromatica. È stato aggiunto il supporto per DP-HDMI 2.1. È stata implementata la possibilità di gestire l'illuminazione dei pannelli eDP. Per GPU Gen9 con supporto LSPCON (Level Shifter and Protocol Converter) è stato attivato il supporto per HDR.
- Nel driver nouveau è stato aggiunto il supporto iniziale per GPU NVIDIA basate sull'architettura GA100 (Ampere).
- Nel driver msm è stato aggiunto il supporto per le GPU Adreno 508, 509 e 512, utilizzate nei chip SDM (Snapdragon) 630, 636 e 660.
- È stato aggiunto il supporto per le schede audio Sound BlasterX AE-5 Plus, Lexicon I-ONIX FW810s e Pioneer DJM-750. È stato aggiunto il supporto per il sottosistema audio Intel Alder Lake PCH-P. È stata implementata la simulazione software della connessione e disconnessione del jack audio per il debug dei gestori nello spazio utente.
- È stata aggiunta la compatibilità con le console Nintendo 64, in produzione dal 1996 al 2003 (i precedenti tentativi di portare Linux su Nintendo 64 non sono stati completati e avevano lo status di Vaporware). Come motivazione per la creazione di un nuovo porting per una piattaforma obsoleta, non più in produzione da quasi vent'anni, si cita il desiderio di stimolare lo sviluppo di emulatori e semplificare il trasferimento dei giochi.
- È stato aggiunto il driver per il controller Sony PlayStation 5 DualSense.
- È stata aggiunta la compatibilità con piattaforme e dispositivi ARM: PineTab, Snapdragon 888 / SM8350, Snapdragon MTP, Two Beacon EmbeddedWorks, Intel eASIC N5X, Netgear R8000P, Plymovent M2M, Beacon i.MX8M Nano, NanoPi M4B.
- È stata aggiunta la compatibilità con gli smartphone Purism Librem5 Evergreen, Xperia Z3+/Z4/Z5, ASUS Zenfone 2 Laser, BQ Aquaris X5, OnePlus6, OnePlus6T, Samsung GT-I9070.
- È stato aggiunto il driver bcm-vk per le schede acceleratrici Broadcom VK (ad esempio, le schede PCIe Valkyrie e Viper), che possono essere utilizzate per esternalizzare a un dispositivo separato le operazioni di elaborazione audio, video e immagini, nonché compiti legati alla crittografia.
- È stata aggiunta la sottosupporto per la piattaforma Lenovo IdeaPad con gestione della ricarica continua e illuminazione della tastiera. È anche fornita la compatibilità con il profilo ACPI per la piattaforma ThinkPad con gestione delle modalità di consumo energetico. È stato aggiunto il driver per il sottosistema HID del Lenovo ThinkPad X1 Tablet Gen 2.
- È stato aggiunto il driver ov5647 con supporto per il modulo fotocamera per Raspberry Pi.
- È stata aggiunta la compatibilità con il SoC RISC-V FU740 e le schede HiFive Unleashed. È stato inoltre aggiunto un nuovo driver per il chip Kendryte K210.
Fonte: opennet.ru
