Rilascio del kernel Linux 5.3

Dopo due mesi di sviluppo Linus Torvalds presentata rilascio del kernel Linux 5.3. Le modifiche degne di nota includono: supporto per GPU AMD Navi, processori Zhaoxi e tecnologia di gestione energetica Intel Speed ​​​​Select, la possibilità di utilizzare istruzioni umwait per attendere senza utilizzare loop,
modalità di 'utilizzazione del blocco' dell'interattività per CPU asimmetriche, chiamata di sistema pidfd_open, possibilità di utilizzare indirizzi IPv4 dalla sottorete 0.0.0.0/8, capacità di accelerazione hardware di nftables, supporto HDR nel sottosistema DRM, integrazione dell'hypervisor ACRN.

В annuncio Con la nuova versione, 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 dovrebbero in alcun modo interrompere le applicazioni esistenti e portare a regressioni a livello di utente. Allo stesso tempo, una violazione del comportamento può causare non solo una modifica dell'ABI, la rimozione di codice obsoleto o la comparsa di errori, ma anche l'impatto indiretto di miglioramenti utili che funzionano correttamente. Come esempio illustrativo, c'era scartato utile ottimizzazione nel codice Ext4, che riduce il numero di accessi al disco disabilitando il precaricamento della tabella degli inode per piccole richieste I/O.

L'ottimizzazione ha fatto sì che, a causa della ridotta attività del disco, l'entropia per il generatore di numeri casuali getrandom() ha iniziato ad accumularsi più lentamente e in alcune configurazioni, in determinate circostanze, potrebbero verificarsi blocchi durante il caricamento fino a quando il pool di entropia non è stato completato. pieno. Dato che l'ottimizzazione è davvero utile, c'è stata una discussione tra gli sviluppatori in cui è stato proposto di risolvere il problema disabilitando il comportamento di blocco predefinito della chiamata getrandom() con l'aggiunta di un flag opzionale per attendere l'entropia, ma tale il cambiamento influenzerebbe la qualità dei numeri casuali nella fase iniziale del caricamento.

La nuova versione ha accettato 15794 correzioni dagli sviluppatori del 1974,
dimensione della patch: 92 MB (le modifiche hanno interessato 13986 file, 258419 righe di codice aggiunte,
599137 righe rimosse). Circa il 39% di tutti quelli presentati in 5.3
le modifiche sono associate ai driver di dispositivo, circa il 12% delle modifiche lo hanno fatto
attitudine all'aggiornamento del codice specifico delle architetture hardware, 11%
relativo allo stack di rete, il 3% ai file system e il 3% all'interno
sottosistemi del kernel.

