Dopo due mesi di sviluppo, Linus Torvalds ha rilasciato il kernel . Tra le modifiche più significative: nuova implementazione del file system exFAT, modulo bareudp per la creazione di tunnel UDP, protezione basata su autenticazione dei puntatori per ARM64, possibilità di allegare programmi BPF ai gestori LSM, nuova implementazione di Curve25519, rilevatore 'split-lock', compatibilità BPF con PREEMPT_RT, rimozione del limite di 80 caratteri per le stringhe nel codice, considerazione della temperatura della CPU nel pianificatore di attività, possibilità di utilizzare clone() per generare processi in un altro cgroup, protezione contro la scrittura in memoria tramite userfaultfd.
Nella nuova versione sono stati inclusi 15033 correzioni da 1961 sviluppatori,
la dimensione della patch è di 39 MB (le modifiche hanno riguardato 11590 file, sono state aggiunte 570560 righe di codice,
sono state eliminate 297401 righe). Circa il 41% delle modifiche presentate nella versione 5.7
riguarda i driver dei dispositivi, circa il 16% delle modifiche riguardano
l'aggiornamento di codice specifico per architetture hardware, il 13%
riguarda lo stack di rete, il 4% è relativo ai file system e il 4% ai componenti interni.
del kernel.
:
- Sottosistema disco, I/O e file system
- È stata aggiunta una nuova implementazione del driver exFAT, sulla base del codice attuale «sdfat» (2.x), sviluppato da Samsung per i suoi smartphone Android. Il driver precedentemente aggiunto al kernel si basava su un codice obsoleto di Samsung (versione 1.2.9) e presentava una riduzione delle prestazioni rispetto al nuovo driver di circa il 10%. Ricordiamo che l'aggiunta del supporto exFAT al kernel è stata possibile dopo che Microsoft ha reso pubbliche le specifiche e ha consentito l'uso gratuito dei brevetti exFAT in Linux.
- In Btrfs, a new ioctl() command has been implemented — BTRFS_IOC_SNAP_DESTROY_V2, allowing the deletion of a subvolume by its identifier. Full support for cloning inline extents has been provided. The number of rollback points for redistribution operations has been increased, which has reduced long waits when executing the ‘balance cancel’ command. The determination of back references to extents has been accelerated (for example, the execution time of the test case has been reduced from an hour to a few minutes). The ability to attach to each inode of the file extent tree has been added. The locking scheme used for writing to subvolumes and for excluding NOCOW has been redesigned. The efficiency of fsync execution for ranges has been improved.
- In XFS, metadata verification and fsck execution for active partitions have been enhanced. A library has been proposed for rebuilding btree structures, which will be used in the future for redesigning xfs_repair and implementing the ability to restore without unmounting the partition.
- In CIFS, experimental support has been added for placing the swap partition in SMB3 storages. POSIX extensions in readdir defined in the SMB3.1.1 specification have been implemented. Write performance has been improved for 64KB page sizes when enabling cache=strict mode and using protocol versions 2.1+.
- The EXT4 file system has been migrated from bmap and iopoll to using iomap.
- In F2FS, optional support for data compression using the zstd algorithm has been implemented. By default, the LZ4 algorithm is used for compression. The command 'chattr -c commit' has been added. Mount time display has been ensured. The ioctl F2FS_IOC_GET_COMPRESS_BLOCKS has been added to obtain information about the number of compressed blocks. Compression data has been included in the output via statx.
- In the Ceph file system, the ability to locally perform file creation and deletion (unlink) operations without waiting for a server response (asynchronous operation) has been added. This change, for example, significantly increases performance when using the rsync utility.
- In OVERLAYFS, the ability to use virtiofs as the upper-level file system has been implemented.
- codice di bypass nel VFS, rifatto il codice per l'analisi dei collegamenti simbolici e unificato il bypass dei punti di montaggio.
- nella sottosistema scsi per utenti non privilegiati esecuzione di comandi ZBC.
- Nel dm_writecache possibilità di svuotamento graduale della cache in base al parametro max_age, che definisce il tempo massimo di vita di un blocco.
- Nel dm_integrity supporto per l'operazione 'discard'.
- Nel null_blk supporto per la sostituzione degli errori per simulare i guasti durante l'esecuzione dei test.
- possibilità di inviare notifiche udev per le modifiche alle dimensioni del dispositivo a blocchi.
- Sottosistema di rete
- In Netfilter sono inclusi , che accelerano notevolmente il trattamento di grandi elenchi di corrispondenza (nftables set), nei quali è necessaria la verifica della combinazione di subnet, porte di rete, protocollo e indirizzi MAC.
Ottimizzazioni nel modulo nft_set_pipapo (PIle PAcket POlicies), che risolve il problema del confronto del contenuto dei pacchetti con gli intervalli di stato delle regole di filtraggio, come gli intervalli IP e le porte di rete (nft_set_rbtree e nft_set_hash gestiscono il confronto degli intervalli e la riflessione diretta dei valori). La versione pipapo vettorializzata con istruzioni a 256 bit AVX2 su un sistema con processore AMD Epyc 7402 ha mostrato un aumento delle prestazioni del 420% nell'analisi di 30.000 record, comprendenti coppie porta-protocollo. L'aumento nel confronto delle coppie di sottorete e numero di porta durante l'analisi di 1.000 record è stato del 87% per IPv4 e del 128% per IPv6. - il modulo bareudp, che consente di incapsulare in un tunnel UDP diversi protocolli L3, come MPLS, IP e NSH.
- è proseguita l'integrazione dei componenti MPTCP (MultiPath TCP), un'estensione del protocollo TCP per consentire il funzionamento delle connessioni TCP con la consegna dei pacchetti simultaneamente su più percorsi attraverso diverse interfacce di rete, associate a indirizzi IP diversi.
- supporto per i meccanismi di accelerazione hardware per l'incapsulamento dei frame Ethernet in 802.11 (Wi-Fi).
- La transizione di un dispositivo da uno spazio dei nomi della sotto rete (network namespace) a un altro ora comporta la corretta regolazione dei diritti di accesso e del proprietario dei file corrispondenti in sysfs.
- È stata fornita la possibilità di utilizzare il flag SO_BINDTODEVICE per gli utenti che non hanno diritti root.
- È stata adottata la terza parte delle patch che traducono gli strumenti ethtool da ioctl() all'utilizzo dell'interfaccia netlink. Questa nuova interfaccia semplifica l'aggiunta di estensioni, migliora la gestione degli errori, consente di inviare notifiche durante le modifiche di stato e semplifica l'interazione tra il kernel e lo spazio utente, riducendo il numero di liste nominate sincronizzate.
- È stata aggiunta la possibilità di utilizzare acceleratori hardware speciali per eseguire operazioni di tracciamento delle connessioni.
- In netfilter è stata aggiunta un'hook per il collegamento dei classificatori dei pacchetti in uscita (egress), completando così l'hook per i pacchetti in entrata (ingress) già esistente.
- In Netfilter sono inclusi , che accelerano notevolmente il trattamento di grandi elenchi di corrispondenza (nftables set), nei quali è necessaria la verifica della combinazione di subnet, porte di rete, protocollo e indirizzi MAC.
- Virtualizzazione e sicurezza
- È stata aggiunta un'implementazione hardware per l'autenticazione dei puntatori (), che utilizza istruzioni CPU ARM64 specializzate per la protezione contro attacchi che sfruttano tecniche di Return-Oriented Programming (ROP), in cui l'attaccante non cerca di inserire il proprio codice in memoria, ma opera su porzioni di istruzioni macchina già presenti nelle librerie caricate, terminate da un'istruzione di ritorno. La protezione si basa sull'uso di firme digitali per verificare gli indirizzi di ritorno a livello di kernel. La firma è memorizzata nei bit superiori non utilizzati dello stesso puntatore. A differenza delle implementazioni software, la creazione e la verifica delle firme digitali avviene tramite istruzioni speciali della CPU.
- la possibilità di proteggere l'area di memoria dalla scrittura tramite la chiamata di sistema userfaultfd(), progettata per gestire i page faults (accesso a pagine di memoria non allocate) nello spazio utente. L'idea è di utilizzare userfaultfd() anche per monitorare le violazioni di accesso a pagine contrassegnate come protette dalla scrittura e chiamare un gestore che possa reagire a tali tentativi di scrittura (ad esempio, per gestire le modifiche durante la creazione di snapshot live dei processi in esecuzione, fissando lo stato durante lo scarico di dump di memoria su disco, implementando la memoria condivisa, monitorando le modifiche nella memoria). Funzionalità l'uso di mprotect() in combinazione con il gestore di segnali SIGSEGV, ma funziona notevolmente più velocemente.
- In SELinux il parametro "checkreqprot" è deprecato, consentendo di disattivare il controllo della protezione della memoria durante l'elaborazione delle regole (consentiva l'uso di aree di memoria eseguibili, indipendentemente dalle disposizioni stabilite nelle regole). I collegamenti simbolici a kernfs sono autorizzati a ereditare il contesto delle directory padre.
- Include modulo , che consente di allegare programmi BPF a qualsiasi hook LSM nel kernel. La modifica permette di creare moduli LSM (Linux Security Module) sotto forma di programmi BPF per affrontare compiti di auditing e controllo degli accessi mandatory.
- ottimizzazione delle performance di /dev/random grazie alla trasmissione in batch dei valori CRNG anziché a singoli invocazioni delle istruzioni RNG. Migliorato il funzionamento di getrandom e /dev/random sui sistemi ARM64, che forniscono istruzioni RNG.
- Implementazione della curva ellittica Curve25519 nella variante della libreria , per la quale una dimostrazione matematica di verifica formale dell'affidabilità.
- meccanismo di notifica delle pagine di memoria libere. Attraverso questo meccanismo, i sistemi guest possono informare il sistema host riguardo a pagine che non vengono più utilizzate, e tali pagine possono essere riprese dal host.
- In vfio/pci supporto per SR-IOV (Single-Root I/O Virtualization).
- Memoria e servizi di sistema
- Da 80 a 100 caratteri limite sulla lunghezza massima delle righe nei testi sorgente. Gli sviluppatori sono ancora incoraggiati a rimanere entro i 80 caratteri per riga, ma ora non è più un limite rigido. Inoltre, superare il limite della lunghezza della riga causerà ora l'emissione di un avviso in fase di compilazione solo se l'utility checkpatch viene eseguita con l'opzione "—strict'. Questa modifica permetterà di non distrarre gli sviluppatori con spazi e di sentirsi più liberi nell'allineamento del codice, oltre a una suddivisione eccessiva delle righe, la comprensione del codice e la ricerca.
- supporto per la modalità di avvio misto EFI, che consente di avviare un kernel a 64 bit da un firmware a 32 bit eseguito su una CPU a 64 bit senza utilizzare un bootloader specializzato.
- sistema di rilevamento e debug dei blocchi divisi ("«), che si verificano quando si accede a dati non allineati in memoria a causa del fatto che durante l'esecuzione di una istruzione atomica i dati attraversano due righe della cache CPU. Questi blocchi portano a una significativa diminuzione delle prestazioni (fino a 1000 cicli più lenti rispetto a un'operazione atomica con dati che rientrano in una sola riga di cache). A seconda del parametro di avvio «split_lock_detect», il core può rilevare tali blocchi al volo e generare avvisi o inviare un segnale SIGBUS all'applicazione che ha causato il blocco.
- Nel pianificatore delle attività è garantito il monitoraggio dei parametri dei sensori di temperatura () e implementato il monitoraggio del surriscaldamento durante l'assegnazione dei task. Utilizzando le statistiche fornite, il gestore della temperatura (thermal governor) può adeguare la frequenza massima della CPU in caso di surriscaldamento, e ora il pianificatore dei task considera la riduzione della potenza di calcolo a causa di questa limitazione della frequenza durante la pianificazione dell'esecuzione delle attività (in precedenza il pianificatore reagiva al cambiamento della frequenza con un certo ritardo, prendendo decisioni per un certo periodo basate su stime eccessive delle risorse di calcolo disponibili).
- Nel pianificatore dei task sono coinvolti monitoraggio del carico, consentendo una valutazione accurata del carico indipendentemente dalla frequenza attuale di funzionamento della CPU. Questa modifica consente di prevedere più accuratamente il comportamento delle attività in condizioni di variazione dinamica della tensione e della frequenza della CPU. Ad esempio, un'attività che consumava 1/3 delle risorse della CPU a una frequenza di 1000 MHz consumerà 2/3 delle risorse quando la frequenza scende a 500 MHz, il che in precedenza creava un falso presupposto di funzionamento a piena potenza (cioè le attività per lo scheduler apparivano più grandi solo a causa della riduzione della frequenza, portando a decisioni errate nel governor cpufreq schedutil).
- Il driver Intel P-state, responsabile della selezione delle modalità di prestazione, è stato convertito per utilizzare .
- È stata implementata la possibilità di utilizzare il sottosistema BPF durante il funzionamento del kernel in modalità tempo reale (PREEMPT_RT). In precedenza, attivando PREEMPT_RT, era prevista la disabilitazione del BPF.
- È stato aggiunto un nuovo tipo di programmi BPF — BPF_MODIFY_RETURN, che possono essere attaccati a una funzione nel kernel e modificare il valore restituito da questa funzione.
- Aggiunto uso della chiamata di sistema clone3() per creare un processo in un cgroup diverso da quello del processo padre, consentendo al processo genitore di applicare limitazioni e abilitare l'accounting immediatamente dopo la generazione di un nuovo processo o thread. Ad esempio, il gestore dei servizi può allocare direttamente nuovi servizi in cgroup separati, e i nuovi processi collocati in cgroup 'congelati' verranno subito fermati.
- in Kbuild supporto per la variabile d'ambiente 'LLVM=1' per passare agli strumenti Clang/LLVM durante la compilazione del kernel. Sono stati sollevati i requisiti per la versione di binutils (2.23).
- A debugfs è stata aggiunta la sezione /sys/kernel/debug/kunit/ con i risultati dei test kunit.
- Aggiunto il parametro di avvio del kernel pm_debug_messages (equivalente a /sys/power/pm_debug_messages), che abilita l'output delle informazioni di debug sul funzionamento del sistema di gestione dell'alimentazione (utile per il debug di problemi con le modalità di sospensione e attesa).
- Nell'interfaccia dell'input/output asincrono è stato aggiunto il supporto e .
- Il profiling cgroup è stato migliorato grazie all'uso dello strumento perf. In precedenza, perf poteva profilare le attività solo in un determinato cgroup e non riusciva a identificare a quale cgroup apparteneva il campione corrente. Ora, perf ottiene informazioni sul cgroup per ogni campione, permettendo di profilare più di un cgroup e di applicare ordinamenti per
cgroup nei report. - In cgroupfs, il pseudo-file system per la gestione dei cgroup, è stata aggiunta la supporto per gli attributi estesi (xattrs) tramite i quali, ad esempio, è possibile lasciare informazioni aggiuntive per i gestori nello spazio utente.
- Nel controller della memoria cgroup è stata introdotta la supporto per la protezione ricorsiva del valore 'memory.low', che regola la quantità minima di memoria RAM fornita ai membri del gruppo. Durante il montaggio della gerarchia cgroup con l'opzione 'memory_recursiveprot', il valore 'memory.low' impostato per i nodi inferiori sarà automaticamente distribuito a tutti i nodi figli.
- Il framework Uacce (Unified/User-space-access-intended Accelerator Framework) per la condivisione degli indirizzi virtuali (SVA, Shared Virtual Addressing) tra CPU e dispositivi periferici, consente agli acceleratori hardware di accedere alle strutture dati nella CPU principale.
- Architetture hardware
- Per l'architettura ARM è stata implementata la possibilità di estrazione a caldo della memoria.
- Per l'architettura RISC-V è stata aggiunta la supporto per il collegamento e l'estrazione a caldo della CPU (CPU hotplug). Per i RISC-V a 32 bit è stato realizzato un eBPF JIT.
- È stata rimossa la possibilità di utilizzare sistemi ARM a 32 bit per eseguire ambienti guest KVM.
- È stata rimossa l'implementazione "fittizia" di NUMA per l'architettura s390, per la quale non sono stati trovati scenari d'uso che possano portare a un aumento delle prestazioni.
- Per ARM64 è stata aggiunta la supporto per l'estensione AMU (Activity Monitors Unit), definita in ARMv8.4 e che offre contatori di prestazioni utilizzati per il calcolo dei coefficienti di correzione della scalabilità della frequenza nel pianificatore di attività.
- Attrezzature
- supporto per dispositivi vDPA, che utilizzano un canale di scambio dati coerente con le specifiche virtio. I dispositivi vDPA possono essere sia hardware fisicamente connessi che dispositivi virtuali emulati tramite software.
- Nella sottosistema GPIO un nuovo comando ioctl() per monitorare le modifiche, che consente di informare il processo riguardo il cambiamento dello stato di qualsiasi linea GPIO. Come esempio di utilizzo del nuovo comando utilità gpio-watch.
- Nel driver DRM i915 per schede grafiche Intel ci sono ora di default il supporto per i chip Tigerlake («Gen12») e inizialmente il supporto per la gestione dell'illuminazione OLED. Migliorato il supporto per i chip Ice Lake, Elkhart Lake, Baytrail e Haswell.
- Nel driver amdgpu è stata aggiunta la possibilità di caricare firmware nel chip USBC per ASIC. Migliorato il supporto per i chip AMD Ryzen 4000 «Renoir». È stata introdotta la gestione dei pannelli OLED. È stata garantita la visualizzazione dello stato del firmware in debugfs.
- Nel driver DRM vmwgfx per sistemi di virtualizzazione VMware è stata aggiunta la possibilità di utilizzare OpenGL 4 nei sistemi ospiti (in precedenza era supportato OpenGL 3.3).
- È stato aggiunto un nuovo driver DRM tidss per il sistema di visualizzazione della piattaforma TI Keystone.
- Sono stati aggiunti driver per pannelli LCD: Feixin K101 IM2BA02, Samsung s6e88a0-ams452ef01, Novatek NT35510, Elida KD35T133, EDT, NewEast Optoelectronics WJFH116008A, Rocktech RK101II01D-CT, Frida FRD350H54004.
- Nel sistema di gestione dell'energia è stato aggiunto il supporto per la piattaforma Intel Jasper Lake (JSL) basata su Atom.
- È stato aggiunto il supporto per il laptop Pinebook Pro basato su Rockchip RK3399, il tablet Pine64 PineTab e lo smartphone basato su Allwinner A64.
- Aggiunta la compatibilità con nuovi codec audio e chip:
Amlogic AIU, Amlogic T9015, Texas Instruments TLV320ADCX140, Realtek RT5682, ALC245, Broadcom BCM63XX I2S, Maxim MAX98360A, Presonus Studio 1810c, MOTU MicroBook IIc. - Aggiunta la compatibilità con piattaforme ARM e piattaforme Qualcomm Snapdragon 865 (SM8250), IPQ6018, NXP i.MX8M Plus, Kontron «sl28», 11 varianti della scheda i.MX6 TechNexion Pico, tre nuove varianti Toradex Colibri, Samsung S7710 Galaxy Xcover 2 basato su ST-Ericsson u8500, DH Electronics DHCOM SoM e PDK2, Renesas M3ULCB, Hoperun HiHope, Linutronix Testbox v2, PocketBook Touch Lux 3.
Fonte: opennet.ru
