Dopo due mesi di sviluppo, Linus Torvalds ha rilasciato il kernel . Tra i cambiamenti più significativi: limitazione dell'importazione di simboli dai moduli proprietari ai moduli GPL, accelerazione delle operazioni di switching del contesto attraverso l'istruzione del processore FSGSBASE, supporto per la compressione dell'immagine del kernel tramite Zstd, ridefinizione della prioritizzazione dei thread nel kernel, supporto per il protocollo PRP (Parallel Redundancy Protocol), pianificazione basata sulla larghezza di banda nello scheduler deadline, impacchettamento proattivo delle pagine di memoria, flag di capability CAP_CHECKPOINT_RESTOR, chiamata di sistema close_range(), miglioramenti delle prestazioni dm-crypt, rimozione del codice per sistemi guest a 32 bit Xen PV, nuovo meccanismo di gestione della memoria slab, opzione «rescue» in Btrfs, supporto per la crittografia inline in ext4 e F2FS.
Nella nuova versione sono state incorporate 16074 correzioni da 2011 sviluppatori,
la dimensione del patch è di 62 MB (le modifiche hanno interessato 14548 file, aggiunte 782155 righe di codice, e rimosse 314792 righe). Circa il 45% di tutto ciò presentato in 5.9
riguardano i driver dei dispositivi, circa il 15% delle modifiche ha
l'aggiornamento di codice specifico per architetture hardware, il 13%
è relativo allo stack di rete, il 3% ai file system e il 3% all'interno
del kernel.
:
- Memoria e servizi di sistema
- protezione dall'utilizzo di strati GPL per collegare driver proprietari a componenti del kernel esportati solo per moduli sotto licenza GPL. Il flag TAINT_PROPRIETARY_MODULE ora viene ereditato da tutti i moduli che importano simboli da moduli con questo flag. Se un modulo GPL tenta di importare simboli da un modulo non GPL, quel modulo GPL erediterebbe il marchio TAINT_PROPRIETARY_MODULE e non potrebbe accedere ai componenti del kernel disponibili solo per moduli sotto licenza GPL, anche se il modulo ha precedentemente importato simboli dalla categoria «gplonly». Il blocco inverso (esportazione solo di EXPORT_SYMBOL_GPL nei moduli che hanno importato EXPORT_SYMBOL_GPL), che potrebbe compromettere il funzionamento dei driver proprietari, non è implementato (viene ereditato solo il flag del modulo proprietario, ma non il collegamento GPL).
- supporto per il meccanismo kcompactd per in background, allowing an increase in the number of large memory pages available to the core. Preliminary estimates suggest that background packing, with minimal overhead costs, can reduce the latency when allocating large memory pages (huge-page) by 70-80 times compared to the previously used on-demand packing mechanism. To define the boundaries of external fragmentation, which will be managed by kcompactd, the sysctl vm.compaction_proactiveness has been added.
- support for kernel image compression using the algorithm (zstd).
- Support for the processor instruction , allowing reading and modifying the contents of FS/GS registers from user space. In the kernel, FSGSBASE is used to speed up context switching operations by eliminating unnecessary MSR write operations for GSBASE, and in user space, it allows avoiding unnecessary system calls for modifying FS/GS.
- il parametro «allow_writes», che consente di vietare le modifiche ai registri MSR del processore dallo spazio utente e di limitare l'accesso al contenuto dei registri mediante operazioni di lettura, poiché la modifica degli MSR può causare problemi. Per impostazione predefinita, la scrittura non è attualmente vietata, e la modifica degli MSR viene registrata nel log, ma in futuro si prevede di passare a una modalità di accesso predefinita in sola lettura.
- Nell'interfaccia dell'input/output asincrono aggiunta la piena supporto per le operazioni asincrone di lettura bufferizzata, che non richiedono l'assegnazione di thread del kernel. Il supporto per la scrittura è previsto nella prossima versione.
- Nello scheduler di input/output deadline pianificazione tenendo conto della capacità di banda, prendere decisioni corrette su sistemi asimmetrici, come i sistemi ARM basati su architetture e big.LITTLE, che combinano in un unico chip nuclei CPU potenti e meno performanti ed efficienti dal punto di vista energetico. In particolare, la nuova modalità consente di evitare disallineamenti nella pianificazione quando un nucleo CPU lento non ha le risorse necessarie per completare un compito entro il termine stabilito.
- Il modello di consumo energetico nel nucleo (framework Energy Model) è ora non solo il comportamento del consumo energetico della CPU, ma anche quello dei dispositivi periferici.
- È stata implementata la chiamata di sistema close_range(), che consente a un processo di chiudere un'intera gamma di descrittori di file aperti in un colpo solo.
- Dall'implementazione della console testuale e del driver fbcon , che permette lo scorrimento del testo all'indietro tramite software (CONFIG_VGACON_SOFT_SCROLLBACK) oltre la capacità della memoria video in modalità testo VGA.
- un algoritmo di assegnazione delle priorità per i thread all'interno del kernel. La nuova versione garantisce una migliore coerenza in tutti i sottosistemi del kernel nell'assegnazione delle priorità per i processi in tempo reale.
- Aggiunto sysctl per gestire i parametri di forzatura della frequenza della CPU per i processi in tempo reale (ad esempio, è possibile modificare al volo il comportamento durante l'esecuzione di processi in tempo reale per risparmiare energia dopo un passaggio a alimentazione a batteria o su sistemi mobili).
- È stata effettuata una preparazione per implementare il supporto della tecnologia Transparent Huge Pages nella cache delle pagine.
- Nel meccanismo fanotify sono stati implementati nuovi flag FAN_REPORT_NAME e FAN_REPORT_DIR_FID per trasmettere informazioni sul nome del genitore e sull'identificatore unico FID in seguito ad eventi di creazione, eliminazione o spostamento di elementi di directory e oggetti non associati a directory.
- Per i cgroups è stato introdotto un nuovo controllore per la gestione della memoria slab (slab memory controller), che è significativo per il trasferimento della contabilizzazione slab dal livello delle pagine di memoria al livello degli oggetti del kernel, permettendo di condividere le pagine slab tra diversi cgroup, invece di allocare cache slab separate per ciascun cgroup. L'approccio proposto consente un uso più efficiente dello slab, riducendo la memoria utilizzata per slab dal 30 al 45%, diminuendo notevolmente il consumo totale di memoria del kernel e riducendo la frammentazione della memoria.
- Nel sottosistema audio e , in conformità con le raccomandazioni per l'uso di una terminologia inclusiva nel kernel Linux, è stata effettuata una pulizia dei termini non politicamente corretti. Il codice è stato ripulito dall'uso delle parole «slave», «master», «blacklist» e «whitelist».
- Virtualizzazione e sicurezza
- Durante la compilazione del kernel utilizzando il compilatore Clang possibilità di configurare (CONFIG_INIT_STACK_ALL_ZERO) l'inizializzazione automatica a valore zero di tutte le variabili memorizzate nello stack (specificando «-ftrivial-auto-var-init=zero» durante la compilazione).
- Nella sottosistema seccomp, quando si utilizza la modalità di controllo dei processi nello spazio utente, sostituzioni nei file descriptor dei processi monitorati per una completa emulazione delle chiamate di sistema che portano alla creazione di file descriptor. Questa funzionalità è richiesta nei sistemi di contenitori isolati e nell'implementazione di sandbox per Chrome.
- Per le architetture xtensa e csky è stata aggiunta il supporto per limitare le chiamate di sistema tramite la sottosistema seccomp. Per xtensa è stato implementato anche il supporto per il meccanismo di audit.
- nuovo flag capability CAP_CHECKPOINT_RESTORE, che consente di fornire accesso alle funzionalità relative al congelamento e al ripristino dello stato dei processi senza concedere privilegi aggiuntivi.
- In GCC 11 sono state implementate tutte le funzionalità necessarie per
dello strumento di debug KCSAN (Kernel Concurrency Sanitizer), progettato per rilevare dinamicamente le condizioni di race all'interno del kernel. Pertanto, KCSAN può ora essere utilizzato con i kernel compilati in GCC. - Per AMD Zen e modelli di CPU più recenti supporto per la tecnologia P2PDMA, che consente di utilizzare DMA per il trasferimento diretto dei dati tra la memoria di due dispositivi collegati al bus PCI.
- In dm-crypt è stata aggiunta una modalità che riduce i ritardi eseguendo l'elaborazione crittografica dei dati senza utilizzare le code di lavoro. La modalità specificata è anche necessaria per il corretto funzionamento con dispositivi a blocchi (dispositivi con aree che devono essere scritte in modo sequenziale, aggiornando l'intero gruppo di blocchi). Sono stati effettuati miglioramenti per aumentare la larghezza di banda e ridurre i ritardi in dm-crypt.
- Il codice per il supporto dei sistemi guest a 32 bit in modalità paravirtualizzazione sotto il hypervisor Xen è stato rimosso. Gli utenti di tali sistemi dovrebbero passare all'uso di kernel a 64 bit negli ambienti guest o utilizzare modalità di virtualizzazione completa (HVM) o combinata (PVH) anziché la paravirtualizzazione (PV).
- Sottosistema disco, I/O e file system
- Nel file system Btrfs L'opzione di montaggio «rescue», che unifica l'accesso a tutte le altre opzioni di ripristino, è stata introdotta. Rimosso il supporto per le opzioni «alloc_start» e «subvolrootid», l'opzione «inode_cache» è stata dichiarata obsoleta. Sono state effettuate ottimizzazioni delle prestazioni, con un miglioramento tangibile nella velocità delle operazioni fsync(). Possibilità di utilizzare tipi alternativi di checksum, diversi da CRC32c.
- Possibilità di utilizzare la crittografia inline (Inline Encryption) nei file system ext4 e F2FS, per attivare la quale è prevista l'opzione di montaggio «inlinecrypt». La modalità di crittografia inline consente di sfruttare i meccanismi di crittografia integrati nel controller del disco, che eseguono la crittografia e la decrittografia trasparente delle operazioni di input/output.
- In XFS flush degli inode in modalità totalmente asincrona, senza bloccare i processi durante l'operazione di pulizia della memoria. Risolto un antico problema con le quote, che impediva un corretto monitoraggio degli avvisi di superamento del limite morbido e delle restrizioni sul numero di inode. Unificata l'implementazione del supporto DAX per ext4 e xfs.
- In Ext4 precaricamento delle mappe dei bitmap di distribuzione dei blocchi. In combinazione con la limitazione della scansione dei gruppi non inizializzati, l'ottimizzazione ha permesso di ridurre il tempo di montaggio di partizioni molto grandi.
- In F2FS ioctl F2FS_IOC_SEC_TRIM_FILE, che consente di utilizzare i comandi TRIM/discard per azzerare fisicamente i dati specificati in un file, ad esempio per rimuovere le chiavi di accesso senza lasciare dati residui nel supporto.
In F2FS si aggiunge anche una nuova modalità di raccolta della spazzatura GC_URGENT_LOW, che funziona in modo più aggressivo escludendo alcune verifiche sullo stato di inattività (idle) prima di avviare il raccoglitore di spazzatura. - In bcache, la dimensione del bucket_size per gli extent è aumentata da 16 a 32 bit in preparazione per consentire l'applicazione a cache di dispositivi zonati.
- Nel sottosistema SCSI è stata aggiunta la possibilità di utilizzo della crittografia inline basata sui mezzi di crittografia hardware integrati forniti dai controller UFS ().
- È stato aggiunto un nuovo parametro della riga di comando del kernel «debugfs», che consente di gestire la disponibilità del file system pseudo omonimo.
- Nel client NFSv4.2 è stata garantita la supporto per gli attributi estesi dei file (xattr).
- In dm-dust interfaccia per visualizzare in un colpo solo l'elenco di tutti i bad block identificati sul disco («dmsetup message dust1 0 listbadblocks»).
- Per md/raid5 è stato aggiunto il parametro /sys/block/md1/md/stripe_size per configurare la dimensione del blocco STRIPE.
- Per i dispositivi di archiviazione NVMe supporto per i comandi di zonizzazione del dispositivo (ZNS, NVM Express Zoned Namespace), che consente di suddividere lo spazio di archiviazione in zone, costituenti gruppi di blocchi, per una gestione più completa della disposizione dei dati nel dispositivo.
- Sottosistema di rete
- In Netfilter la possibilità di rifiutare i pacchetti nella fase precedente al controllo del routing (l'espressione REJECT ora può essere utilizzata non solo nelle catene INPUT, FORWARD e OUTPUT, ma anche nella fase PREROUTING per icmp e tcp).
- In nftables la possibilità di audit degli eventi legati alla modifica della configurazione.
- In nftables nell'API netlink supporto per catene anonymous, il cui nome viene assegnato dinamicamente dal kernel. Quando si rimuove la regola associata a una catena anonymous, anche la catena viene automaticamente eliminata.
- In BPF è stata aggiunta la supporto per iteratori per l'iterazione, il filtraggio e la modifica degli elementi degli array associativi (map) senza copiare i dati nello spazio utente. Gli iteratori possono essere utilizzati per socket TCP e UDP, consentendo ai programmi BPF di attraversare elenchi di socket aperti e di estrarre le informazioni necessarie da essi.
- È stato aggiunto un nuovo tipo di programma BPF BPF_PROG_TYPE_SK_LOOKUP, eseguito quando il kernel cerca un socket di ascolto appropriato per una connessione in entrata. Attraverso un programma BPF simile, è possibile creare gestori che prendono decisioni su quale socket associare alla connessione, senza limitazioni imposte dalla chiamata di sistema bind(). Ad esempio, è possibile organizzare l'associazione di un socket a un intervallo di indirizzi o porte. Inoltre, in bpf_setsockopt() è stata aggiunta la supporto per il flag SO_KEEPALIVE e implementata la possibilità di impostare gestori BPF_CGROUP_INET_SOCK_RELEASE, richiamati quando si libera un socket.
- Supporto implementato per il protocollo (Parallel Redundancy Protocol), che consente su base Ethernet di implementare un passaggio trasparente per le applicazioni a un canale di riserva in caso di guasto di qualsiasi componente della rete.
- Nel stack mac80211 supporto per l'accordo a quattro fasi WPA/WPA2-PSK in modalità punto di accesso.
- È stata aggiunta la possibilità di cambiare il piano qdisc (disciplinare di coda) per utilizzare per impostazione predefinita l'algoritmo di gestione delle code di rete FQ-PIE (Flow Queue PIE), mirato a ridurre l'impatto negativo del buffering intermedio dei pacchetti sull'hardware di rete ai limiti (bufferbloat) nelle reti con modem via cavo.
- Sono state aggiunte nuove funzionalità a MPTCP (MultiPath TCP), estensioni del protocollo TCP per gestire le connessioni TCP con la consegna dei pacchetti simultaneamente su più percorsi attraverso interfacce di rete diverse collegate a indirizzi IP differenti. È stato aggiunto il supporto per syn cookie, DATA_FIN, autoconfigurazione dei buffer, diagnosi dei socket e utilizzo dei flag REUSEADDR, REUSEPORT e V6ONLY in setsockopt.
- Per le tabelle di routing VRF (Virtual Routing and Forwarding), che consentono di gestire più domini di routing su un unico sistema, è implementata la modalità «strict». In questa modalità, la tabella virtuale può essere associata solo a una tabella di routing che non è utilizzata in altre tabelle virtuali.
- Nel driver wireless ath11k supporto della frequenza 6GHz e .
- Attrezzature
- È stato rimosso il codice per supportare l'architettura UniCore, sviluppata presso il centro microprocessori dell'Università di Pechino e inclusa nel kernel Linux nel 2011. Questa architettura è priva di supporto dal 2014 e non è supportata in GCC.
- Per l'architettura RISC-V è stato implementato il supporto per (interfaccia debugfs per l'analisi della copertura del codice del kernel), kmemleak (sistema di rilevamento delle perdite di memoria), protezione dello stack, etichette di salto e operazioni tickless (multitasking indipendente dai segnali del timer).
- Per l'architettura PowerPC è stato implementato il supporto per le code per spinlock, che ha notevolmente migliorato le prestazioni nelle situazioni di conflitto delle lock.
- Per le architetture ARM e ARM64 è attivato di default il meccanismo di regolazione della frequenza della CPU (cpufreq governor), che utilizza direttamente le informazioni dal pianificatore dei processi per decidere sulle variazioni di frequenza e può accedere immediatamente ai driver cpufreq per modificare rapidamente la frequenza, adattando istantaneamente i parametri di funzionamento della CPU al carico attuale.
- Nel driver DRM i915 per le schede grafiche Intel è stata aggiunta la compatibilità con i chip basati sulla microarchitettura ed è stato introdotto il supporto iniziale per le schede grafiche discrete .
- Nel driver amdgpu è stato aggiunto il supporto iniziale per la GPU AMD (Navy Flounder) e (Sienna Cichlid). È stato aggiunto il supporto per i motori di accelerazione della codifica e decodifica video UVD/VCE per le GPU Southern Islands (Radeon HD 7000).
È stata aggiunta la proprietà per ruotare il display di 90, 180 o 270 gradi.È interessante notare che il driver per GPU AMD il driver più grande nel kernel — conta circa 2,71 milioni di righe di codice, che rappresentano circa il 10% della dimensione totale del kernel (27,81 milioni di righe). Di queste, 1,79 milioni di righe sono dedicate ai file di intestazione generati automaticamente con i dati per i registri GPU, mentre il codice C ammonta a 366 mila righe (per confronto, il driver Intel i915 include 209 mila righe, e Nouveau 149 mila).
- Nel driver Nouveau supporto per la verifica dell'integrità fotogramma per fotogramma tramite (Controlli di Ridondanza Ciclica) nei motori di rendering GPU NVIDIA. L'implementazione si basa sulla documentazione fornita da NVIDIA.
- Driver aggiunti per i pannelli LCD: Frida FRD350H54004, KOE TX26D202VM0BWA, CDTech S070PWS19HP-FC21, CDTech S070SWV29HG-DC44, Tianma TM070JVHG33 e Xingbangda XBD599.
- Nel sottosistema audio ALSA è stato implementato il supporto per (modalità di alimentazione continua per dispositivi HDMI esterni per evitare ritardi all'inizio della riproduzione) e per il controllo dell'illuminazione dei pulsanti di attivazione del microfono e disattivazione dell'audio, oltre ad essere stato aggiunto il supporto per nuovi hardware, incluso un controller. .
- Supporto aggiunto per piattaforme, dispositivi e sistemi ARM: Pine64 PinePhone v1.2, Lenovo IdeaPad Duet 10.1, ASUS Google Nexus 7, Acer Iconia Tab A500, Qualcomm Snapdragon SDM630 (utilizzato in Sony Xperia 10, 10 Plus, XA2, XA2 Plus e XA2 Ultra), Jetson Xavier NX, Amlogic WeTek Core2, Aspeed EthanolX, cinque nuove schede basate su NXP i.MX6, MikroTik RouterBoard 3011, Xiaomi Libra, Microsoft Lumia 950, Sony Xperia Z5, MStar, Microchip Sparx5, Intel Keem Bay, Amazon Alpine v3, Renesas RZ/G2H.
Fondazione per il software libero dell'America Latina
una variante — , ripulito da elementi di firmware e driver contenenti componenti o porzioni di codice non liberi, la cui applicazione è limitata dal produttore. Nella nuova versione è disabilitato il caricamento di blob nei driver per WiFi rtw8821c e SoC MediaTek mt8183. Aggiornato il codice di pulizia dei blob nei driver e nelle sottosistemi Habanalabs, Wilc1000, amdgpu, mt7615, i915 CSR, Mellanox mlxsw (Spectrum3), r8169 (rtl8125b-2) e x86 touchscreen.
Fonte: opennet.ru
