Rilascio del kernel Linux 5.3

Dopo due mesi di sviluppo, Linus Torvalds ha presentato rilascio del kernel Linux 5.3. Tra le modifiche più significative: supporto per GPU AMD Navi, processori Zhaoxi e tecnologia di gestione dell'energia Intel Speed Select, possibilità di utilizzare le istruzioni umwait per attendere senza utilizzare cicli,
modalità 'utilization clamping' che aumenta l'interattività per CPU asimmetrici, la chiamata di sistema pidfd_open, possibilità di utilizzare indirizzi IPv4 dalla subnet 0.0.0.0/8, possibilità di accelerazione hardware per nftables, supporto HDR nel sottosistema DRM, integrazione dell'hypervisor ACRN.

In comunicato Il nuovo rilascio di Linus ha ricordato a tutti gli sviluppatori la regola principale dello sviluppo del kernel: mantenere invariato il comportamento dei componenti dello spazio utente. Le modifiche al kernel non devono in alcun modo interrompere le applicazioni già funzionanti e causare regressioni a livello utente. Tuttavia, la modifica del comportamento può provocare non solo cambiamenti nell'ABI, rimozione di codice obsoleto o apparizione di errori, ma anche influenze indirette su miglioramenti utili che funzionano correttamente. Come esempio lampante è stata scartata un'ottimizzazione nel codice Ext4, che riduce il numero di accessi al disco disabilitando la lettura anticipata della tabella inode per piccole richieste di input/output. L'ottimizzazione ha portato al fatto che, a causa della riduzione dell'attività del disco, l'entropia per il generatore di numeri casuali getrandom() ha iniziato ad accumularsi più lentamente e in alcune configurazioni, in particolari circostanze, si potrebbero osservare blocchi durante il caricamento fino a quando il pool di entropia non si riempie. Poiché l'ottimizzazione è realmente utile, tra gli sviluppatori si è aperta una discussione in cui si proponeva di risolvere il problema disabilitando per impostazione predefinita la modalità di blocco della chiamata getrandom() con l'aggiunta di un flag opzionale per attendere l'entropia, ma una tale modifica influirebbe sulla qualità dei numeri casuali all'inizio del caricamento.

Nella nuova versione sono state apportate 15794 correzioni da 1974 sviluppatori,

la dimensione della patch è di 92 MB (le modifiche hanno riguardato 13986 file, sono state aggiunte 258419 righe di codice,
e sono state rimosse 599137 righe). Circa il 39% di tutte le modifiche presenti nella versione 5.3
sono correlate ai driver di dispositivo, circa il 12% delle modifiche riguardano
l'aggiornamento del codice specifico per architetture hardware, 11%
a che fare con l'aggiornamento del codice specifico per le architetture hardware, 11%
è correlato allo stack di rete, il 3% ai filesystem e il 3% ai sottosistemi interni
interni del kernel.

