Rilascio del kernel Linux 5.14

Dopo due mesi di sviluppo, Linus Torvalds ha presentato il rilascio del kernel Linux 5.14. Tra i cambiamenti più notevoli: nuove chiamate di sistema quotactl_fd() e memfd_secret(), rimozione dei driver ide e raw, nuovo controller di priorità I/O per cgroup, modalità di pianificazione delle attività SCHED_CORE, infrastruttura per la creazione di programmi caricatori BPF verificati.

La nuova versione include 15883 correzioni da 2002 sviluppatori, la dimensione della patch è di 69 MB (le modifiche hanno interessato 12580 file, sono state aggiunte 861501 righe di codice, 321654 righe sono state cancellate). Circa il 47% di tutte le modifiche introdotte nella versione 5.14 sono correlate ai driver di dispositivo, circa il 14% delle modifiche è correlato all'aggiornamento del codice specifico delle architetture hardware, il 13% è correlato allo stack di rete, il 3% è correlato ai file system e il 3% sono legati ai sottosistemi interni del kernel.

Principali innovazioni:

  • Sottosistema disco, I/O e file system
    • È stato implementato un nuovo controller di priorità I/O per i cgroup, rq-qos, che può controllare la priorità di elaborazione delle richieste per bloccare i dispositivi generati dai membri di ciascun cgroup. Il nuovo supporto del controller di priorità è stato aggiunto allo scheduler I/O mq-deadline.
    • Il file system ext4 implementa un nuovo comando ioctl, EXT4_IOC_CHECKPOINT, che forza tutte le transazioni in sospeso dal journal e i relativi buffer associati a essere scaricati su disco e sovrascrive inoltre l'area utilizzata dal journal in memoria. La modifica è stata preparata come parte di un'iniziativa per prevenire fughe di informazioni dai file system.
    • Sono state apportate ottimizzazioni alle prestazioni di Btrfs: eliminando la registrazione non necessaria degli attributi estesi durante l'esecuzione di fsync, le prestazioni delle operazioni intensive con attributi estesi sono aumentate fino al 17%. Inoltre, quando si eseguono operazioni di ritaglio che non influiscono sulle estensioni, la sincronizzazione completa viene disabilitata, riducendo così il tempo operativo del 12%. È stata aggiunta un'impostazione a sysfs per limitare la larghezza di banda I/O durante il controllo del FS. Aggiunte chiamate ioctl per annullare le operazioni di ridimensionamento ed eliminazione del dispositivo.
    • In XFS è stata riprogettata l'implementazione della cache buffer, che è stata spostata sull'allocazione delle pagine di memoria in modalità batch. Efficienza della cache migliorata.
    • F2FS aggiunge un'opzione per operare in modalità di sola lettura e implementa una modalità cache a blocchi compressa (compress_cache) per migliorare le prestazioni di lettura casuale. È stato implementato il supporto per la compressione dei file mappati in memoria utilizzando l'operazione mmap(). Per disabilitare selettivamente la compressione dei file in base ad una maschera, è stata proposta una nuova opzione di montaggio nocompress.
    • È stato svolto del lavoro nel driver exFAT per migliorare la compatibilità con alcuni dispositivi di archiviazione di fotocamere digitali.
    • Aggiunta la chiamata di sistema quotactl_fd(), che consente di gestire le quote non tramite uno speciale file di dispositivo, ma specificando un descrittore di file associato al file system a cui viene applicata la quota.
    • I vecchi driver per i dispositivi a blocchi con interfaccia IDE sono stati rimossi dal kernel e sono stati sostituiti da tempo dal sottosistema libata.
    • Il driver "raw" è stato rimosso dal kernel, fornendo accesso senza buffer ai dispositivi a blocchi tramite l'interfaccia /dev/raw. Questa funzionalità è stata implementata da tempo nelle applicazioni che utilizzano il flag O_DIRECT.
  • Servizi di memoria e di sistema
    • L'utilità di pianificazione implementa una nuova modalità di pianificazione, SCHED_CORE, che consente di controllare quali processi possono essere eseguiti insieme sullo stesso core della CPU. A ogni processo può essere assegnato un identificatore di cookie che definisce l'ambito di fiducia tra i processi (ad esempio, appartenenza allo stesso utente o contenitore). Quando si organizza l'esecuzione del codice, lo scheduler può garantire che un core della CPU sia condiviso solo tra processi associati allo stesso proprietario, il che può essere utilizzato per bloccare alcuni attacchi Spectre impedendo l'esecuzione di attività attendibili e non attendibili sullo stesso thread SMT (Hyper Threading). .
    • Per cgroup è stato implementato il supporto all'operazione kill, che permette di uccidere contemporaneamente tutti i processi associati al gruppo (invia SIGKILL) scrivendo “1” nel file virtuale cgroup.kill.
    • Funzionalità estese relative alla risposta al rilevamento di split lock (“split lock”) che si verificano quando si accede a dati non allineati in memoria a causa del fatto che durante l'esecuzione di un'istruzione atomica, i dati attraversano due linee di cache della CPU. Tale blocco porta ad un significativo calo delle prestazioni, quindi in precedenza era possibile terminare forzatamente l'applicazione che causava il blocco. La nuova versione aggiunge un parametro della riga di comando del kernel “split_lock_detect=ratelimit:N”, che consente di definire un limite a livello di sistema sulla velocità delle operazioni di blocco al secondo, oltre il quale qualsiasi processo che è diventato l'origine di uno split lock sarà costretto a fermarsi per 20 ms invece di terminare.
    • Il controller di larghezza di banda del cgroup CFS (controller di larghezza di banda CFS), che determina quanto tempo del processore può essere allocato a ciascun cgroup, implementa la capacità di definire limiti limitati nel tempo, che consente una migliore regolazione dei carichi di lavoro sensibili alla latenza. Ad esempio, impostando cpu.cfs_quota_us su 50000 e cpu.cfs_period_us su 100000 consentirà a un gruppo di processi di sprecare 100 ms di tempo CPU ogni 50 ms.
    • Aggiunta l'infrastruttura iniziale per la creazione di programmi di caricamento BPF, che consentiranno ulteriormente il caricamento dei soli programmi BPF firmati con una chiave digitale attendibile.
    • Aggiunta una nuova operazione futex FUTEX_LOCK_PI2, che utilizza un timer monotono per calcolare un timeout che tiene conto del tempo trascorso dal sistema in modalità sospensione.
    • Per l'architettura RISC-V, vengono implementati il ​​supporto per pagine di memoria di grandi dimensioni (Transparent Huge-Pages) e la possibilità di utilizzare il meccanismo KFENCE per rilevare errori quando si lavora con la memoria.
    • La chiamata di sistema madvise(), che fornisce un mezzo per ottimizzare la gestione della memoria del processo, ha aggiunto i flag MADV_POPULATE_READ e MADV_POPULATE_WRITE per generare un "errore di pagina" su tutte le pagine di memoria mappate per operazioni di lettura o scrittura senza eseguire un'effettiva lettura o scrittura (prefault ). L'uso dei flag può essere utile per ridurre i ritardi nell'esecuzione del programma, dovuti all'esecuzione proattiva del gestore “page fault” per tutte le pagine non allocate contemporaneamente, senza attendere l'effettivo accesso ad esse.
    • Il sistema di test unitario kunit ha aggiunto il supporto per l'esecuzione di test nell'ambiente QEMU.
    • Sono stati aggiunti nuovi traccianti: "osnoise" per tenere traccia dei ritardi dell'applicazione causati dalla gestione degli interrupt e "timerlat" per visualizzare informazioni dettagliate sui ritardi al risveglio da un segnale del timer.
  • Virtualizzazione e sicurezza
    • La chiamata di sistema memfd_secret() è stata aggiunta per creare un'area di memoria privata in uno spazio di indirizzi isolato, visibile solo al processo proprietario, non riflessa da altri processi e non direttamente accessibile al kernel.
    • Nel sistema di filtraggio delle chiamate di sistema seccomp, quando si spostano i gestori di blocco nello spazio utente, è possibile utilizzare una singola operazione atomica per creare un descrittore di file per un'attività isolata e restituirlo durante l'elaborazione di una chiamata di sistema. L'operazione proposta risolve il problema di interrompere un gestore nello spazio utente quando arriva un segnale.
    • Aggiunto un nuovo meccanismo per la gestione dei limiti delle risorse nello spazio dei nomi dell'ID utente, che collega i singoli contatori rlimit a un utente nello "spazio dei nomi utente". La modifica risolve il problema con l'uso di contatori di risorse comuni quando un utente esegue processi in contenitori diversi.
    • L'hypervisor KVM per sistemi ARM64 ha aggiunto la possibilità di utilizzare nei sistemi guest l'estensione MTE (MemTag, Memory Tagging Extension), che permette di associare tag ad ogni operazione di allocazione della memoria e organizzare il controllo del corretto utilizzo dei puntatori per bloccare lo sfruttamento di vulnerabilità causate dall'accesso a blocchi di memoria già liberati, overflow del buffer, accessi prima dell'inizializzazione e utilizzo al di fuori del contesto corrente.
    • Le funzionalità di autenticazione del puntatore della piattaforma ARM64 possono ora essere configurate separatamente per kernel e spazio utente. La tecnologia consente di utilizzare istruzioni ARM64 specializzate per verificare gli indirizzi di ritorno utilizzando firme digitali archiviate nei bit superiori non utilizzati del puntatore stesso.
    • Linux in modalità utente ha aggiunto il supporto per l'utilizzo di driver per dispositivi PCI con un bus PCI virtuale, implementato dal driver PCI-over-virtio.
    • Per i sistemi x86, aggiunto il supporto per il dispositivo paravirtualizzato virtio-iommu, consentendo l'invio di richieste IOMMU come ATTACH, DETACH, MAP e UNMAP tramite il trasporto virtio senza emulare le tabelle delle pagine di memoria.
    • Per le CPU Intel, dalla famiglia Skylake a Coffee Lake, l'utilizzo di Intel TSX (Transactional Synchronization Extensions), che forniscono strumenti per migliorare le prestazioni delle applicazioni multi-thread eliminando dinamicamente le operazioni di sincronizzazione non necessarie, è disabilitato per impostazione predefinita. Le estensioni sono disabilitate a causa della possibilità di attacchi Zombieload che manipolano la fuga di informazioni tramite canali di terze parti che si verifica durante il funzionamento del meccanismo TAA (TSX Asynchronous Abort).
  • Sottosistema di rete
    • Integrazione nel nucleo di MPTCP (MultiPath TCP), un'estensione del protocollo TCP per organizzare il funzionamento di una connessione TCP con la consegna di pacchetti contemporaneamente su più percorsi attraverso diverse interfacce di rete associate a diversi indirizzi IP. La nuova versione aggiunge un meccanismo per impostare le proprie policy di hashing del traffico per IPv4 e IPv6 (policy hash multipath), rendendo possibile determinare dallo spazio utente quali campi nei pacchetti, compresi quelli incapsulati, verranno utilizzati nel calcolo dell'hash che determina il scelta del percorso per il pacchetto.
    • Al trasporto virtuale virtio è stato aggiunto il supporto per i socket SOCK_SEQPACKET (trasmissione ordinata e affidabile di datagrammi).
    • Sono state ampliate le funzionalità del meccanismo socket SO_REUSEPORT, che consente a più socket di ascolto di connettersi contemporaneamente a una porta per ricevere connessioni con la distribuzione delle richieste in entrata simultaneamente su tutti i socket collegati tramite SO_REUSEPORT, il che semplifica la creazione di applicazioni server multi-thread . La nuova versione aggiunge strumenti per trasferire il controllo su un altro socket in caso di fallimento durante l'elaborazione di una richiesta da parte del socket inizialmente selezionato (risolve il problema con la perdita delle singole connessioni al riavvio dei servizi).
  • Attrezzatura
    • Il driver amdgpu fornisce il supporto per la nuova serie di GPU AMD Radeon RX 6000, nome in codice "Beige Goby" (Navi 24) e "Yellow Carp", oltre a un supporto migliorato per la GPU Aldebaran (gfx90a) e l'APU Van Gogh. Aggiunta la possibilità di lavorare contemporaneamente con diversi pannelli eDP. Per APU Renoir è stato implementato il supporto per lavorare con buffer crittografati nella memoria video (TMZ, Trusted Memory Zone). Aggiunto il supporto per le schede grafiche hot-unplug. Per le GPU Radeon RX 6000 (Navi 2x) e le GPU AMD precedenti, il supporto ASPM (Active State Power Management) è abilitato per impostazione predefinita, precedentemente abilitato solo per le GPU Navi 1x, Vega e Polaris.
    • Per i chip AMD è stato aggiunto il supporto alla memoria virtuale condivisa (SVM, shared virtual memory) basato sul sottosistema HMM (Heterogeneous memory management), che consente l'utilizzo di dispositivi dotati di proprie unità di gestione della memoria (MMU, memory management unit), che può accedere alla memoria principale. In particolare, utilizzando HMM, è possibile organizzare uno spazio di indirizzi condiviso tra GPU e CPU, in cui la GPU può accedere alla memoria principale del processo.
    • Aggiunto il supporto iniziale per la tecnologia AMD Smart Shift, che modifica dinamicamente le impostazioni di alimentazione di CPU e GPU sui laptop con chipset e scheda grafica AMD per migliorare le prestazioni di gioco, editing video e rendering 3D.
    • Il driver i915 per le schede grafiche Intel include il supporto per i chip Intel Alderlake P.
    • Aggiunto driver drm/hyperv per l'adattatore grafico virtuale Hyper-V.
    • Aggiunto il supporto per il computer all-in-one Raspberry Pi 400.
    • Aggiunto il driver dell-wmi-privacy per supportare gli interruttori hardware della fotocamera e del microfono inclusi nei laptop Dell.
    • Per i laptop Lenovo è stata aggiunta un'interfaccia WMI per modificare le impostazioni del BIOS tramite sysfs /sys/class/firmware-attributes/.
    • Supporto esteso per dispositivi con interfaccia USB4.
    • Aggiunto supporto per schede audio e codec AmLogic SM1 TOACODEC, Intel AlderLake-M, NXP i.MX8, NXP TFA1, TDF9897, Rockchip RK817, Qualcomm Quinary MI2 e Texas Instruments TAS2505. Supporto audio migliorato sui laptop HP e ASUS. Aggiunte patch per ridurre i ritardi prima dell'avvio della riproduzione dell'audio sui dispositivi USB.

Fonte: opennet.ru

Aggiungi un commento