Dopo due mesi di sviluppo, Linus Torvalds ha annunciato il rilascio del kernel Linux 6.13. Tra le modifiche più significative: modalità di lazy eviction nello scheduler, supporto per scrittura atomica in XFS e Ext4, meccanismo di «multigrain timestamps», modalità adattativa di polling nella sottomodifica di rete, possibilità di compilazione con ottimizzazioni AutoFDO, supporto per il meccanismo di protezione ARM65 Guarded Control Stack, isolamento delle macchine virtuali tramite l'estensione ARM CCA, pile separate in BPF, rimozione di ReiserFS, driver virtual-cpufreq, API netlink net-shaper, modalità di montaggio tmpfs case-sensitive, supporto per le estensioni POSIX in SMB3, driver AMD Cache Optimizer.
Nella nuova versione sono stati inclusi 14172 fix da 2086 sviluppatori, la dimensione della patch è di 46 MB (le modifiche hanno interessato 15375 file, con 598707 nuove righe di codice aggiunte e 406294 righe rimosse). Nella versione precedente c'erano 14607 fix da 2167 sviluppatori, e la dimensione della patch era di 37 MB. Circa il 52% di tutte le modifiche presentate in 6.13 riguarda i driver dei dispositivi, approssimativamente il 13% delle modifiche è relativo all'aggiornamento del codice specifico per architetture hardware, l'11% è legato allo stack di rete, il 4% ai file system e il 3% ai sottosistemi interni del kernel.
Novità principali nel kernel 6.13:
- Sottosistema disco, I/O e file system
- È stato aggiunto un meccanismo di "multigrain timestamps" che consente di ottenere informazioni sui tempi di modifica o accesso ai file con una precisione superiore al millisecondo, senza influire negativamente sulle prestazioni. L'aumento della precisione delle etichette comporta costi aggiuntivi a causa dell'aumento dell'intensità di scrittura dei metadati sul disco; pertanto, nella realizzazione proposta, etichette più precise vengono create solo per quei file per i quali i processi richiedono tali etichette tramite la chiamata getattr().
- È stata aggiunta il supporto per operazioni di scrittura atomica, in cui la scrittura di dati di dimensioni superiori a quelle di un settore avviene in modo atomico su dispositivi di memorizzazione che offrono tale possibilità. Attualmente, la scrittura atomica è implementata per XFS, Ext4 in modalità O_DIRECT (Direct I/O) e md RAID 0/1/10.
- È stato proposto un nuovo meccanismo di conteggio dei riferimenti per i file, che offre un aumento delle prestazioni del 3-5% in situazioni di carico di lavoro con più di 255 thread.
- È stata rimossa l'implementazione del file system ReiserFS, che era stata dichiarata obsoleta due anni fa.
- Aggiunto il parametro sysctl «fs.dentry-negative» per impostare nella VFS la politica di pulizia delle voci «dentry» (rappresentazione interna degli elementi delle directory) dopo la rimozione dei file correlati. Per alcuni tipi di carico è più efficiente mantenere tali registrazioni dei file eliminati, mentre per altri è meglio rimuoverle, quindi il kernel offre la possibilità di scelta (di default, le «dentry» non vengono automaticamente rimosse).
- Nel sistema di chiamata statmount() è stato aggiunto il flag STATMOUNT_OPT_ARRAY per restituire un elenco di opzioni del file system come un array di stringhe terminate con carattere nullo e senza utilizzare l'escaping «\000». Aggiunta la supporto per restituire il sottotipo del FS (fs_subtype, per determinare l'uso di FUSE), opzioni di montaggio sicuro e superblock sorgente (sb_source).
- In OverlayFS è stata aggiunta la possibilità di specificare i livelli tramite descrittori di file anziché nomi di percorsi di file.
- Nel file system tmpfs è stata aggiunta l'opzione di montaggio «casefold» per funzionare senza distinzione tra maiuscole e minuscole e l'opzione «strict_encoding» per bloccare la creazione di file con nomi contenenti caratteri UTF-8 non validi.
- È stato proposto un nuovo insieme di chiamate di sistema per gestire gli attributi estesi dei file: setxattrat(), getxattrat(), listxattrat() e removexattrat(). A differenza delle chiamate di sistema setxattr(), getxattr(), listxattr() e removexattr(), le nuove varianti richiedono l'indicazione del file descriptor della directory rispetto al quale viene eseguita la ricerca del percorso del file.
- In Btrfs è stata aggiunta l'operazione ioctl BTRFS_IOC_SUBVOL_SYNC_WAIT, che include l'attesa del completamento della pulizia dei sottovolumi, consentendo l'esecuzione del comando "btrfs subvolume sync" da parte di un utente non privilegiato, privo di accesso a ioctl SEARCH_TREE (utile nelle applicazioni di backup che puliscono i sottovolumi). È stata aggiunta l'operazione ioctl ENCODED_READ per la lettura tramite io_uring di dati codificati, ad esempio per la lettura diretta di estensioni compresse senza decompressione. È proseguito il lavoro per passare all'utilizzo di fogli di pagina della memoria (page folios). È stata ridotta l'insorgenza di contenimento dei lock durante la ricerca dei riferimenti inversi incorporati e nell'iterazione dei buffer delle estensioni. È stata aumentata l'efficienza nella compressione della mappa delle estensioni.
- Nel file system EROFS (Extendable Read-Only File System), progettato per essere utilizzato su partizioni accessibili in sola lettura, è stata implementata la possibilità di utilizzare nel sistema di chiamate lseek() le opzioni SEEK_HOLE e SEEK_DATA.
- In F2FS è stata aggiunta la supporto per l'aliasing dei dispositivi, che consente di riservare temporaneamente un'area in F2FS per utilizzare una parte del dispositivo di blocco in un'altra FS. Dopo il completamento dell'operazione esterna, l'area riservata può essere restituita a F2FS. Ad esempio, è possibile creare una FS con il comando «mkfs.f2fs -c /dev/vdc@vdc.file /dev/vdb», dopo di che il contenuto del dispositivo /dev/vdc sarà riservato e riflesso nel file vdc.file, e la partizione /dev/vdc può essere utilizzata per scopi personali, ad esempio, formattarla per un'altra FS. Per restituire il contenuto riservato è sufficiente eliminare il file vdc.file.
- In XFS è stata inclusa la supporto per le quote per i dispositivi realtime. È stata aggiunta la supporto per una directory con metadati, in cui sono collocati tutti gli inode con metadati.
- Nel meccanismo FUSE è stata attivata la possibilità di modificare dinamicamente il numero massimo di pagine (FUSE_MAX_MAX_PAGES) utilizzando «sysctl fs.fuse.max_pages_limit». Sono coinvolti i folii di memoria (page folios).
- In SMB è stata implementata la supporto per le estensioni POSIX per SMB3, necessarie per la gestione di tipi di file speciali come fifo, file di dispositivo e collegamenti simbolici. È stata aggiunta la possibilità di montare una partizione con una password alternativa utilizzata durante la rotazione delle password. È stata aggiunta una nuova opzione di montaggio «cifs.upcall» per definire lo spazio dei nomi. È stato garantito il riconoscimento di file di dispositivi simbolici e a blocchi creati in Windows NFS Server. È stato aggiunto il supporto per i collegamenti simbolici in stile WSL (Windows Subsystem for Linux).
- I file system UBIFS, ADFS, BEFS, HFS, HFSPLUS, HPFS, JFS ed ECRYPTFS sono stati convertiti per utilizzare la nuova API di montaggio delle partizioni.
- I file system ECRYPTFS, UFS e NILFS2 sono stati convertiti per utilizzare i folii di memoria (page folios).
- Memoria e servizi di sistema
- Nel pianificatore è implementato un modello di preemption pigra delle attività (PREEMPT_LAZY), che corrisponde al modello di preemption completa per le attività realtime (RR/FIFO/DEADLINE), ma ritarda la preemption delle attività normali (SCHED_NORMAL) fino al limite del tick. Questo ritardo riduce i casi di preemption dei detentori di lock, consentendo di avvicinare le prestazioni a quelle delle configurazioni che utilizzano un modello di preemption volontaria. Pertanto, il nuovo modello mantiene le capacità di preemption completa per le attività realtime, ma minimizza il calo delle prestazioni per le attività normali. Inoltre, il nuovo modello semplifica la logica delle operazioni di preemption nel kernel, escludendo dal processo di pianificazione i gestori situati in altri componenti del kernel (al di fuori del pianificatore delle attività).
- Durante la compilazione con il compilatore Clang è fornita la possibilità di utilizzare ottimizzazioni.
Fonte: opennet.ru
