Rilascio del kernel Linux 5.9

Dopo due mesi di sviluppo Linus Torvalds presentata rilascio del kernel Linux 5.9. Tra le modifiche più notevoli: limitazione dell'importazione di simboli da moduli proprietari a moduli GPL, accelerazione delle operazioni di cambio di contesto utilizzando l'istruzione del processore FSGSBASE, supporto per la compressione dell'immagine del kernel utilizzando Zstd, rielaborazione della prioritizzazione dei thread nel kernel, supporto per il PRP (Parallel Redundancy Protocol), pianificazione in base alla larghezza di banda nello scheduler delle scadenze, imballaggio preventivo delle pagine di memoria, flag di capacità CAP_CHECKPOINT_RESTOR, chiamata di sistema close_range(), miglioramenti delle prestazioni di dm-crypt, rimozione del codice per guest Xen PV a 32 bit, nuova memoria stable meccanismo di gestione, opzione “salvataggio” in Btrfs, supporto per la crittografia in linea in ext4 e F2FS.

La nuova versione include 16074 correzioni degli sviluppatori del 2011,
dimensione della patch: 62 MB (le modifiche hanno interessato 14548 file, sono state aggiunte 782155 righe di codice, 314792 righe sono state eliminate). Circa il 45% di tutti quelli presentati in 5.9
le modifiche sono associate ai driver di dispositivo, circa il 15% delle modifiche lo hanno fatto
attitudine all'aggiornamento del codice specifico delle architetture hardware, 13%
relativo allo stack di rete, il 3% ai file system e il 3% a quelli interni
sottosistemi del kernel.

Il principale innovazioni:

  • Servizi di memoria e di sistema
    • Stretto protezione contro l'uso di livelli GPL per collegare driver proprietari con componenti del kernel esportati solo per moduli sotto licenza GPL. Il flag TAINT_PROPRIETARY_MODULE è ora ereditato in tutti i moduli che importano simboli da moduli con questo flag. Se un modulo GPL tenta di importare simboli da un modulo non GPL, quel modulo GPL erediterà l'etichetta TAINT_PROPRIETARY_MODULE e non sarà in grado di accedere ai componenti del kernel disponibili solo per i moduli con licenza GPL, anche se il modulo ha precedentemente importato simboli da la categoria "gplonly". Il blocco inverso (esportazione solo EXPORT_SYMBOL_GPL nei moduli che hanno importato EXPORT_SYMBOL_GPL), che potrebbe interrompere il lavoro dei driver proprietari, non è implementato (viene ereditato solo il flag del modulo proprietario, ma non i collegamenti GPL).
    • Aggiunto da supporto del motore kcompactd per pagine di memoria preconfezionate in background per aumentare il numero di pagine di memoria di grandi dimensioni disponibili per il kernel. Secondo stime preliminari, il packaging in background, a costo di un sovraccarico minimo, può ridurre i ritardi nell'allocazione di pagine di memoria di grandi dimensioni (huge-page) di 70-80 volte rispetto al meccanismo di packaging precedentemente utilizzato, lanciato quando se ne presenta la necessità (on-demand ). Per impostare i limiti della frammentazione esterna fornita da kcompactd, è stato aggiunto sysctl vm.compaction_proactiveness.
    • Aggiunto da supporto per la compressione dell'immagine del kernel utilizzando l'algoritmo ZStandard (zstd).
    • Il supporto per le istruzioni del processore è stato implementato per i sistemi x86 FSGSBASE, che consente di leggere e modificare il contenuto dei registri FS/GS dallo spazio utente. Nel kernel, FSGSBASE viene utilizzato per velocizzare le operazioni di cambio di contesto eliminando operazioni di scrittura MSR non necessarie per GSBASE e nello spazio utente evita chiamate di sistema non necessarie per modificare FS/GS.
    • Aggiunto il parametro “allow_writes” consente di vietare modifiche ai registri MSR del processore dallo spazio utente e limitare l’accesso al contenuto di questi registri per operazioni di lettura, poiché la modifica dell’MSR può portare a problemi. Per impostazione predefinita, la scrittura non è ancora disabilitata e le modifiche all'MSR si riflettono nel registro, ma in futuro si prevede di modificare l'accesso predefinito in modalità di sola lettura.
    • All'interfaccia I/O asincrona io_uring Aggiunto supporto completo per operazioni di lettura bufferizzate asincrone che non richiedono thread del kernel. Il supporto per la registrazione è previsto in una versione futura.
    • Nella scadenza dello scheduler I/O implementato pianificazione in base alla capacità, permettendo prendere decisioni corrette su sistemi asimmetrici come i sistemi basati su ARM DynamIQ e big.LITTLE, che combinano core CPU potenti e meno efficienti dal punto di vista energetico in un unico chip. In particolare, la nuova modalità consente di evitare disallineamenti di pianificazione quando un core lento della CPU non dispone delle risorse adeguate per completare un'attività in tempo.
    • Il modello di consumo energetico nel kernel (quadro del modello energetico) è ora descrive la non solo il comportamento del consumo energetico della CPU, ma copre anche i dispositivi periferici.
    • La chiamata di sistema close_range() è stata implementata per consentire a un processo di chiudere contemporaneamente un intero intervallo di descrittori di file aperti.
    • Dall'implementazione della console di testo e del driver fbcon codice rimosso, che offre la possibilità di scorrere indietro il testo a livello di codice (CONFIG_VGACON_SOFT_SCROLLBACK) per una quantità maggiore della memoria video in modalità testo VGA.
    • Ridisegnato algoritmo per assegnare priorità ai thread all'interno del kernel. La nuova opzione fornisce una migliore coerenza tra tutti i sottosistemi del kernel durante l'assegnazione delle priorità alle attività in tempo reale.
    • Aggiunto sysctl sched_uclamp_util_min_rt_default per controllare le impostazioni di potenziamento della CPU per le attività in tempo reale (ad esempio, puoi modificare al volo il comportamento delle attività in tempo reale per risparmiare energia dopo il passaggio all'alimentazione a batteria o su sistemi mobili).
    • Sono stati effettuati i preparativi per implementare il supporto per la tecnologia Transparent Huge Pages nella cache delle pagine.
    • Il motore fanotify implementa i nuovi flag FAN_REPORT_NAME e FAN_REPORT_DIR_FID per segnalare il nome principale e le informazioni FID univoche quando si verificano eventi di creazione, eliminazione o spostamento per elementi di directory e oggetti non di directory.
    • Per i cgroup implementato un nuovo controller di memoria lastra, che è degno di nota per aver spostato la contabilità della lastra dal livello della pagina di memoria al livello dell'oggetto del kernel, che rende possibile condividere le pagine lastra in diversi cgroup, invece di allocare cache lastra separate per ciascun cgroup. L'approccio proposto consente di aumentare l'efficienza dell'utilizzo della lastra, ridurre la dimensione della memoria utilizzata per la lastra del 30-45%, ridurre significativamente il consumo complessivo di memoria del kernel e ridurre la frammentazione della memoria.
    • Nel sottosistema audio ALSA и Pila USB, secondo recentemente adottato raccomandazioni sull’uso di una terminologia inclusiva nel kernel Linux; i termini politicamente scorretti sono stati ripuliti. Nel codice sono state cancellate le parole "slave", "master", "blacklist" e "whitelist".
  • Virtualizzazione e sicurezza
    • Quando si compila il kernel utilizzando il compilatore Clang apparso la possibilità di configurare (CONFIG_INIT_STACK_ALL_ZERO) l'inizializzazione automatica a zero di tutte le variabili memorizzate nello stack (durante la compilazione, specificare "-ftrivial-auto-var-init=zero").
    • Nel sottosistema seccomp, quando si utilizza la modalità di controllo del processo nello spazio utente, aggiunto opportunità sostituzione dei descrittori di file nel processo monitorato per emulare completamente le chiamate di sistema che portano alla creazione di descrittori di file. La funzionalità è richiesta nei sistemi container isolati e nelle implementazioni sandbox per Chrome.
    • Per le architetture xtensa e csky è stato aggiunto il supporto per limitare le chiamate di sistema utilizzando il sottosistema seccomp. Per xtensa viene inoltre implementato il supporto per il meccanismo di audit.
    • Aggiunto nuovo flag di funzionalità CAP_CHECKPOINT_RESTORE, che consente di fornire l'accesso alle funzionalità relative al congelamento e al ripristino dello stato dei processi senza trasferire privilegi aggiuntivi.
    • GCC 11 fornisce tutte le funzionalità di cui hai bisogno
      strumento di debug KCSAN (Kernel Concurrency Sanitizer), progettato per rilevare dinamicamente le condizioni di competizione all'interno del kernel. Pertanto, KCSAN può ora essere utilizzato con i kernel integrati in GCC.

    • Per AMD Zen e modelli di CPU più recenti aggiunto supporto per la tecnologia P2PDMA, che consente di utilizzare DMA per il trasferimento diretto dei dati tra la memoria di due dispositivi collegati al bus PCI.
    • È stata aggiunta una modalità a dm-crypt che consente di ridurre la latenza eseguendo l'elaborazione dei dati crittografici senza utilizzare code di lavoro. Questa modalità è necessaria anche per il corretto funzionamento di suddiviso in zone dispositivi a blocchi (dispositivi con aree che devono essere scritte in sequenza, aggiornando l'intero gruppo di blocchi). È stato fatto del lavoro per aumentare il throughput e ridurre la latenza in dm-crypt.
    • Rimosso il codice per supportare guest a 32 bit in esecuzione in modalità paravirtualizzazione che eseguono l'hypervisor Xen. Gli utenti di tali sistemi dovrebbero passare all'utilizzo di kernel a 64 bit in ambienti guest o utilizzare modalità di virtualizzazione completa (HVM) o combinata (PVH) invece della paravirtualizzazione (PV) per eseguire gli ambienti.
  • Sottosistema disco, I/O e file system
    • Sul file system Btrfs implementato un'opzione di montaggio di "salvataggio" che unifica l'accesso a tutte le altre opzioni di ripristino. Il supporto per le opzioni "alloc_start" e "subvolrootid" è stato rimosso e l'opzione "inode_cache" è stata deprecata. Sono state apportate ottimizzazioni alle prestazioni, in particolare accelerando notevolmente l'esecuzione delle operazioni fsync(). Aggiunto da la possibilità di utilizzare tipi alternativi di checksum diversi da CRC32c.
    • Aggiunto da la possibilità di utilizzare la crittografia in linea (Inline Encryption) nei file system ext4 e F2FS, per abilitare la quale viene fornita l'opzione di montaggio "inlinecrypt". La modalità di crittografia in linea consente di utilizzare i meccanismi di crittografia integrati nel controller dell'unità, che crittografa e decrittografa in modo trasparente input/output.
    • Nell'XFS assicurato ripristino (flush) dell'inode in una modalità completamente asincrona che non blocca i processi durante l'esecuzione di un'operazione di pulizia della memoria. È stato risolto un problema di quota di vecchia data che causava il rilevamento errato degli avvisi relativi ai limiti flessibili e ai limiti degli inode. Implementazione unificata del supporto DAX per ext4 e xfs.
    • In Est4 implementato precaricare le bitmap di allocazione dei blocchi. Combinata alla limitazione della scansione dei gruppi non inizializzati, l'ottimizzazione ha ridotto il tempo necessario per montare partizioni molto grandi.
    • In F2FS aggiunto ioctl F2FS_IOC_SEC_TRIM_FILE, che consente di utilizzare i comandi TRIM/discard per ripristinare fisicamente i dati specificati in un file, ad esempio, per eliminare le chiavi di accesso senza lasciare dati residui sull'unità.
      Anche in F2FS aggiunto nuova modalità di garbage collection GC_URGENT_LOW, che funziona in modo più aggressivo eliminando alcuni controlli per essere nello stato inattivo prima di avviare il garbage collector.

    • In bcache, bucket_size per le estensioni è stato aumentato da 16 a 32 bit in preparazione all'abilitazione delle cache dei dispositivi a zone.
    • Al sottosistema SCSI è stata aggiunta la possibilità di utilizzare la crittografia in linea basata sulla crittografia hardware integrata fornita dai controller UFS (Universal Flash Storage).
    • È stato aggiunto un nuovo parametro della riga di comando del kernel “debugfs”, che consente di controllare la disponibilità dello pseudo-FS con lo stesso nome.
    • Il client NFSv4.2 fornisce il supporto per gli attributi di file estesi (xattr).
    • In dm-polvere aggiunto interfaccia per visualizzare immediatamente un elenco di tutti i blocchi danneggiati identificati sul disco (“messaggio dmsetupdust1 0 listbadblocks”).
    • Per md/raid5, è stato aggiunto il parametro /sys/block/md1/md/stripe_size per configurare la dimensione del blocco STRIPE.
    • Per dispositivi di archiviazione NVMe aggiunto supporto per i comandi di zonizzazione dell'unità (ZNS, NVM Express Zoned Namespace), che consente di dividere lo spazio di archiviazione in zone che compongono gruppi di blocchi per un controllo più completo sul posizionamento dei dati sull'unità.
  • Sottosistema di rete
    • In Netfilter aggiunto la possibilità di rifiutare i pacchetti nella fase precedente al controllo dell'instradamento (l'espressione REJECT può ora essere utilizzata non solo nelle catene INPUT, FORWARD e OUTPUT, ma anche nella fase PREROUTING per icmp e tcp).
    • In nftables aggiunto la capacità di controllare gli eventi relativi alle modifiche della configurazione.
    • In nftables nell'API netlink aggiunto supporto per catene anonime, il cui nome è assegnato dinamicamente dal kernel. Quando elimini una regola associata ad una catena anonima, la catena stessa viene automaticamente eliminata.
    • BPF aggiunge il supporto per gli iteratori per attraversare, filtrare e modificare elementi di array associativi (mappe) senza copiare i dati nello spazio utente. Gli iteratori possono essere utilizzati per socket TCP e UDP, consentendo ai programmi BPF di scorrere elenchi di socket aperti ed estrarre da essi le informazioni di cui hanno bisogno.
    • Aggiunto un nuovo tipo di programma BPF BPF_PROG_TYPE_SK_LOOKUP, che viene avviato quando il kernel cerca un socket di ascolto adatto per una connessione in entrata. Usando un programma BPF come questo, puoi creare gestori che prendono decisioni su a quale socket associare una connessione, senza essere vincolato dalla chiamata di sistema bind(). Ad esempio, puoi associare un singolo socket a un intervallo di indirizzi o porte. Inoltre, è stato aggiunto il supporto per il flag SO_KEEPALIVE a bpf_setsockopt() ed è stata implementata la possibilità di installare gestori BPF_CGROUP_INET_SOCK_RELEASE, chiamati quando il socket viene rilasciato.
    • Supporto del protocollo implementato PRP (Parallel Redundancy Protocol), che consente la commutazione basata su Ethernet su un canale di backup, trasparente per le applicazioni, in caso di guasto di uno dei componenti della rete.
    • Impila mac80211 aggiunto supporto per la negoziazione del canale WPA/WPA2-PSK a quattro fasi in modalità punto di accesso.
    • Aggiunta la possibilità di cambiare lo scheduler qdisc (disciplina delle code) per utilizzare l'algoritmo di gestione delle code di rete FQ-PIE (Flow Queue PIE) per impostazione predefinita, volto a ridurre l'impatto negativo del buffering dei pacchetti intermedi sulle apparecchiature di rete edge (bufferbloat) nelle reti con modem via cavo.
    • Sono state aggiunte nuove funzionalità a MPTCP (MultiPath TCP), estensioni 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. Aggiunto supporto per cookie syn, DATA_FIN, ottimizzazione automatica del buffer, diagnostica socket e flag REUSEADDR, REUSEPORT e V6ONLY in setsockopt.
    • Per le tabelle di routing virtuali VRF (Virtual Routing and Forwarding), che consentono di organizzare il funzionamento di più domini di routing su un unico sistema, è stata implementata la modalità “strict”. In questa modalità, una tabella virtuale può essere associata solo a una tabella di routing che non viene utilizzata in altre tabelle virtuali.
    • Il driver wireless è ath11k aggiunto supporta la frequenza di 6 GHz e scansione spettrale.
  • Attrezzatura
    • Rimosso il codice per supportare l'architettura UniCore, sviluppata presso il Microprocessor Center dell'Università di Pechino e inclusa nel kernel Linux nel 2011. Questa architettura non è stata mantenuta dal 2014 e non ha supporto in GCC.
    • È stato implementato il supporto per l'architettura RISC-V kcov (interfaccia debugfs per analizzare la copertura del codice del kernel), kmemleak (sistema di rilevamento delle perdite di memoria), protezione dello stack, segni di salto e operazioni tickless (multitasking indipendente dai segnali del timer).
    • Per l'architettura PowerPC è stato implementato il supporto per le code spinlock, che ha migliorato significativamente le prestazioni in situazioni di conflitto di lock.
    • Per le architetture ARM e ARM64, il meccanismo di regolazione della frequenza del processore è abilitato per impostazione predefinita scheduleutil (cpufreq governor), che utilizza direttamente le informazioni del task scheduler per prendere una decisione sulla modifica della frequenza e può accedere immediatamente ai driver cpufreq per modificare rapidamente la frequenza, adattando istantaneamente i parametri operativi della CPU al carico corrente.
    • Il driver DRM i915 per le schede grafiche Intel include il supporto per chip basati su microarchitettura Il Lago dei Razzi e aggiunto il supporto iniziale per le schede discrete Intel Xe DG1.
    • Il driver Amdgpu ha aggiunto il supporto iniziale per le GPU AMD Navi 21 (Navy Flounder) e Navi 22 (Ciclidi di Siena). Aggiunto il supporto per i motori di accelerazione di codifica e decodifica video UVD/VCE per la GPU Southern Islands (Radeon HD 7000).
      Aggiunta una proprietà per ruotare il display di 90, 180 o 270 gradi.

      È interessante notare che il driver per la GPU AMD è il driver più grande del kernel: contiene circa 2.71 milioni di righe di codice, ovvero circa il 10% della dimensione totale del kernel (27.81 milioni di righe). Allo stesso tempo, 1.79 milioni di righe sono rappresentate da file di intestazione generati automaticamente con dati per i registri GPU e il codice C è di 366mila righe (per confronto, il driver Intel i915 include 209mila righe e Nouveau - 149mila).

    • Nel driver Nouveau aggiunto supporto per il controllo dell'integrità fotogramma per fotogramma utilizzando CRC (Controlli di ridondanza ciclici) nei motori di visualizzazione GPU NVIDIA. L'implementazione si basa sulla documentazione fornita da NVIDIA.
    • Aggiunti driver per pannelli LCD: Frida FRD350H54004, KOE TX26D202VM0BWA, CDTech S070PWS19HP-FC21, CDTech S070SWV29HG-DC44, Tianma TM070JVHG33 e Xingbangda XBD599.
    • Il sottosistema audio ALSA supporta Flusso silenzioso Intel (modalità di alimentazione continua per dispositivi HDMI esterni per eliminare il ritardo all'avvio della riproduzione) e nuovo dispositivo per controllare l'illuminazione dei pulsanti di attivazione e disattivazione del microfono e ha anche aggiunto il supporto per nuove apparecchiature, incluso un controller Longson 7A1000.
    • Aggiunto supporto per schede, dispositivi e piattaforme ARM: Pine64 PinePhone v1.2, Lenovo IdeaPad Duet 10.1, ASUS Google Nexus 7, Acer Iconia Tab A500, Qualcomm Snapdragon SDM630 (utilizzato in Sony Xperia 10, 10 Plus, XA2, XA2 Plus e XA2 Ultra), Jetson Xavier NX, Amlogic WeTek Core2, Aspeed EthanolX, cinque nuove schede basate su NXP i.MX6, MikroTik RouterBoard 3011, Xiaomi Libra, Microsoft Lumia 950, Sony Xperia Z5, MStar, Microchip Sparx5, Intel Keem Bay, Amazon Alpine v3, Renesas RZ/G2H.

Allo stesso tempo, la Fondazione Latinoamericana per il Software Libero formato
вариант kernel 5.9 completamente gratuito - linux-libre 5.9-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 per WiFi rtw8821c e SoC MediaTek mt8183. Codice di pulizia blob aggiornato nei driver e sottosistemi touchscreen Habanalabs, Wilc1000, amdgpu, mt7615, i915 CSR, Mellanox mlxsw (Spectrum3), r8169 (rtl8125b-2) e x86.

Fonte: opennet.ru

Aggiungi un commento