Kernel Linux 5.14

Kernel Linux 5.14

Dopo due mesi di sviluppo Linus Torvalds presentata rilascio del kernel Linux 5.14. Le modifiche degne di nota includono nuove chiamate di sistema quotactl_fd() e memfd_secret(), rimozione di ide e driver raw, nuovo controller di priorità I/O cgroup, modalità di pianificazione delle attività SCHED_CORE, infrastruttura per la creazione di caricatori per programmi BPF verificati.

La nuova versione ha ricevuto 15883 correzioni dagli sviluppatori del 2002, la dimensione della patch è di 69 MB (le modifiche hanno interessato 12580 file, sono state aggiunte 861501 righe di codice, 321654 righe sono state eliminate). Circa il 47% di tutte le modifiche introdotte in 5.14 sono relative ai driver di dispositivo, circa il 14% delle modifiche sono relative all'aggiornamento del codice specifico per le architetture hardware, il 13% sono relative allo stack di rete, il 3% ai file system e il 3% all'interno sottosistemi del kernel.

Il principale innovazioni:

  • sottosistema disco, I/O e file system:
    • per gruppo implementato Un nuovo controller di priorità I/O, rq-qos, può controllare la priorità di elaborazione delle richieste ai dispositivi a blocchi generati dai membri di ciascun cgroup. Il supporto per un nuovo controller di priorità è stato aggiunto allo scheduler I/O mq-deadline;
    • su file system ext4 implementato nuovo comando ioctl EXT4_IOC_CHECKPOINT, che forza lo scaricamento su disco di tutte le transazioni in sospeso dal registro e dai relativi buffer associati e sovrascrive anche l'area utilizzata dal registro nell'archivio. La modifica è stata preparata come parte dell'iniziativa per prevenire fughe di informazioni dai file system;
    • in btrfs introdotto ottimizzazioni delle prestazioni: 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 troncamento che non influiscono sugli extent, la sincronizzazione completa viene disabilitata, riducendo il tempo dell'operazione del 12%. È stata aggiunta un'impostazione a sysfs per limitare la larghezza di banda I/O durante il controllo di FS. Aggiunte chiamate ioctl per annullare il ridimensionamento del dispositivo e rimuovere le operazioni;
    • in XFS rivisto implementazione di una cache buffer, che si traduce nell'allocazione di pagine di memoria in modalità batch. Migliore efficienza della cache;
    • F2FS ha aggiunto un'opzione per lavorare in modalità di sola lettura e ha implementato una modalità di memorizzazione nella cache dei blocchi compressi (compress_cache) per migliorare le prestazioni di lettura casuale. Supporto implementato per la compressione dei file mappati alla memoria utilizzando l'operazione mmap(). Per disabilitare selettivamente la compressione dei file tramite maschera, è stata proposta una nuova opzione di montaggio, nocompress;
    • si è lavorato nel driver exFAT per migliorare la compatibilità con l'archiviazione di alcune fotocamere digitali;
    • chiamata di sistema aggiunta quotactl_fd(), che consente di gestire le quote non tramite un apposito device file, ma specificando un descrittore di file associato al file system per il quale viene applicata la quota;
    • i vecchi driver per i dispositivi a blocchi con l'interfaccia IDE sono stati rimossi dal kernel, che sono stati sostituiti molto tempo fa dal sottosistema libata. Il supporto per i vecchi dispositivi è mantenuto in pieno, le modifiche riguardano solo la possibilità di utilizzare i vecchi driver, quando si utilizzavano i quali le unità erano chiamate /dev/hd* e non /dev/sd*;
    • Rimosso il driver "raw" dal kernel, che fornisce accesso senza buffer ai dispositivi a blocchi tramite l'interfaccia /dev/raw. Questa funzionalità è stata a lungo implementata nelle applicazioni che utilizzano il flag O_DIRECT;
  • memoria e servizi di sistema:
    • l'utilità di pianificazione ha 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 attendibilità tra i processi (ad esempio, appartenenti allo stesso utente o contenitore). Quando si organizza l'esecuzione del codice, lo scheduler può garantire che lo stesso core della CPU sia condiviso solo tra processi associati allo stesso proprietario, che può essere utilizzato per bloccare alcuni attacchi della classe Spectre impedendo l'esecuzione di attività affidabili e non affidabili sullo stesso SMT filo (Hyper Threading);
    • per il meccanismo cgroup è implementato il supporto all'operazione kill, che permette di killare immediatamente tutti i processi associati al gruppo (send SIGKILL) scrivendo "1" nel file virtuale cgroup.kill;
    • sono state potenziate le funzionalità relative alla risposta alla rilevazione degli split lock ("split lock"), che si verificano durante l'accesso a dati non allineati in memoria a causa del fatto che durante l'esecuzione di un'istruzione atomica i dati attraversano due righe della cache della CPU allargato. Tali blocchi portano a un calo significativo delle prestazioni, quindi in passato era spesso possibile forzare l'applicazione a terminare l'applicazione che ha causato il blocco. La nuova versione aggiunge un'opzione della riga di comando del kernel "split_lock_detect=ratelimit:N" per impostare un limite a livello di sistema sull'intensità delle operazioni di blocco al secondo, dopo il quale qualsiasi processo che è diventato la fonte di uno split lock sarà costretto a stop per 20 ms invece di terminare;
    • Il cgroup bandwidth controller CFS (CFS bandwidth controller), che determina quanto tempo del processore può essere assegnato a ciascun cgroup, ha la capacità di definire limiti limitati da una data durata di azione, che consente una migliore regolazione dei carichi di lavoro sensibili ai ritardi. Ad esempio, l'impostazione di cpu.cfs_quota_us su 50000 e cpu.cfs_period_us su 100000 consentirà al gruppo di processi di sprecare 100 ms di tempo della CPU ogni 50 ms;
    • aggiunto un'infrastruttura iniziale per la creazione di program loader BPF, che consentiranno successivamente di caricare solo programmi BPF firmati con una chiave digitale affidabile;
    • aggiunta una nuova operazione futex FUTEX_LOCK_PI2, che utilizza un timer monotono per calcolare il timeout, che tiene conto del tempo trascorso dal sistema in modalità sleep;
    • per l'architettura RISC-V, supporto per pagine di memoria di grandi dimensioni (Transparent Huge-Pages) e possibilità di utilizzare il meccanismo KFENCE rilevare errori quando si lavora con la memoria;
    • nella chiamata di sistema madvise(), che fornisce un mezzo per ottimizzare la gestione della memoria del processo, aggiunto flag MADV_POPULATE_READ e MADV_POPULATE_WRITE per generare un "errore di pagina" in tutte le pagine di memoria mappate per operazioni di lettura o scrittura senza eseguire effettivamente una lettura o scrittura (prefault). L'utilizzo dei flag può essere utile per ridurre i ritardi nel processo di funzionamento del programma, dovuti all'esecuzione preventiva del page fault handler in una sola volta per tutte le pagine non allocate, senza attendere l'effettivo accesso ad esse;
    • nel sistema di test unitario kunit aggiunto supporto per l'esecuzione di test nell'ambiente QEMU;
    • aggiunti nuovi traccianti: "osrumore' per monitorare le latenze delle applicazioni causate da interruzioni e 'timerlat' per visualizzare informazioni dettagliate sui ritardi nelle riattivazioni del timer;
  • virtualizzazione e sicurezza:
    • aggiunto chiamata di sistema memfd_segreto(), che consente di creare un'area di memoria privata in uno spazio di indirizzi isolato, visibile solo al processo proprietario, non riflessa ad 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 con un handler interrupt nello spazio utente quando arriva un segnale;
    • aggiunto nuovo meccanismo per gestire il limite delle risorse nello spazio dei nomi dell'ID utente, che lega i singoli contatori rlimit a un utente nello "spazio dei nomi utente". La modifica risolve il problema con l'utilizzo di contatori di risorse comuni quando lo stesso utente avvia processi in contenitori diversi;
    • all'hypervisor KVM per sistemi ARM64 è stata aggiunta la possibilità di utilizzare l'estensione MTE (MemTag, Memory Tagging Extension) nei sistemi guest, che consente di associare i tag ad ogni operazione di allocazione della memoria e provvedere alla verifica della correttezza dell'utilizzo dei puntatori da bloccare lo sfruttamento delle vulnerabilità causate dall'accesso a blocchi di memoria già liberati, overflow del buffer, chiamate prima dell'inizializzazione e utilizzo al di fuori del contesto attuale;
    • L'autenticazione del puntatore fornita dalla piattaforma ARM64 può ora essere configurata separatamente per il kernel e lo spazio utente. La tecnologia consente l'uso di istruzioni ARM64 specializzate per verificare gli indirizzi di ritorno utilizzando firme digitali memorizzate nei bit superiori inutilizzati del puntatore stesso;
    • in modalità utente Linux aggiunto supporto per l'utilizzo di driver per dispositivi PCI con un bus PCI virtuale implementato dal driver PCI-over-virtio;
    • per i sistemi x86, è stato aggiunto il supporto per il dispositivo virtio-iommu paravirtualizzato, consentendo l'invio di richieste IOMMU come ATTACH, DETACH, MAP e UNMAP tramite il trasporto virtio senza emulare le tabelle delle pagine;
    • per le CPU Intel, partendo dalla famiglia Skylake e finendo con Coffee Lake, è disabilitato per impostazione predefinita l'utilizzo delle estensioni Intel TSX (Transactional Synchronization Extensions), che forniscono strumenti per migliorare le prestazioni delle applicazioni multithread eliminando dinamicamente le operazioni di sincronizzazione non necessarie. Le estensioni sono disabilitate a causa della possibilità di attacchi Zombieload, manipolando la fuga di informazioni attraverso canali di terze parti che si verifica durante il funzionamento del meccanismo delle operazioni di interruzione asincrona (TAA, TSX Asynchronous Abort);
  • sottosistema di rete:
    • continua integrazione nel core di MPTCP (MultiPath TCP), un'estensione del protocollo TCP per organizzare il funzionamento di una connessione TCP con la consegna simultanea di pacchetti lungo più percorsi attraverso diverse interfacce di rete legate a diversi indirizzi IP. Nella nuova versione aggiunto un meccanismo per impostare le proprie politiche di hashing del traffico per IPv4 e IPv6 (multipath hash policy), che consente di determinare dallo spazio utente quale dei campi nei pacchetti, inclusi quelli incapsulati, verrà utilizzato nel calcolo dell'hash che determina la scelta del percorso per il pacchetto;
    • supporto socket aggiunto al trasporto virtuale virtio CALZINO_SEQPACKET (trasmissione ordinata e affidabile di datagrammi);
    • sono state ampliate le funzionalità del meccanismo socket SO_REUSEPORT, che consente a più socket in ascolto di connettersi contemporaneamente a una porta per ricevere connessioni con la distribuzione delle richieste in entrata contemporaneamente a tutti i socket collegati tramite SO_REUSEPORT, che semplifica la creazione di applicazioni server multi-thread . Nella nuova versione aggiunto mezzi per trasferire il controllo ad un altro socket in caso di guasto durante l'elaborazione di una richiesta da parte del socket inizialmente selezionato (risolve il problema con la perdita di singole connessioni al riavvio dei servizi);
  • attrezzatura:
    • nel driver amdgpu implementato supporto per la nuova serie di GPU AMD Radeon RX 6000 con nome in codice "Beige Goby" (Navi 24) e "Yellow Carp", nonché supporto migliorato per GPU Aldebaran (gfx90a) e APU Van Gogh. Aggiunta la possibilità di lavorare con più pannelli eDP contemporaneamente. Per APU Renoir, è stato implementato il supporto per lavorare con buffer crittografati nella memoria video (TMZ, Trusted Memory Zone). Aggiunto il supporto hot-unplug per le schede grafiche. Per le GPU Radeon RX 6000 (Navi 2x) e le GPU AMD meno recenti, il supporto per il meccanismo di risparmio energetico ASPM (Active State Power Management) è abilitato per impostazione predefinita, che in precedenza era abilitato solo per le GPU Navi 1x, Vega e Polaris;
    • per i chip AMD aggiunto il supporto per la memoria virtuale condivisa (SVM, shared virtual memory) basata sul sottosistema HMM (Heterogeneous memory management), che consente l'utilizzo di dispositivi con proprie unità di gestione della memoria (MMU, memory management unit), che possono accedere la memoria principale. In particolare, con l'ausilio di HMM, è possibile organizzare uno spazio di indirizzamento condiviso tra la GPU e la CPU, in cui la GPU può accedere alla memoria principale del processo;
    • aggiunto il supporto tecnologico iniziale Cambio intelligente AMD, che modifica dinamicamente le impostazioni di potenza della CPU e della GPU sui laptop con chipset AMD e scheda grafica per migliorare le prestazioni nei giochi, nell'editing video e nel rendering 3D;
    • nel driver i915 per le schede video Intel è incluso supporto per chip Intel Alderlake P;
    • aggiunto il driver drm/hyperv per l'adattatore grafico virtuale Hyper-V;
    • aggiunto driver grafico simpledrm che utilizza il framebuffer EFI-GOP o VESA fornito dal firmware UEFI o dal BIOS per l'output. Lo scopo principale del driver è fornire un output grafico durante le fasi iniziali di avvio, prima di poter utilizzare un driver DRM completo. Il driver può anche essere utilizzato come soluzione temporanea per l'hardware che non dispone ancora di driver DRM nativi;
    • aggiunto supporto computer monoblocco Raspberry Pi 400;
    • Aggiunto il driver dell-wmi-privacy per supportare gli interruttori hardware per fotocamera e microfono forniti da Dell.
    • per laptop Lenovo aggiunto Interfaccia WMI per modificare le impostazioni del BIOS tramite sysfs /sys/class/firmware-attributes/;
    • allargato supporto 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. Aggiunto patch per ridurre i ritardi prima dell'avvio della riproduzione audio su dispositivi con interfaccia USB.

Fonte: opennet.ru.

Fonte: linux.org.ru