Rilascio del kernel Linux 5.3

Dopo due mesi di sviluppo, Linus Torvalds ha presentato ha rilasciato il kernel Linux 5.3. Tra le modifiche più significative: supporto per GPU AMD Navi, processori Zhaoxi e tecnologia di gestione energetica Intel Speed Select, possibilità di utilizzare le istruzioni umwait per attendere senza utilizzare cicli,
modalità ‘utilization clamping’ per CPU asimmetriche, syscall pidfd_open, possibilità di utilizzare indirizzi IPv4 dalla sottorete 0.0.0.0/8, accelerazione hardware per nftables, supporto HDR nel sotto-sistema DRM, integrazione dell'hypervisor ACRN.

In un annuncio linus ha ricordato a tutti gli sviluppatori la regola fondamentale dello sviluppo del kernel: mantenere invariato il comportamento per i componenti dello spazio utente. Le modifiche al kernel non devono in alcun modo interferire con le applicazioni già funzionanti e causare regressioni a livello utente. Tuttavia, la violazione del comportamento può essere causata non solo da modifiche all'ABI, dalla rimozione di codice obsoleto o dall'emergere di bug, ma anche dall'impatto indiretto di miglioramenti utili che funzionano correttamente. Come esempio pratico è stata scartata un'utile ottimizzazione nel codice Ext4, riducendo il numero di accessi all'unità disabilitando la lettura anticipata della tabella degli inode per piccole operazioni di input/output.

L'ottimizzazione ha portato a una diminuzione dell'attività del disco, con conseguente accumulo più lento di entropia per il generatore di numeri casuali getrandom(), che in alcune configurazioni, in determinate circostanze, ha causato blocchi durante il caricamento fino a quando il pool di entropia non era pieno. Poiché l'ottimizzazione è davvero utile, è emersa una discussione tra gli sviluppatori su come risolvere il problema disabilitando per impostazione predefinita la modalità bloccante della chiamata getrandom(), aggiungendo un flag opzionale per attendere l'entropia; tuttavia, tale modifica influirebbe sulla qualità dei numeri casuali nelle fasi iniziali del caricamento.

Nella nuova versione sono stati inclusi 15794 correttivi da 1974 sviluppatori,
la dimensione della patch è di 92 MB (sono state interessate 13986 file, sono state aggiunte 258419 righe di codice,
sono state rimosse 599137 righe). Circa il 39% di tutte le modifiche presentate in 5.3
sono relative ai driver di dispositivo, circa il 12% delle modifiche hanno
atteggiamento verso l'aggiornamento del codice specifico per architetture hardware, 11%
relativo allo stack di rete, 3% — ai file system e 3% ai sottosistemi interni
del kernel.

Principali novità:

  • Memoria e servizi di sistema
    • È proseguito lo sviluppo della funzionalità 'pidfd', utile nella gestione di situazioni di riutilizzo del PID (pidfd è associato a un processo specifico e non cambia, mentre il PID può essere collegato a un altro processo dopo la terminazione dell'attuale processo associato a questo PID). In precedenza, nel kernel era già stato aggiunto
      la chiamata di sistema pidfd_send_signal() e il flag CLONE_PIDFD nella chiamata clone(), che permette di ottenere il pidfd per l'uso in pidfd_send_signal(). Utilizzando la chiamata clone() con il flag CLONE_PIDFD si potrebbero verificare problemi con i gestori di servizi o con il sistema di terminazione forzata dei processi in caso di esaurimento della memoria sulla piattaforma Android. In questo caso, si utilizza 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 verificabile per qualsiasi processo esistente, creato non tramite una chiamata a clone() con l'indicatore CLONE_PIDFD. È stata anche aggiunta la supporto al polling di pidfd tramite poll() ed epoll(), permettendo ai gestori di processi di monitorare le terminazioni di processi arbitrari senza preoccuparsi dello stato di competizione in caso di assegnazione di un PID a un nuovo processo. Il meccanismo di notifica della terminazione di un processo associato a pidfd è simile alla notifica della terminazione del proprio processo figlio;

    • È stata aggiunta al pianificatore delle attività la supporto per il meccanismo di limitazione del carico (Limitazione dell'utilizzo), позволяющего придерживаться минимального или максимального диапазонов частот, в зависимости от активных на CPU задач. Представленный механизм ускоряет задачи, которые напрямую влияют на качество взаимодействия с пользователем, через запуск этих задач как минимум в нижней границе «запрошенной» частоты. Низкоприоритетные задачи, не сказывающиеся на работе пользователя, запускаются c использованием верхнего лимита «разрешённой» частоты. Лимиты задаются через атрибуты sched_uclamp_util_min и sched_uclamp_util_max в системном вызове sched_setattr().
    • Добавлена поддержка технологии управления энергопотреблением Intel Speed Select, доступной на некоторых серверах с процессорами Intel Xeon. Указанная технология позволяет устанавливать настройки производительности и пропускной способности разделов для разных ядер CPU, что позволяет сделать более приоритетной производительность для задач, выполняемых на определённых ядрах, жертвуя производительностью на других ядрах;
    • Процессам в пространстве пользователя hanno ricevuto la possibilità di attendere per un breve periodo senza l'uso di cicli tramite l'istruzione umwait. Questa istruzione, insieme alle istruzioni umonitor e tpause, sarà proposta nei chip Intel "Tremont" in fase di uscita e consentirà di implementare ritardi energeticamente efficienti senza influire sulle prestazioni di altri thread durante l'uso di 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 utilizzato, ad esempio, per valutare il contenuto delle strutture passate nelle chiamate di sistema. È stata anche aggiunta la possibilità di impostare controlli all'avvio.
    • Nel file di configurazione è stata aggiunta l'opzione PREEMPT_RT per funzionare in modalità tempo reale. Il codice per supportare la modalità tempo reale non è ancora stato aggiunto al kernel, ma l'introduzione dell'opzione è un buon segno che l'epopea pluriennale per integrazione i patch Realtime-Preempt sta per concludersi;
    • È stata aggiunta la chiamata di sistema clone3() con un'interfaccia più estensibile per clone(), 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 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 nel sistema guest;
    • Nel meccanismo di verifica delle applicazioni eBPF è stata aggiunta la possibilità di gestire programmi con cicli, purché l'esecuzione del ciclo sia limitata e non possa portare al superamento del limite sul numero massimo di istruzioni;
  • Sottosistema disco, I/O e file system
    • Per il file system XFS è stata implementata la possibilità di attraversare inode in modo multithread (ad esempio, durante il controllo delle quote). Sono stati aggiunti i 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 ciascun gruppo AG (Allocation Groups);
    • In Ext4 è stato aggiunto il supporto per gli spazi vuoti nelle directory (blocchi non allocati).
      È stata garantita la gestione flag "i" (immutabile) per file aperti (divieto di scrittura in situazioni in cui il flag è stato impostato al momento in cui il file era già aperto);
    • In Btrfs è stata prevista l'implementazione rapida di crc32c su tutte le architetture;
    • In CIFS, il codice per il supporto di smbdirect ha rimosso la designazione 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à dalle voci ACE (Access Control Entry). Le prestazioni della chiamata open() sono state ottimizzate;
    • In F2FS, è stata aggiunta un'opzione per limitare il raccoglitore di spazzatura quando si utilizza la modalità checkpoint=disable. È stato aggiunto ioctl per rimuovere intervalli di blocchi da F2FS, consentendo di modificare le dimensioni della partizione al volo. È stata aggiunta la possibilità di posizionare un file di swap in F2FS garantendo input/output diretto. Per tutti gli utenti è stato aggiunto il supporto per il bloccaggio dei file e l'allocazione di blocchi per tali file;
    • Nell'interfaccia per input/output asincrono io_uring è stato aggiunto il supporto per le operazioni asincrone sendmsg() e recvmsg();
    • Nel file system UBIFS è stata aggiunta la supporto per la compressione utilizzando l'algoritmo zstd e la possibilità di verificare le immagini del filesystem firmate;
    • Nel filesystem 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 definisce il numero di connessioni stabilite con il server. Il traffico tra queste connessioni verrà distribuito utilizzando il bilanciamento del carico. Inoltre, il server NFSv4 ora crea una directory /proc/fs/nfsd/clients con informazioni sui client attuali, inclusi i dettagli sui file da loro aperti;
  • Virtualizzazione e sicurezza
    • Il kernel include un hypervisor per dispositivi embedded ACRN, scritto tenendo conto della disponibilità per l'esecuzione di compiti in tempo reale e la sua idoneità all'uso in sistemi critici. ACRN garantisce un'overhead minima, assicura latenze basse e una reattività adeguata nell'interazione con l'hardware. Supporta la virtualizzazione delle risorse CPU, delle I/O, delle sottosistemi di rete, oltre a operazioni con grafica e suono. ACRN può essere impiegato per avviare più macchine virtuali isolate in moduli di controllo elettronico, cruscotti, sistemi informativi automobilistici, dispositivi IoT consumer e altri dispositivi embedded;
    • In User-mode Linux è stato aggiunto la modalità 'viaggio nel tempo', che consente di rallentare o accelerare il tempo nell'ambiente virtuale UML per facilitare il debug di codice correlato al tempo. È stato inoltre aggiunto il parametro
      time-travel-start, che permette di avviare gli orologi di sistema da un momento specifico in formato epoch;
    • Sono state aggiunte nuove opzioni della riga di comando del kernel "init_on_alloc" e "init_on_free", che abilitano l'azzeramento delle aree di memoria allocate e liberate (riempimento di zeri durante malloc e free), migliorando la sicurezza grazie a un sovraccarico aggiuntivo per l'inizializzazione;
    • Aggiunto un nuovo driver virtio-iommu , con implementazione di un dispositivo paravirtualizzato che consente l'invio di richieste IOMMU, come ATTACH, DETACH, MAP e UNMAP, su un trasporto virtio senza emulazione delle tabelle delle pagine della memoria;
    • Aggiunto un nuovo driver virtio-pmem, che rappresenta l'accesso ai dispositivi di archiviazione riflessi nello spazio degli indirizzi fisici, come NVDIMM;
    • È stata implementata la possibilità di collegare chiavi crittografiche a uno spazio dei nomi utente o di rete (le chiavi diventano non disponibili al di fuori dello spazio dei nomi selezionato), oltre alla protezione delle chiavi tramite ACL;
    • Nella sottosistema crittografico aggiunta supporto per un algoritmo di hashing non crittografico molto veloce xxhash, la cui velocità è limitata dalle prestazioni della memoria;
  • Sottosistema di rete
    • È garantita l'elaborazione degli indirizzi IPv4 nell'intervallo 0.0.0.0/8, precedentemente non utilizzabile. L'introduzione di questa subnet permetterà di distribuire ulteriori 16 milioni di indirizzi IPv4;
    • In Netfilter per nftables aggiunta è supportata la meccanizzazione dell'accelerazione hardware per il filtraggio dei pacchetti tramite l'integrazione nei driver Flow Block API. Interi set di regole con tutte le catene possono essere scaricati sui lati degli adattatori di rete. L'attivazione avviene associando il flag NFT_TABLE_F_HW alla tabella. Sono supportati metadati semplici per i protocolli di livello 3 e 4, con azioni di accettare/scartare, corrispondenze per IP e porte di rete del mittente/ricevente e tipo di protocollo;
    • Aggiunto supporto integrato per il tracciamento delle connessioni per ponti di rete, senza necessità di uno strato di emulazione br_netfilter;
    • In nf_tables aggiunta è supportato il modulo SYNPROXY, che replica funzionalità simili a quelle di iptables, ed è stata implementata la possibilità di verifiche nelle regole in base a singole opzioni nell'intestazione IPv4;
    • È stata aggiunta la possibilità di allegare programmi BPF alle chiamate di sistema setsockopt() e getsockopt(), consentendo ad esempio di collegare i propri gestori di accesso a queste chiamate. Inoltre, è stato aggiunto un nuovo punto di hook, grazie al quale è possibile eseguire un programma BPF una volta per ogni intervallo di RTT (round-trip-time, tempo di ping);
    • per IPv4 e IPv6 è stato aggiunto un nuovo meccanismo di archiviazione dei dati di routing nexthop, mirato a migliorare la scalabilità delle tabelle di routing. I test condotti hanno dimostrato che con il nuovo sistema un set di 743 mila rotte è stato caricato nel kernel in appena 4,3 secondi;
    • Per Bluetooth è stata realizzata funzionalità necessaria per supportare il LE ping;
  • Attrezzature
    • Aggiunto 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 lo sviluppo delle tecnologie VIA Centaur;
    • Nel sottosistema DRM (Direct Rendering Manager), così come nei driver grafici amdgpu e i915, è stata aggiunta la supporto per l'analisi, l'elaborazione e l'invio di metadati HDR (High Dynamic Range) tramite la porta HDMI, consentendo l'uso di pannelli e schermi HDR capaci di visualizzare ulteriori range di luminosità;
    • Nel driver amdgpu è stata introdotta la supporto iniziale per le GPU AMD NAVI (RX5700), che include il driver di base, il codice per l'interazione con gli schermi (DCN2), la supporto per GFX e calcoli (GFX10),
      SDMA 5 (System DMA0), controlli di potenza e codificatori/decodificatori multimediali (VCN2). Nel amdgpu è stata anche migliorata la supporto per le schede basate su GPU Vega12 e Vega20, per le quali sono state aggiunte ulteriori funzionalità di gestione della memoria e del consumo energetico;
    • Nel driver amdkfd (per GPU discrete, come Fiji, Tonga, Polaris) è stata aggiunta la supporto per le schede basate su GPU VegaM;
    • Nel driver DRM per le schede grafiche Intel per chip Icelake implementato è stata introdotta una nuova modalità multi-segmento di correzione gamma. È stata 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 disabilitare l'alimentazione dello schermo in modalità asincrona. Aggiunto supporto per il salvataggio e il ripristino del contesto di rendering per i chip Ironlake (gen5) e gen4 (Broadwater — Cantiga), che consente di recuperare lo stato della GPU dallo spazio utente durante il passaggio dall'esecuzione di una serie di operazioni batch a un'altra;
    • Il driver Nouveau ora supporta il riconoscimento del chipset NVIDIA Turing TU116;
    • Ampliate le funzionalità del driver DRM/KMS per acceleratori di operazioni di schermata ARM Komeda (Mali D71), aggiunta la supporto per il ridimensionamento, la separazione/fusione dei livelli, la rotazione, la registrazione differita, AFBC, SMMU e formati di codifica colore Y0L2, P010, YUV420_8/10BIT;
    • Nel driver MSM è stata aggiunta la supporto della serie A540 GPU Adreno, utilizzata nei processori Qualcomm, e la supporto del controller DSI MSM8998 per Snapdragon 835;
    • Aggiunti driver per i 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 l'attivazione dei mezzi di accelerazione per la decodifica
      video disponibili nel SoC Amlogic Meson;
    • Nel driver v3d (per GPU Broadcom Video Core V, utilizzato in Raspberry Pi) è stata introdotta supporto la gestione dei calcolatori shader;
    • Aggiunto driver per tastiere SPI e touchpad utilizzati nei moderni modelli di laptop Apple MacBook e MacBook Pro;
    • Aggiunto protezione aggiuntiva per le chiamate ioctl legate al driver floppy, e il driver stesso è contrassegnato come abbandonato
      («orphaned»), il che implica la cessazione dei suoi test. Il driver rimane nel kernel, ma il suo funzionamento corretto non è garantito. Il driver è considerato obsoleto, poiché è difficile trovare hardware funzionante per i suoi test: tutti gli attuali dischi esterni utilizzano generalmente l'interfaccia USB.
    • Aggiunto driver cpufreq per schede Raspberry Pi, che consente di gestire dinamicamente la variazione della frequenza della CPU;
    • Aggiunta del supporto per i nuovi ARM SoC Mediatek mt8183 (4x Cortex-A73 + 4x Cortex-A53), TI J721E (2x Cortex-A72 + 3x Cortex-R5F + 3 DSPs + MMA) e Amlogic G12B (4x Cortex-A73 + 2x Cortex-A53), oltre a 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.

Contemporaneamente, il Fondo latinoamericano per il software libero ha formato
una variante del kernel completamente libero 5.3Linux-libre 5.3-gnu, ripulito da elementi di firmware e driver contenenti componenti o sezioni di codice non liberi, il cui ambito di applicazione è limitato dal produttore. La nuova versione disabilita il caricamento di blob nei driver qcom, hdcp drm, allegro-dvt e meson-vdec.
Il codice per la pulizia dei blob è stato aggiornato nei driver e nei sottosistemi amdgpu, i915, netx, r8169, brcmfmac, rtl8188eu, adreno, si2157, pvrusb2, touchscreen_dmi, nel 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