Il principale innovazioni:

  • Servizi di memoria e di sistema
    • Sviluppo continuo della funzionalità 'pidfd' per aiutare a gestire le situazioni di riutilizzo del PID (pidfd è associato a un particolare processo e non cambia, mentre un PID può essere associato a un altro processo dopo che il processo corrente associato a quel PID termina). In precedenza, il kernel è già stato aggiunto
      la chiamata di sistema pidfd_send_signal() e il flag CLONE_PIDFD nella chiamata clone() per ottenere il pidfd da utilizzare in idfd_send_signal(). Quando si utilizza la chiamata clone() con il flag CLONE_PIDFD, potrebbero verificarsi problemi con i gestori dei servizi o con il sistema per la terminazione forzata dei processi con memoria insufficiente sulla piattaforma Android. In questo caso, per l'avvio viene utilizzata una chiamata fork() o clone() senza CLONE_PIDFD.

      Il kernel 5.3 introduce la chiamata di sistema pidfd_open(), che consente di ottenere un pidfd controllabile per un processo esistente arbitrario non creato tramite una chiamata a clone() con il flag CLONE_PIDFD. Abbiamo anche aggiunto il supporto per il polling di pidfd con poll() ed epoll(), che consente ai gestori dei processi di tenere traccia della terminazione di processi arbitrari senza preoccuparsi di una condizione di competizione se un PID viene assegnato a un nuovo processo. Il meccanismo per notificare l'uscita di un processo associato a pidfd è simile a informare l'uscita del suo processo figlio;

    • Aggiunto il supporto per il meccanismo di blocco del carico nell'utilità di pianificazione (Bloccaggio di utilizzo), che consente di rispettare gli intervalli di frequenza minimi o massimi, a seconda dei task attivi sulla CPU. Il meccanismo presentato accelera le attività che influiscono direttamente sulla qualità dell'interazione dell'utente eseguendo queste attività almeno al limite inferiore della frequenza "richiesta". Le attività a bassa priorità che non influiscono sul lavoro dell'utente vengono avviate utilizzando il limite superiore della frequenza "consentita". I limiti vengono impostati tramite gli attributi sched_uclamp_util_min e sched_uclamp_util_max nella chiamata di sistema sched_setattr().
    • Aggiunto supporto per la tecnologia di gestione dell'energia Selezione velocità Intel, disponibile su alcuni server con processori Intel Xeon. Questa tecnologia consente di impostare le impostazioni delle prestazioni e la larghezza di banda della partizione per diversi core della CPU, il che consente di dare priorità alle prestazioni per le attività eseguite su determinati core, sacrificando le prestazioni su altri core;
    • Processi nello spazio utente fornito da la possibilità di attendere per un breve periodo senza utilizzare cicli utilizzando l'istruzione umwait. Questa istruzione, insieme alle istruzioni umonitor e tpause, sarà offerta nei prossimi chip Intel "Tremont" e consentirà ritardi efficienti dal punto di vista energetico e non influiranno sulle prestazioni di altri thread quando si utilizza Hyper Threading;
    • È stato aggiunto il supporto per pagine di memoria di grandi dimensioni (pagine enormi) per l'architettura RISC-V;
    • Al meccanismo di tracciamento "kprobes" è stata aggiunta la possibilità di dereferenziare i puntatori del kernel allo spazio utente, che può essere utilizzato, ad esempio, per valutare il contenuto delle strutture passate alle chiamate di sistema. Aggiunta inoltre la possibilità di impostare controlli in fase di avvio.
    • L'opzione PREEMPT_RT è stata aggiunta al file di configurazione per il funzionamento in tempo reale. Il codice in tempo reale in sé non è stato ancora aggiunto al kernel, ma la comparsa dell'opzione è un buon segno che la saga a lungo termine di integrazione le patch Realtime-Preempt sono in fase di completamento;
    • La chiamata di sistema clone3() è stata aggiunta con l'implementazione di una versione più estensibile dell'interfaccia clone(), che permette di specificare un numero maggiore di flag;
    • Aggiunto il gestore bpf_send_signal() per consentire ai programmi BPF di inviare segnali a processi arbitrari;
    • Per gli eventi di perf nell'ambiente hypervisor KVM, è stato aggiunto un nuovo meccanismo di filtraggio degli eventi per consentire all'amministratore di determinare i tipi di eventi consentiti o non consentiti per il monitoraggio sul lato ospite;
    • Aggiunta la possibilità di elaborare programmi con cicli al meccanismo di verifica dell'applicazione eBPF se l'esecuzione del ciclo è limitata e non può portare al superamento del limite sul numero massimo di istruzioni;
  • Sottosistema disco, I/O e file system
    • Per il file system XFS è implementata la possibilità di attraversamento degli inode multi-thread (ad esempio durante il controllo delle quote). Aggiunti nuovi ioctl BULKSTAT e INUMBERS, che forniscono l'accesso alle funzionalità introdotte nella quinta edizione del formato FS, come l'ora di nascita dell'inode e la possibilità di impostare i parametri BULKSTAT e INUMBERS per ciascun gruppo AG (Gruppi di allocazione);
    • In Est4 aggiunto supporto vuoti nelle directory (blocchi non collegati).
      Elaborazione fornita flag "i" (immutabile) per file aperti (divieto di scrittura in una situazione se il flag è stato impostato nel momento in cui il file era già aperto);

    • Btrfs fornisce una definizione per una rapida implementazione di crc32c su tutte le architetture;
    • In CIFS, il codice per supportare smbdirect è stato deprecato. SMB3 aggiunge la possibilità di utilizzare algoritmi crittografici in modalità GCM. È stata aggiunta una nuova opzione di montaggio per estrarre i parametri della modalità dagli ACE (Access Control Entry). Prestazioni ottimizzate delle chiamate open();
    • È stata aggiunta un'opzione a F2FS per limitare il Garbage Collector durante l'esecuzione in modalità checkpoint=disable. Aggiunto ioctl per rimuovere gli intervalli di blocchi da F2FS, consentendo il ridimensionamento della partizione al volo. Aggiunta la possibilità di inserire un file di paging in F2FS con I/O diretto. Aggiunto supporto per bloccare un file e allocare blocchi per file simili per tutti gli utenti;
    • Aggiunto il supporto per le operazioni asincrone sendmsg() e recvmsg() all'interfaccia I/O asincrona io_uring;
    • Al file system UBIFS è stato aggiunto il supporto per la compressione utilizzando l'algoritmo zstd e la possibilità di verificare le immagini FS firmate;
    • Il supporto per le etichette di sicurezza SELinux per i file è stato aggiunto a Ceph FS;
    • Per NFSv4 è implementata una nuova opzione di montaggio "nconnect=", che determina il numero di connessioni stabilite con il server. Il traffico tra queste connessioni verrà distribuito utilizzando il bilanciamento del carico. Inoltre, la directory /proc/fs/nfsd/clients viene ora creata dal server NFSv4 con le informazioni sui client attuali, comprese le informazioni sui file che hanno aperto;
  • Virtualizzazione e sicurezza
    • Il kernel include un hypervisor per dispositivi embedded ACRN, che è stato scritto pensando alla disponibilità in tempo reale e all'usabilità mission-critical. ACRN fornisce un sovraccarico minimo, garantisce bassa latenza e reattività adeguata durante l'interazione con le apparecchiature. È supportata la virtualizzazione delle risorse CPU, I/O, sottosistema di rete, operazioni grafiche e audio. ACRN può essere utilizzato per eseguire più macchine virtuali isolate in unità di controllo elettroniche, cruscotti, sistemi informativi automobilistici, dispositivi IoT di consumo e altre apparecchiature integrate;
    • In modalità utente Linux aggiunto una modalità di viaggio nel tempo che consente di rallentare o accelerare il tempo nell'ambiente virtuale UML per facilitare il debug del codice relativo al tempo. Aggiunto anche parametro
      time-travel-start, che consente all'orologio di sistema di avviarsi dall'ora specificata in formato epoca;

    • Aggiunte nuove opzioni della riga di comando del kernel "init_on_alloc" e "init_on_free", che, se specificate, abilitano l'azzeramento delle aree di memoria allocate e liberate (riempiendo con zeri durante malloc e free), che consente di aumentare la sicurezza grazie all'ulteriore sovraccarico di inizializzazione;
    • Aggiunto nuovo driver virtio-iommu con l'implementazione di un dispositivo paravirtualizzato che consente di inviare richieste IOMMU, come ATTACH, DETACH, MAP e UNMAP, tramite il trasporto virtio senza emulare le tabelle delle pagine di memoria;
    • Aggiunto nuovo driver virtio-pmemA che rappresenta l'accesso ai dispositivi di archiviazione mappati allo spazio degli indirizzi fisici, come gli NVDIMM;
    • Implementata la possibilità di allegare chiavi crittografiche a un utente o a uno spazio dei nomi di rete (le chiavi diventano inaccessibili all'esterno dello spazio dei nomi selezionato), nonché di proteggere le chiavi utilizzando gli ACL;
    • Al sottosistema crittografico aggiunto supporto per un algoritmo di hashing non crittografico molto veloce xshash, la cui velocità dipende dalle prestazioni della memoria;
  • Sottosistema di rete
    • Gestione supportata degli indirizzi IPv4 nell'intervallo 0.0.0.0/8, che in precedenza era inutilizzabile. Introduzione di questa sottorete volontà assegnare altri 16 milioni di indirizzi IPv4;
    • In Netfilter per nftables aggiunto supporto per meccanismi di filtraggio dei pacchetti con accelerazione hardware attraverso l'utilizzo di quanto aggiunto ai driver API del blocco del flusso. Intere tabelle di regole con tutte le catene possono essere posizionate sul lato degli adattatori di rete. L'abilitazione viene effettuata associando il flag NFT_TABLE_F_HW alla tabella. Supporta semplici metadati di protocollo di livello 3 e 4, azioni di accettazione/rifiuto, mappature per IP di origine/destinazione e porte di rete e tipo di protocollo;
    • Aggiunto da supporto integrato per il tracciamento della connessione per i bridge di rete, che non richiede l'uso del livello di emulazione br_netfilter;
    • In nf_tables aggiunto supporto per il modulo SYNPROXY, che ripete funzionalità simili da iptables, nonché la possibilità di verificare le regole per le singole opzioni nell'intestazione IPv4;
    • Aggiunta la possibilità di allegare programmi BPF alle chiamate di sistema setsockopt() e getsockopt(), che, ad esempio, consente di allegare gestori di accesso personalizzati a queste chiamate. Inoltre è stato aggiunto un nuovo punto di chiamata (hook), con l'aiuto del quale è possibile organizzare una chiamata al programma BPF una volta per ogni intervallo RTT (andata e ritorno, tempo di ping);
    • Per IPv4 e IPv6 aggiunto un nuovo meccanismo per la memorizzazione dei dati di routing nexthop, volto ad aumentare la scalabilità delle tabelle di routing. Dai test effettuati è emerso che utilizzando il nuovo sistema è stato caricato nel kernel un insieme di 743mila percorsi in soli 4.3 secondi;
    • Per Bluetooth implementato funzionalità richiesta per supportare il ping LE;
  • Attrezzatura
    • Aggiunto da supporto per processori aziendali compatibili con x86 Zaoxinsviluppato come risultato di un progetto congiunto tra VIA Technologies e la municipalità di Shanghai. La famiglia di CPU ZX si basa sull'architettura x86-64 Isaiah, continuando lo sviluppo della tecnologia VIA Centauro;
    • Il sottosistema DRM (Direct Rendering Manager), così come i driver grafici amdgpu e i915, hanno aggiunto il supporto per l'analisi, l'elaborazione e l'invio di metadati HDR (alta gamma dinamica) tramite la porta HDMI, consentendo l'uso di pannelli e schermi HDR in grado di visualizzare gamme aggiuntive di luminosità;
    • Il driver Amdgpu aggiunge il supporto iniziale per la GPU AMD NAVI (RX5700), che include driver principale, codice di interazione dello schermo (DCN2), GFX e supporto di elaborazione (GFX10),
      SDMA 5 (Sistema DMA0), gestione energetica e codificatori/decodificatori multimediali (VCN2). amdgpu migliora anche il supporto per le schede GPU basate su Vega12 e Vega20 con più opzioni di memoria e gestione energetica;

    • Il driver Amdkfd (per GPU discrete come Fiji, Tonga, Polaris) ha aggiunto il supporto per le schede basate su GPU VegaM;
    • Nel driver DRM per le schede video Intel per i chip Icelake implementato nuova modalità di correzione gamma multisegmento. Aggiunta la possibilità di eseguire l'output tramite DisplayPort nel formato YCbCr4:2:0. Aggiunto nuovo firmware GuC per SKL, BXT, KBL, GLK e ICL. Implementata la possibilità di spegnere lo schermo in modalità asincrona. Aggiunto da supporto per il salvataggio e il ripristino del contesto di rendering per i chip Ironlake (gen5) e gen4 (Broadwater - Cantiga), che consente di ripristinare lo stato della GPU dallo spazio utente quando si passa da un'operazione batch a un'altra;
    • Il driver Nouveau fornisce il rilevamento del chipset NVIDIA Turing TU116;
    • Funzionalità estese del driver DRM/KMS per gli acceleratori delle operazioni su schermo ARM Komeda (Mali D71), aggiunto supporto per ridimensionamento, divisione/unione di livelli, rotazione, scrittura pigra, formati di codifica colore AFBC, SMMU e Y0L2, P010, YUV420_8/10BIT;
    • Aggiunto il supporto per la serie GPU Adreno A540 di Qualcomm al driver MSM, nonché 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 driver per abilitare gli strumenti di accelerazione della decodifica
      video disponibili nel SoC Amlogic Meson;

    • Introduzione del driver v3d (per la GPU Broadcom Video Core V utilizzata nel Raspberry Pi). sostegno invio di shader di calcolo;
    • Aggiunto driver per tastiere e trackpad SPI utilizzati nei moderni modelli di laptop Apple MacBook e MacBook Pro;
    • Aggiunto da protezione aggiuntiva per le chiamate ioctl associate al driver del floppy e il driver stesso viene contrassegnato come non mantenuto
      ("orfano"), il che implica la cessazione dei suoi test. Il driver è ancora memorizzato nel kernel, ma il suo corretto funzionamento non è garantito. Il driver è considerato obsoleto perché è difficile trovare hardware funzionante per testarlo: tutte le attuali unità esterne, di norma, utilizzano l'interfaccia USB.

    • Aggiunto driver cpufreq per schede Raspberry Pi, che consente di controllare dinamicamente la variazione della frequenza del processore;
    • Aggiunto supporto per il nuovo 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é le schede:
      • Purismo libero5,
      • velocità BMC,
      • Microsoft Olympus BMC,
      • Kontron SMARC,
      • Novtech Meerkat96 (i.MX7),
      • ST Micro Avenger96,
      • Google Cheza (Qualcomm SDM845),
      • Qualcomm Dragonboard 845c (Qualcomm SDM845),
      • Scatola TV Hugsun X99 (Rockchip RK3399),
      • Khadas Edge/Edge-V/Capitano (Rockchip RK3399),
      • Ciao Spero RZ/G2M,
      • NXP LS1021A-TSN.

Allo stesso tempo, la Free Software Foundation America Latina formato
вариант kernel 5.3 completamente gratuito - linux-libre 5.3-gnu, ripulito da elementi firmware e driver contenenti componenti non liberi o sezioni di codice, la cui portata è limitata dal produttore. La nuova versione disabilita il caricamento dei blob nei driver qcom, hdcp drm, allegro-dvt e meson-vdec.
Codice di pulizia blob aggiornato nei driver e nei sottosistemi amdgpu, i915, netx, r8169, brcmfmac, rtl8188eu, adreno, si2157, pvrusb2, touchscreen_dmi, driver audio skylake e documentazione del microcodice.

Fonte: opennet.ru

Aggiungi un commento