Principali novità:

  • Memoria e servizi di sistema
    • È proseguito lo sviluppo della funzionalità 'pidfd', che aiuta a gestire le situazioni di riutilizzo del PID (pidfd è legato a un processo specifico e non cambia, mentre il PID può essere associato a un altro processo dopo la conclusione del processo attuale associato a questo PID). In precedenza, era già stato aggiunto al kernel
      la chiamata di sistema pidfd_send_signal() e il flag CLONE_PIDFD nella chiamata clone(), che consente di ottenere il pidfd per utilizzare in idfd_send_signal(). Utilizzando la chiamata clone() con il flag CLONE_PIDFD, potrebbero sorgere problemi con i gestori di servizi o il sistema di terminazione forzata dei processi in caso di mancanza di memoria sulla piattaforma Android. In questo caso, per avviare viene utilizzata la chiamata fork() o clone() senza CLONE_PIDFD.

      Nel kernel 5.3 è stata introdotta la chiamata di sistema pidfd_open(), che consente di ottenere un pidfd valido per un processo esistente arbitrario, creato non tramite la chiamata clone() con il flag CLONE_PIDFD. È stata anche aggiunta la supporto per il polling del pidfd tramite poll() ed epoll(), che consente ai gestori dei processi di monitorare la conclusione di processi arbitrari, senza temere una condizione di gara in caso di riassegnazione del PID a un nuovo processo. Il meccanismo di notifica della fine del processo associato al pidfd è simile a quello che informa sulla conclusione del proprio processo figlio;

    • È stata aggiunta al pianificatore attività la supporto per il meccanismo di limitazione del carico (Utilization clamping), che consente di attenersi a intervalli minimi o massimi di frequenze, a seconda delle attività attive sulla CPU. Il meccanismo presentato accelera i compiti che influenzano direttamente la qualità dell'interazione con l'utente, eseguendo questi compiti almeno al limite inferiore della 'frequenza richiesta'. I compiti a bassa priorità, che non influenzano il lavoro dell'utente, vengono eseguiti utilizzando il limite superiore della 'frequenza consentita'. I limiti sono impostati tramite gli attributi sched_uclamp_util_min e sched_uclamp_util_max nella chiamata di sistema sched_setattr().
    • È stato aggiunto il supporto per la tecnologia di gestione dei consumi energetici Intel Speed Select, disponibile su alcuni server con processori Intel Xeon. La tecnologia indicata consente di impostare le configurazioni di prestazioni e larghezza di banda delle partizioni per diversi core della CPU, permettendo di dare priorità alle prestazioni per i compiti eseguiti su determinati core, sacrificando le prestazioni su altri core;
    • Processi nello spazio utente fornita la possibilità di attendere per un breve periodo senza utilizzare cicli tramite l'istruzione umwait. Questa istruzione, insieme alle istruzioni umonitor e tpause, sarà proposta nei chip Intel «Tremont» in fase di rilascio e consentirà di implementare ritardi energeticamente efficienti che non influenzano le prestazioni di altri thread quando si utilizza Hyper Threading;
    • Per l'architettura RISC-V è stata aggiunta la supporto per le grandi pagine di memoria (huge pages);
    • Nel meccanismo di tracciamento «kprobes» è stata aggiunta la possibilità di dereferenziare puntatori del kernel nello spazio utente, il che può essere applicato, ad esempio, per valutare il contenuto delle strutture passate alle chiamate di sistema. È stata anche aggiunta la possibilità di impostare controlli durante il caricamento.
    • Nel file di configurazione è stata aggiunta l'opzione PREEMPT_RT per lavorare in modalità real-time. Il codice per supportare la modalità real-time non è stato ancora aggiunto al kernel, ma l'apparizione dell'opzione è un buon segno che la lunga epopea dei integrare patch Realtime-Preempt si avvicina alla conclusione;
    • È stata aggiunta la chiamata di sistema clone3() con l'implementazione di una versione dell'interfaccia clone() più estensibile, che consente di specificare un numero maggiore di flag;
    • È stato aggiunto il gestore bpf_send_signal(), che consente ai programmi BPF di inviare segnali a processi arbitrari;
    • Per gli eventi perf nell'ambiente del hypervisor KVM è stato aggiunto un nuovo meccanismo di filtraggio degli eventi, che consente all'amministratore di definire i tipi di eventi consentiti o non consentiti per il monitoraggio sul lato del sistema ospite;
    • Nel meccanismo di verifica delle applicazioni eBPF è stata aggiunta la possibilità di gestire programmi con cicli, se l'esecuzione del ciclo è limitata e non può portare a superare il limite sul numero massimo di istruzioni;
  • Sottosistema di disco, input/output e file system
    • Per il file system XFS è stata implementata la possibilità di esplorazione multi-threading degli inode (ad esempio, durante il controllo delle quote). Sono stati aggiunti nuovi ioctl BULKSTAT e INUMBERS, che forniscono accesso alle funzionalità introdotte nella quinta edizione del formato FS, come il timestamp di creazione dell'inode e la possibilità di impostare i parametri BULKSTAT e INUMBERS per ogni gruppo AG (Allocation Groups);
    • In Ext4 aggiunto il supporto per spazi vuoti nelle directory (blocchi non associati).
      È stata garantita la gestione del flag "i" (immutabile) per i file aperti (divieto di scrittura nel caso in cui il flag fosse stato impostato quando il file era già aperto);
    • In Btrfs è stata garantita la definizione di un'implementazione rapida di crc32c su tutte le architetture;
    • Nel CIFS, il codice per il supporto di smbdirect ha perso la caratteristica di sviluppo sperimentale. In SMB3 è stata aggiunta la possibilità di utilizzare algoritmi crittografici in modalità GCM. È stata aggiunta una nuova opzione di montaggio per estrarre i parametri della modalità delle voci ACE (Access Control Entry). È stata ottimizzata la prestazione della chiamata open();
    • In F2FS è stata aggiunta un'opzione per limitare il garbage collector quando si opera in modalità checkpoint=disable. È stato aggiunto un ioctl per rimuovere intervalli di blocchi da F2FS, consentendo la manutenzione dinamica delle dimensioni della partizione. È stata introdotta la possibilità di allocare un file di swap in F2FS garantendo l'I/O diretto. Per tutti gli utenti è stato aggiunto il supporto per il pinning di file e l'allocazione di blocchi per file simili;
    • Nell'interfaccia per l'I/O asincrono io_uring è stato aggiunto il supporto per le operazioni asincrone sendmsg() e recvmsg();
    • Nel file system UBIFS è stato aggiunto il supporto per la compressione utilizzando l'algoritmo zstd e la possibilità di verifica delle immagini del filesystem firmate;
    • Nel file system Ceph è stato aggiunto il supporto per le etichette di sicurezza SELinux per i file;
    • Per NFSv4 è stata implementata una nuova opzione di montaggio "nconnect=", che determina il numero di connessioni stabilite con il server. Il traffico tra queste connessioni sarà distribuito utilizzando il bilanciamento del carico. Inoltre, il server NFSv4 ora crea una directory /proc/fs/nfsd/clients con informazioni sui client attuali, comprese le informazioni sui file che hanno aperto;
  • Virtualizzazione e sicurezza
    • Nel kernel è stato incluso un hypervisor per dispositivi embedded ACRN, scritto pensando alla prontezza nell'esecuzione di compiti in tempo reale e alla sua idoneità all'uso in sistemi critici. ACRN garantisce costi minimi, assicura basse latenze (low latency) e una risposta adeguata nell'interazione con l'hardware. Supporta la virtualizzazione delle risorse CPU, I/O, delle sottosistemi di rete, delle operazioni grafiche e audio. ACRN può essere utilizzato per avviare più macchine virtuali isolate in moduli di controllo elettronico, cruscotti, sistemi informatici automobilistici, dispositivi IoT consumer e altre attrezzature embedded;
    • In User-mode Linux è stata aggiunta la modalità «viaggio nel tempo», che consente di rallentare o accelerare il tempo in un ambiente virtuale UML per semplificare il debug del codice legato al tempo. Inoltre, è stato aggiunto il parametro
      time-travel-start, che consente di avviare gli orologi di sistema da un momento specificato nel formato epoch;
    • Sono state aggiunte nuove opzioni della riga di comando del kernel «init_on_alloc» e «init_on_free», il cui utilizzo attiva l'azzeramento delle aree di memoria allocate e liberate (riempiendo di zeri durante malloc e free), il che aumenta la sicurezza a spese di un costo aggiuntivo per l'inizializzazione;
    • È stato aggiunto un nuovo driver virtio-iommu , con l'implementazione di un dispositivo paravirtualizzato che consente l'invio di richieste IOMMU, come ATTACH, DETACH, MAP e UNMAP, sopra il trasporto virtio senza emulare le tabelle delle pagine di memoria;
    • È stato aggiunto un nuovo driver virtio-pmem, che offre accesso a dispositivi di archiviazione riflessi nello spazio degli indirizzi fisici, come NVDIMM;
    • Realizzato il supporto per l'attaccamento di chiavi crittografiche a uno spazio dei nomi utente o di rete (le chiavi diventano non disponibili al di fuori dello spazio dei nomi selezionato), nonché la protezione delle chiavi tramite ACL;
    • Nel sottosistema crittografico è stata aggiunta supporto per un algoritmo di hashing non crittografico molto veloce xxhash, la cui velocità è limitata dalle prestazioni della memoria;
  • Sottosistema di rete
    • Implementata la gestione degli indirizzi IPv4 nell'intervallo 0.0.0.0/8, che in precedenza non era disponibile per l'uso. L'introduzione di questa subnet permetterà distribuirà ulteriori 16 milioni di indirizzi IPv4;
    • In Netfilter per nftables è stata aggiunta il supporto a meccanismi di accelerazione hardware per la filtrazione dei pacchetti grazie all'uso di quanto aggiunto nei driver Flow Block API. Le tabelle delle regole complete con tutte le catene possono essere trasferite ai driver di rete. L'attivazione avviene tramite l'associazione del flag NFT_TABLE_F_HW alla tabella. Sono supportati metadati semplici per i protocolli di livello 3 e 4, azioni di accettare/rifiutare, abbinamenti per IP e porte di rete del mittente/destinatario e tipo di protocollo;
    • È stata aggiunta supporto integrato per il tracciamento delle connessioni per i bridge di rete, che non richiede l'uso di un livello di emulazione br_netfilter;
    • In nf_tables è stata aggiunta supporto per il modulo SYNPROXY, che replica le funzionalità simili di iptables, e è stata implementata la possibilità di controllare le regole in base a singole opzioni nell'intestazione IPv4;
    • È stata aggiunta la possibilità di collegare programmi BPF a chiamate di sistema setsockopt() e getsockopt(), che, ad esempio, consente di collegare i propri gestori di accesso a queste chiamate. Inoltre, è stato aggiunto un nuovo punto di chiamata (hook) attraverso il quale è possibile organizzare la chiamata di un programma BPF una volta per ciascun intervallo RTT (round-trip-time);
    • Per IPv4 e IPv6 è stata aggiunta nuovo meccanismo di archiviazione dei dati di routing nexthop, mirato ad aumentare la scalabilità delle tabelle di routing. I test condotti hanno dimostrato che utilizzando il nuovo sistema, l'impostazione di 743.000 route è stata caricata nel kernel in soli 4.3 secondi;
    • Per Bluetooth è stata implementata funzionalità necessaria per supportare il LE ping;
  • Apparecchiatura
    • È stata aggiunta supporto per i processori compatibili x86 dell'azienda Zhaoxin, sviluppati a seguito di un progetto congiunto tra VIA Technologies e il municipio di Shanghai. La famiglia di CPU ZX è costruita sulla base dell'architettura x86-64 Isaiah, che continua a sviluppare le tecnologie VIA Centaur;
    • Nel sottosistema DRM (Direct Rendering Manager), così come nei driver grafici amdgpu e i915, è stato aggiunto il supporto per l'analisi, l'elaborazione e l'invio tramite la porta HDMI di metadati HDR (High Dynamic Range), che consente di utilizzare pannelli e schermi HDR in grado di visualizzare ulteriori gamme di luminosità;
    • Nel driver amdgpu è stato aggiunto un supporto iniziale per la GPU AMD NAVI (RX5700), che include un driver di base, codice per interagire con gli schermi (DCN2), supporto GFX e calcoli (GFX10),
      SDMA 5 (System DMA0), strumenti di gestione dell'energia e codificatori/decodificatori multimediali (VCN2). Nell'amdgpu è anche stato migliorato il supporto per le schede basate su GPU Vega12 e Vega20, per le quali sono state aggiunte ulteriori funzionalità di gestione della memoria e consumo energetico;
    • Nel driver amdkfd (per GPU discreti, come Fiji, Tonga, Polaris) è stato aggiunto il supporto per le schede basate su GPU VegaM;
    • Nel driver DRM per schede grafiche Intel per chip Icelake è stato implementato nuovo regime multisegmentato di correzione gamma. Aggiunta la possibilità di output tramite DisplayPort nel formato YCbCr4:2:0. Sono stati aggiunti nuovi firmware GuC per SKL, BXT, KBL, GLK e ICL. È stata implementata la possibilità di disattivare l'alimentazione dello schermo in modalità asincrona. È stata aggiunta supporto per il salvataggio e il ripristino del contesto di rendering per chip Ironlake (gen5) e gen4 (Broadwater — Cantiga), che consente di ripristinare lo stato della GPU dallo spazio utente passando dall'esecuzione di operazioni batch a un'altra;
    • Nel driver Nouveau è stato garantito l'identificazione del chipset NVIDIA Turing TU116;
    • Sono state ampliate le funzionalità del driver DRM/KMS per acceleratori di operazioni grafiche ARM Komeda (Mali D71), aggiunto supporto per scaling, divisione/fusione dei layer, rotazione, scrittura posticipata, AFBC, SMMU e formati di codifica dei colori Y0L2, P010, YUV420_8/10BIT;
    • Nel driver MSM è stato aggiunto il supporto per la serie A540 GPU Adreno, utilizzata nei processori Qualcomm, e il supporto per il controller DSI MSM8998 per Snapdragon 835;
    • Aggiunti driver per pannelli LCD Samsung S6E63M0, Armadeus ST0700, EDT ETM0430G0DH6, OSD101T2045-53TS,
      Evervision VGG804821, FriendlyELEC HD702E, KOE tx14d24vm1bpa, TFC S9700RTWV43TR-01B, EDT ET035012DM6 e VXT VL050-8048NT-C01;
    • Aggiunto un driver per l'attivazione delle funzionalità di accelerazione della decodifica
      video disponibili nel SoC Amlogic Meson;
    • Nel driver v3d (per GPU Broadcom Video Core V, utilizzato in Raspberry Pi) è stata introdotta highlightsFromPoint() la gestione dei calcoli dei shader;
    • Aggiunto driver per tastiere SPI e touchpad utilizzati nei modelli moderni di laptop Apple MacBook e MacBookPro;
    • È stata aggiunta una protezione aggiuntiva delle chiamate ioctl relative al driver floppy, e il driver stesso è stato contrassegnato come abbandonato
      («orphaned»), il che implica la cessazione dei suoi test. Il driver rimane attualmente nel kernel, ma il suo funzionamento corretto non è garantito. Il driver è considerato obsoleto, poiché è difficile trovare hardware funzionante per il suo collaudo: tutti i supporti esterni attuali utilizzano generalmente l'interfaccia USB.
    • Aggiunto driver cpufreq per schede Raspberry Pi, che consente la gestione dinamica della variazione della frequenza della CPU;
    • È stato aggiunto il supporto per i nuovi SoC ARM Mediatek mt8183 (4x Cortex-A73 + 4x Cortex-A53), TI J721E (2x Cortex-A72 + 3x Cortex-R5F + 3 DSP + MMA) e Amlogic G12B (4x Cortex-A73 + 2x Cortex-A53), nonché per le schede:
      • Purism Librem5,
      • Aspeed BMC,
      • Microsoft Olympus BMC,
      • Kontron SMARC,
      • Novtech Meerkat96 (i.MX7),
      • ST Micro Avenger96,
      • Google Cheza (Qualcomm SDM845),
      • Qualcomm Dragonboard 845c (Qualcomm SDM845),
      • Hugsun X99 TV Box (Rockchip RK3399),
      • Khadas Edge/Edge-V/Captain (Rockchip RK3399),
      • HiHope RZ/G2M,
      • NXP LS1021A-TSN.

Allo stesso tempo, il Fondo Latinoamericano per il Software Libero ha creato
una versione kernel completamente libero 5.3Linux-libre 5.3-gnu, ripulito da elementi di firmware e driver contenenti componenti o porzioni di codice non liberi, la cui area di applicazione è limitata dal produttore. Nel nuovo rilascio è stata disabilitata il caricamento dei blob nei driver qcom, hdcp drm, allegro-dvt e meson-vdec.
Aggiornato il codice di pulizia dei blob nei driver e sottosistemi amdgpu, i915, netx, r8169, brcmfmac, rtl8188eu, adreno, si2157, pvrusb2, touchscreen_dmi, driver audio per skylake, e nella documentazione per il microcodice.

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