Rilascio del kernel Linux 6.13

Dopo due mesi di sviluppo, Linus Torvalds ha presentato il rilascio del kernel Linux 6.13. Tra le modifiche più significative: la modalità di preemption pigra nello scheduler, supporto per scritture atomiche in XFS ed Ext4, meccanismo di «multigrain timestamps», modalità adattativa di abilitazione del polling nella sottosistema di rete, possibilità di build con ottimizzazioni AutoFDO, supporto per il meccanismo di protezione ARM65 Guarded Control Stack, isolamento delle macchine virtuali tramite l'estensione ARM CCA, stack separati in BPF, rimozione di ReiserFS, driver virtual-cpufreq, API netlink net-shaper, modalità di montaggio tmpfs che tiene conto della distinzione tra maiuscole e minuscole, supporto per le estensioni POSIX in SMB3, driver AMD Cache Optimizer.

Nella nuova versione sono stati accettati 14172 correttivi da 2086 sviluppatori, la dimensione della patch è di 46 MB (le modifiche hanno interessato 15375 file, aggiunti 598707 righe di codice, rimosse 406294 righe). Nella versione precedente c'erano 14607 correttivi da 2167 sviluppatori, la dimensione della patch era di 37 MB. Circa il 52% di tutte le modifiche presentate in 6.13 sono relative ai driver delle periferiche, circa il 13% riguardano l'aggiornamento del codice specifico per architetture hardware, l'11% è collegato allo stack di rete, il 4% alle file system e il 3% ai sottosistemi interni del kernel.

Novità principali nel kernel 6.13:

  • Sottosistema di disco, input/output e file system
    • È stato aggiunto un meccanismo di «multigrain timestamps», che consente di ottenere informazioni sul tempo di modifiche o accesso ai file con una precisione superiore a un millisecondo, ma senza impatti negativi sulle prestazioni. L'aumento della precisione dei timestamp comporta costi aggiuntivi a causa dell'aumento dell'intensità di scrittura dei metadati su disco, pertanto nella realizzazione proposta i timestamp più precisi vengono creati non per tutti i file, ma solo per quelli per i quali i processi richiedono tali timestamp tramite la chiamata getattr().
    • È stato aggiunto il supporto per operazioni di scrittura atomiche, tramite le quali la scrittura di dati di dimensioni superiori a quella di un settore viene eseguita in modo atomico su dispositivi di archiviazione che offrono questa 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 incremento delle prestazioni del 3-5% in carichi di lavoro con oltre 255 thread.
    • È stata rimossa l'implementazione del file system ReiserFS, che era stata dichiarata obsoleta nell'anno precedente.
    • È stato 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 a essa associati. Per alcuni tipi di carico è preferibile mantenere tali voci sui file rimossi, mentre per altri è meglio rimuoverle; pertanto, nel kernel è stata fornita la possibilità di scelta (per impostazione predefinita, le «dentry» non vengono eliminate automaticamente).
    • Nella chiamata di sistema statmount() è stato aggiunto il flag STATMOUNT_OPT_ARRAY per restituire l'elenco delle opzioni del file system come array di stringhe terminate con carattere nullo e senza utilizzare l'escaping «\000». È stato aggiunto il supporto per restituire il sottotipo FS (fs_subtype, per determinare l'utilizzo di FUSE), opzioni di montaggio sicuro e il superblocco sorgente (sb_source).
    • In OverlayFS è stata fornita la possibilità di specificare i layer tramite descrittori di file anziché nomi di percorsi file.
    • Nel file system tmpfs è stata aggiunta l'opzione di montaggio «casefold» per lavorare senza distinzione tra maiuscole e minuscole e l'opzione «strict_encoding» per impedire la creazione di file con nomi contenenti caratteri UTF-8 non validi.
    • È stata proposta una nuova serie 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 di specificare il descrittore di file della directory rispetto alla quale viene eseguita la ricerca del percorso file.
    • In Btrfs è stata aggiunta l'operazione ioctl BTRFS_IOC_SUBVOL_SYNC_WAIT, che include l'attesa del completamento della pulizia dei sottovolumi, consentendo a un utente non privilegiato di eseguire il comando «btrfs subvolume sync» senza accesso all'ilc 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 leggere direttamente gli extent compressi senza decompressione. È proseguita la transizione all'uso dei folios di pagina in memoria. È stata ridotta l'insorgenza di contese di blocco («lock contention») durante la ricerca di riferimenti incrociati incorporati e durante l'iterazione sui buffer degli extent. È stata migliorata l'efficienza della compressione della mappa degli extent.
    • Nel file system EROFS (Extendable Read-Only File System), progettato per l'uso su partizioni disponibili in modalità di sola lettura, è implementata la possibilità di utilizzare nelle chiamate di sistema 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 a blocchi in un'altra FS. Dopo il completamento di un'operazione esterna, l'area riservata può essere restituita a F2FS. Ad esempio, si può creare una FS con il comando "mkfs.f2fs -c /dev/vdc@vdc.file /dev/vdb", dopodiché il contenuto del dispositivo /dev/vdc sarà riservato e riflesso nel file vdc.file, e la partizione /dev/vdc può essere utilizzata per i propri scopi, ad esempio formattandola per un'altra FS. Per restituire il contenuto riservato, è sufficiente eliminare il file vdc.file.
    • In XFS è stata introdotta la supporto per le quote per i dispositivi realtime. È stata aggiunta la supporto per una directory di metadati (metadata directory), che contiene tutti gli inode con metadati.
    • Nel meccanismo FUSE è stata inclusa la possibilità di modificare dinamicamente il numero massimo di pagine (FUSE_MAX_MAX_PAGES), utilizzando "sysctl fs.fuse.max_pages_limit". Sono coinvolti i foliant di pagine di memoria (page folios).
    • In SMB è stata implementata la supporto per le estensioni POSIX per SMB3, necessarie per la memorizzazione di tipi speciali di file, 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 introdotta una nuova opzione di montaggio "cifs.upcall" per definire lo spazio dei nomi. È stata garantita il riconoscimento di file di dispositivi simbolici e a blocchi creati in Windows NFS Server. È stata aggiunta la supporto per i collegamenti simbolici in stile WSL (Windows Subsystem for Linux).
    • I file system UBIFS, ADFS, BEFS, HFS, HFSPLUS, HPFS, JFS e ECRYPTFS sono stati aggiornati per utilizzare la nuova API per il montaggio delle partizioni.
    • I file system ECRYPTFS, UFS e NILFS2 sono stati aggiornati per utilizzare i foliant di pagine di memoria (page folios).
  • Memoria e servizi di sistema
    • Nel pianificatore è stata implementata un modello di preemption pigra (PREEMPT_LAZY), che corrisponde al modello di preemption totale («full preemption») per i task realtime (RR/FIFO/DEADLINE), ma ritarda la preemption dei task normali (SCHED_NORMAL) fino al confine del tick. Questo ritardo riduce i casi di preemption dei detentori di lock, permettendo di avvicinare le prestazioni a quelle delle configurazioni che utilizzano il modello di preemption volontaria (voluntary preemption). Pertanto, il nuovo modello consente di mantenere le capacità di preemption totale per i task realtime, minimizzando al contempo il calo di prestazioni per i task normali. Inoltre, il nuovo modello semplifica la logica delle operazioni di preemption dei task nel kernel, escludendo dal processo di pianificazione i gestori che si trovano in altri componenti del kernel (fuori dal pianificatore dei task).
    • Durante la compilazione con il compilatore Clang è stata fornita la possibilità di utilizzare ottimizzazioni

      Fonte: opennet.ru
Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster