Linux 6.14

Linux 6.14

Dopo due mesi di sviluppo, Linus Torvalds ha presentato il rilascio del kernel Linux 6.14. Tra le modifiche più significative: driver ntsync con primitive di sincronizzazione Windows NT, configurazione del bilanciamento delle operazioni di lettura in Btrfs RAID1, supporto per reflink in XFS in modalità realtime, possibilità di input/output bufferizzato non cacheabile, cgroup dmem per limitare la memoria GPU, utilizzo di io_uring in FUSE, delega degli attributi in NFS, supporto per la scrittura atomica in Device mapper, accelerazione dei collegamenti simbolici, gestione della possibilità di eseguire script, supporto per i chip Qualcomm Snapdragon 8 Elite, driver per NPU AMD.

Nella nuova versione sono stati inclusi 12115 aggiornamenti da 1984 sviluppatori, dimensione della patch – 39 MB (le modifiche hanno interessato 10170 file, aggiunte 531586 righe di codice, rimosse 235999 righe). Nell'uscita precedente c'erano 14172 aggiornamenti da 2086 sviluppatori, dimensione della patch – 46 MB. Circa il 41% di tutte le modifiche presentate in 6.14 è legato ai driver dei dispositivi, circa il 13% delle modifiche riguarda l'aggiornamento del codice specifico per le architetture hardware, il 14% è collegato allo stack di rete, il 7% ai file system e il 4% ai sottosistemi interni del kernel.

Principali novità:

  • Sottosistema di disco, input/output e file system
    • Nel file system Btrfs è comparso supporto per nuovi metodi di bilanciamento delle operazioni di lettura tra i dispositivi all'interno del RAID1. Oltre alla distribuzione del carico basata sugli identificatori dei processi (pid) esistente, nella nuova versione sono stati proposti tre nuovi modalità di bilanciamento: «rotation» (distribuzione uniforme del carico su tutti i dispositivi, modalità attivata per impostazione predefinita); «latency» (distribuzione considerando i ritardi, può essere utile in caso di malfunzionamenti o incertezze nei dispositivi); devid (gestione manuale). Per cambiare modalità di bilanciamento è stata aggiunta interfaccia /sys/fs/btrfs//read_policy. Tra le altre modifiche in Btrfs - una realizzazione ioctl FS_IOC_READ_VERITY_METADATA.
    • Aggiunto modalità di input/output bufferizzato non cacheabile, in cui i dati vengono rimossi dalla cache delle pagine subito dopo che le operazioni di lettura o scrittura sono completate. Questa modifica può essere utile quando si utilizzano dispositivi di archiviazione molto veloci, il caching delle operazioni in memoria è superfluo. Per tali dispositivi, la nuova modalità permette di evitare l'uso eccessivo della memoria da parte della cache delle pagine senza ricorrere a un complicato API di input/output diretto (Direct I/O).
    • In fsnotify, il meccanismo per monitorare le modifiche nel FS, aggiunto nuovo evento FS_PRE_ACCESS, generato nella fase prima di accedere al contenuto del file. L'evento viene elaborato in modalità sincrona, cioè il nucleo invia l'evento e attende la ricezione della risposta. Se la risposta arriva, l'operazione viene eseguita, mentre in caso di errore la chiamata di sistema restituisce un codice di errore allo spazio utente. Con FS_PRE_ACCESS, il processo nello spazio utente può, ad esempio, organizzare il riempimento del file man mano che i dati diventano disponibili in un'archiviazione lenta.
    • Nel sottosistema FUSE, che consente di creare implementazioni di file system nello spazio utente, è stata aggiunta highlightsFromPoint() la possibilità di scambiare dati tra il nucleo e il gestore nello spazio utente utilizzando il meccanismo di input/output io_uring. Questa modifica permette di aumentare le prestazioni di FUSE riducendo i cambi di contesto tra il nucleo e lo spazio utente.
    • Nel file system XFS è stata aggiunta la possibilità l'utilizzo del reverse mapping (rmap) in modalità di funzionamento con ritardi prevedibili ("realtime device"). Il reverse mapping consente di determinare quale file sta utilizzando un certo blocco nel dispositivo di archiviazione. Con rmap in XFS, per la modalità realtime, è stata implementata il supporto per l'operazione reflink, che consente di creare copie di file clonando i metadati del file e creando un collegamento ai dati già esistenti senza copiarli effettivamente.
    • Nel VFS è implementato è stata implementata la memorizzazione nella cache della dimensione dei collegamenti simbolici, permettendo di accelerare dell'1.5% l'esecuzione dell'operazione readlink (nel test con /initrd.img in ext4). La memorizzazione nella cache è attivata nei file system ext4 e tmpfs.
    • Nell'implementazione di NFSv4.2 è stato aggiunto il supporto per la delega degli attributi dei file, permettendo di gestire attributi come il tempo di modifica (mtime) dal lato del client NFS, senza la necessità di inviare le modifiche al server. È stato inoltre migliorato il supporto del protocollo "LOCALIO", che consente di determinare se il client e il server NFS si trovano sulla stessa macchina, per attivare le ottimizzazioni appropriate, come l'uso dell'input/output diretto (Direct I/O) da parte del client.
    • Aumentata le prestazioni delle operazioni di lettura nei file system NETFS, CIFS e AFS (Andrew File System).
    • In Squashfs è attivato modalità di caricamento diretto dei blocchi nella cache della pagina (SQUASHFS_FILE_DIRECT), che consente di fare a meno di una cache separata per read_page. La modifica ha permesso di ridurre la dimensione della memoria consumata durante l'operazione di Squashfs.
    • nella chiamata di sistema statx() è stato implementato flag STATX_DIO_READ_ALIGN, per determinare l'allineamento necessario per le operazioni di lettura da un file.
    • nel file system Bcachefs è stato aggiornato e stabilizzato il formato delle strutture disco. Qualsiasi ulteriore modifica del formato sarà considerata opzionale e verrà implementata sotto forma di estensioni facoltative. È stata notevolmente aumentata la velocità di verifica dell'integrità del FS. Inoltre, in Bcachefs è stata migliorata la modalità di sola lettura; risolti problemi che portavano a accessi alla memoria dopo il rilascio (use after free); risolti problemi con i puntatori reflink in fsck; corretta la gestione del riavvio delle transazioni.
    • Restituito il modulo md-linear, progettato per unire dispositivi a blocchi. Questo modulo era stato precedentemente dichiarato obsoleto e rimosso dal kernel 6.8, ma si è rivelato molto richiesto e quindi ora è stato ripristinato.
    • I file system F2FS e SQUASHFS sono stati convertiti per utilizzare di fogli di memoria (page folios).
    • Nel driver null_blk è stato implementato l'attributo "rotational", impostato tramite configfs e che consente di simulare il funzionamento con un dispositivo basato su dischi rotanti per semplificare il testing delle funzionalità del kernel.
    • Nel sistema Device mapper e nei moduli dm-mirror, dm-io, dm-table, dm-linear, dm-stripe e dm-raid1 è stata implementata supporto per la scrittura atomica.
  • Memoria e servizi di sistema
    • Completata l'integrazione nel kernel del driver ntsync, che implementa il dispositivo carattere /dev/ntsync e un set di primitive di sincronizzazione utilizzate nel kernel di Windows NT. L'implementazione di tali primitive a livello di kernel consente di migliorare notevolmente le prestazioni dei giochi Windows eseguiti tramite Wine. L'incremento delle prestazioni è dovuto all'eliminazione delle spese generali legate all'uso di RPC nello spazio degli utenti. La creazione di un driver separato per il kernel Linux è giustificata dalla difficoltà di implementare correttamente l'API di sincronizzazione NT sopra le primitive esistenti nel kernel.
    • Aggiunto un nuovo controller cgroup DMEM per la gestione separata delle aree di memoria dei dispositivi, come GPU. DMEM consente di creare cgroup separate per diverse attività che utilizzano la GPU, in modo che possano essere eseguite senza influenzarsi a vicenda. Questa nuova funzionalità risolve il problema della terminazione forzata delle operazioni con la GPU quando la memoria disponibile viene esaurita, grazie alla gestione della memoria riflessa della GPU e della memoria utilizzata dai driver CPU in cgroup separate.
    • Sono state apportate ottimizzazioni per scalare l'operazione di flush della cache TLB (Translation Lookaside Buffer), utilizzata per accelerare la conversione degli indirizzi virtuali in fisici. Le ottimizzazioni aggiunte riguardano l'aggiornamento ritardato di alcune strutture dati durante il passaggio di contesto, il che consente di migliorare le prestazioni durante l'esecuzione di alcuni test.
    • Aumentata la performance del meccanismo MGLRU (Multi-Generational LRU), utilizzato per determinare quali pagine di memoria sono utilizzate e quali possono essere espulse nell'area di swap.
    • Proseguito trasferimento delle modifiche dal ramo Rust-for-Linux, relative all'utilizzo del linguaggio Rust come secondo linguaggio per lo sviluppo di driver e moduli del kernel (il supporto per Rust non è attivo per impostazione predefinita e non comporta l'inclusione di Rust tra le dipendenze di build obbligatorie del kernel). È stata data la possibilità di utilizzare nel codice del kernel il macro «derive(CoercePointee)», che consente di utilizzare puntatori intelligenti con oggetti trait. Fa parte del kernel sono inclusi Wrapper Rust per PCI, piattaforme, Open Firmware, dispositivi simbolici e alcune funzionalità di input/output. Greg Kroah-Hartman, responsabile del supporto della branch stabile del kernel Linux, ha caratterizzato lo stato attuale come «quasi pronto per la scrittura di un vero driver in Rust».
    • Negli scenari di build è stato proposto nuovo codice per la generazione di versioni dei simboli di debug per i moduli caricabili, che ora utilizza informazioni dai registri di debug in formato DWARF, anziché analizzare direttamente il codice sorgente. La modifica consente di applicare la versioning dei simboli di debug per i moduli scritti in Rust. Anche la vecchia implementazione è stata mantenuta nel kernel, mentre la scelta del generatore avviene a livello di opzioni di build.
    • Per l'architettura PowerPC è stata implementata supporto della modalità di preemption pigra (PREEMPT_LAZY, lazy preemption), che corrisponde alla modalità di preemption completa («full preemption») per i task realtime (RR/FIFO/DEADLINE), ma ritarda la preemption dei task normali (SCHED_NORMAL) fino al limite del tick.
    • Nella sottosistema di profilazione delle prestazioni perf è stata aggiunta supporto dei contatori di consumo energetico per i processori AMD. È stata aggiunta possibilità di funzionare su sistemi con fino a 2048 core CPU.
    • È stata fornita possibilità di utilizzare il parametro sysctl pid_max con gli spazi dei nomi degli identificatori di processo (ID namespace). Il parametro pid_max è destinato a limitare il valore massimo degli identificatori di processo (PID) e ora può essere utilizzato per limitare il numero massimo di processi che possono essere eseguiti nello spazio dei nomi specificato. La gestione del parametro avviene in modo gerarchico, cioè i vincoli negli spazi dei nomi esterni si applicano agli spazi dei nomi annidati.
    • Quando si utilizza per avviare un processo la chiamata di sistema execveat nel file system /proc verrà ora visualizzato il nome del file avviato, anziché il numero del descrittore di file.
    • Nel codice sorgente del kernel (nella cartella samples) è stata aggiunta l'utility mountinfo, che dimostra l'uso delle chiamate di sistema statmount() e listmount().
    • Nel sottosistema BPF proposti nuove funzioni bpf_local_irq_save() e bpf_local_irq_restore() per disabilitare temporaneamente le interruzioni sulla CPU locale. Le funzioni possono essere utilizzate per implementare strutture la cui elaborazione non viene interrotta dalle interruzioni.
    • Nella chiamata di sistema madvise() quando si utilizzano i flag MADV_DONTNEED e MADV_FREE è stata fornita il rilascio delle tabelle delle pagine di memoria associate all'intervallo di indirizzi rilasciato, poiché in alcune situazioni le pagine di memoria vuote possono occupare una quantità considerevole di memoria.
    • Per l'architettura OpenRISC è stata implementata la supporto del meccanismo delle sequenze ripristinabili (rseq, restartable sequences), destinato all'esecuzione atomica rapida di operazioni che, in caso di interruzione da un altro thread, vengono annullate e si tenta nuovamente di eseguire.
    • È stata effettuata una riorganizzazione del codice con l'implementazione degli algoritmi CRC32 e CRC-T10DIF, che non si sovrappone più con il sottosistema crypto e viene chiamato direttamente dall'interfaccia di libreria. Questa modifica ha semplificato il codice e migliorato la sua efficienza.
    • Nel sistema di input/output asincrono io_uring è stata aggiunta un'interfaccia per trasmettere metadata aggiuntivi sull'integrità durante l'esecuzione delle operazioni di lettura e scrittura.
  • Virtualizzazione e sicurezza
    • Nella chiamata di sistema execveat è stata aggiunta il flag AT_EXECVE_CHECK, che consente di eseguire un controllo la possibilità di eseguire un file senza avviarlo effettivamente, ma tenendo conto delle politiche di sicurezza, dei diritti di accesso e dei moduli LSM attivi. Per l'uso in combinazione con AT_EXECVE_CHECK sono stati proposti i flag securebit SECBIT_EXEC_RESTRICT_FILE e SECBIT_EXEC_DENY_INTERACTIVE, che possono essere utilizzati per limitare l'esecuzione di file con script in linguaggi di programmazione interpretati. Il flag SECBIT_EXEC_RESTRICT_FILE prescrive ai linker e agli interpreti di utilizzare l'opzione AT_EXECVE_CHECK per verificare la possibilità di esecuzione, mentre il flag SECBIT_EXEC_DENY_INTERACTIVE vieta di elaborare comandi interattivi. L'idea principale della modifica è la possibilità di applicare politiche di sicurezza non solo ai tradizionali file eseguibili, ma anche ai file di testo con script che possono essere caricati attraverso l'avvio dell'interprete (cioè il divieto di esecuzione può essere implementato non solo all'avvio di "./script.sh" ma anche all'esecuzione sotto forma di "sh script.sh").
    • Nei sistemi x86 è stata implementata la supporto di contatori di tempo protetti per sistemi guest, che non permettono di modificare l'orologio di sistema del guest dall'ambiente host. Questa funzionalità è stata realizzata attraverso il meccanismo AMD SEV (Secure Encrypted Virtualization), utilizzato nei sistemi di virtualizzazione per proteggere le macchine virtuali da interferenze da parte del hypervisor o dall'amministratore del sistema host.
    • Nel sistema di controllo degli accessi mandatorio SELinux è stata aggiunta highlightsFromPoint() le regole xperm, che consentono di associare le politiche SELinux a specifiche chiamate ioctl() o messaggi netlink.
    • Per la certificazione dei moduli del kernel con una firma digitale, per impostazione predefinita è stato utilizzato è utilizzato l'algoritmo SHA512.
    • Nei driver per sistemi guest VirtualBox attivata il supporto per l'architettura ARM64.
    • Nel hypervisor KVM proseguito funzionamento utilizzando il meccanismo Intel TDX (Trusted Domain Extensions) per la crittografia della memoria dei sistemi guest.
    • In virtio_blk è stata aggiunta supporto per la modalità di recupero degli errori.
  • Sottosistema di rete
    • Nell'implementazione del protocollo RxRPC è comparso è possibile utilizzare grandi pacchetti UDP per aumentare la larghezza di banda.
    • Per TCP è stato aggiunto il supporto per l'algoritmo RACK-TLP per la determinazione della perdita di pacchetti.
    • Aggiunto nuovo parametro sysctl tcp_tw_reuse_delay, applicabile nell'ambito del namespace di rete (network namespace) e che consente di definire il ritardo prima che il sistema possa riutilizzare il numero della porta di rete dopo la chiusura di un socket TCP.
    • È stata aggiunta possibilità di scegliere un fornitore di tempo preciso (PTP) per la generazione di timestamp ai livelli PHY e MAC.
    • Per IPsec è stata implementata supporto per il meccanismo di aggregazione e frammentazione dei pacchetti IP incapsulati – IP-TFS/AGGFRAG (IP Traffic Flow Security/Aggregation and Fragmentation Mode for Encapsulating Security Payload).
    • Nel sistema dei socket di rete è stata aggiunta highlightsFromPoint() trasmissione dell'informazione sulla priorità (SO_PRIORITY) sotto forma di messaggi di controllo (cmsg — control messages). Per i socket di rete è stata aggiunta opzione SO_RCVPRIORITY, che include nella funzione recvmsg() la trasmissione dell'informazione sulla priorità del socket.
  • Apparecchiatura
    • Aggiunto il motore amdxdna per gli acceleratori NPU (Neural Processing Unit) integrati nella CPU AMD basati sull'architettura XDNA, destinati ad accelerare operazioni legate all'apprendimento automatico. Gli NPU basati sull'architettura XDNA sono forniti nelle serie 7040 e 8040 dei processori AMD Ryzen, negli acceleratori AMD Alveo V70 e nei SoC AMD Versal.
    • Nel driver i915 aggiunti sono stati implementati gli identificatori delle nuove GPU, è stato realizzato un gestore degli errori di inizializzazione HDMI, è stata aumentata l'affidabilità del ripristino dei motori GPU nei sistemi Haswell e in quelli più vecchi.
    • Proseguita lavoro sul driver drm (Direct Rendering Manager) Xe per GPU basate sull'architettura Intel Xe, utilizzata nelle schede grafiche Intel della famiglia Arc e nella grafica integrata, a partire dai processori Tiger Lake.
    • Nel driver Nouveau è stata aggiunta la possibilità di inviare buffer contenenti log GSP-RM tramite debugfs.
    • Nel driver AMDGPU è stato implementato il supporto per il meccanismo DRM panic, che visualizza una sorta di «schermo blu della morte» in caso di errori. È proseguita la preparazione per il supporto della futura serie di schede grafiche Radeon RX 9000 basate sull'architettura RDNA4. È stato aggiornato il supporto DCN 3.5, GG 9.5, IH 4.4, PSP 13.x, SMU 13.x, VCN 5.x, JPEG 5.x, GC 12.x, DC FAMS, RAS e ISP.
    • Nel driver DRM msm (GPU Qualcomm Adreno) è stato aggiunto il supporto per la piattaforma Qualcomm SM6150 (QCS615).
    • Nel driver DRM panfrost è stato aggiunto il supporto per SoC MediaTek MT8188 con GPU Mali-G57.
    • Nel driver DRM vc4 è stato aggiunto il supporto per SoC Broadcom BCM2712 (Raspberry Pi 5).
    • Nel driver vfio nvgrace-gpu è stata aggiunta highlightsFromPoint() dei chip NVIDIA Grace Blackwell 200.
    • Fanno parte è attivato driver per controller Intel THC (Touch Host Controller), utilizzato per interagire con schermi touch e touchpad su alcuni laptop. È stato aggiunto il supporto per dispositivi Wacom con interfaccia PCI. È stata aggiunta supporto per controller di gioco QH Electronics.
    • È stata aggiunta highlightsFromPoint() Piattaforme ARM, SoC e dispositivi: Qualcomm Snapdragon 8 Elite (SM8750), Qualcomm Snapdragon AR2 (SAR2130P), Qualcomm IQ6/IQ8, Snapdragon 425 (MSM8917), Samsung Exynos 9810, Blaize BLZP1600, Microchip SAMA7D65, Renesas R-Car V4H ES3.0, Renesas RZ/G3E. È stato aggiunto il supporto per SoC SpacemiT K1 basato sull'architettura RISC-V.
    • Nel sottosistema audio ALSA per MIDI 2.0 espansi API rawmidi e sequencer. Nell'API per esternalizzare le operazioni di compressione è stato aggiunto il supporto ASRC (Asynchronous Sample Rate Conversion).
    • È stato aggiunto il supporto per i sistemi audio dei dispositivi Allwinner suinv F1C100s, Awinc AW88083, Realtek ALC5682I-VE, TAS2781, Focusrite Scarlett 4th Gen 16i16, 18i16 e 18i20. È stata aggiunta supporto per le cuffie wireless SteelSeries Arctis 9.

Fonte: linux.org.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