Rilascio del kernel Linux 5.1

Dopo due mesi di sviluppo, Linus Torvalds ha presentato rilascio del kernel Linux 5.1. Tra le modifiche più evidenti: una nuova interfaccia per l'input/output asincrono io_uring, la possibilità di utilizzare NVDIMM come RAM, supporto per la memoria virtuale condivisa in Nouveau, supporto per il monitoraggio scalabile di filesystem molto grandi tramite fanotify, possibilità di configurare i livelli di compressione Zstd in Btrfs, un nuovo gestore cpuidle TEO, implementazione di chiamate di sistema per risolvere il problema del 2038, possibilità di avvio da dispositivi device-mapper senza initramfs, modulo LSM SafeSetID, supporto per patch live combinate.

Principali novità:

  • Sottosistema di disco, input/output e file system
    • È stata implementata una nuova interfaccia per l'input/output asincrono — io_uring, che si distingue per il supporto del polling dell'input/output e la possibilità di operare sia con che senza buffering. Ricordiamo che il meccanismo di input/output asincrono "aio" proposto in precedenza non supportava l'input/output bufferizzato, poteva lavorare solo in modalità O_DIRECT (senza buffering e bypassando la cache), aveva problemi di bloccaggio dovuti in attesa della disponibilità dei metadati e mostrava elevate spese generali a causa della copia dei dati in memoria.

      Nell'ambito dell'API
      io_uring gli sviluppatori hanno cercato di risolvere le carenze del vecchio interfaccia aio. Per delle prestazioni io_uring è molto vicino a SPDK e supera notevolmente libaio quando il polling è attivato. Per utilizzare io_uring nelle applicazioni finali che operano in User Space, è stata preparata una libreria liburing, che fornisce un collegamento di alto livello sull'interfaccia del kernel;

    • Nel meccanismo di monitoraggio degli eventi nel filesystem fanotify() è stata aggiunta supporto per il monitoraggio di situazioni di modifica del superblocco e della struttura dirent (eventi di creazione, eliminazione e spostamento di directory). Le funzionalità presentate aiutano a risolvere i problemi di scalabilità che si presentano quando si creano monitoraggi ricorsivi delle modifiche in filesystem molto grandi utilizzando il meccanismo inotify (in precedenza, le modifiche a dirent potevano essere monitorate solo tramite inotify, ma
      l'efficacia in condizioni di monitoraggio ricorsivo di grandi directory annidate lasciava a desiderare). Ora questo tipo di monitoraggio può essere realizzato in modo efficace tramite fanotify;
    • Nel filesystem Btrfs è stata aggiunta la possibilità di configurare il livello di compressione per l'algoritmo zstd, che può essere considerato come un compromesso ottimale tra l'zlib veloce ma inefficace e l'xz lento ma altamente compressivo. Analogamente a come era possibile impostare il livello di compressione durante l'uso di zlib per zstd, è stato aggiunto il supporto per l'opzione di montaggio "-o compress=zstd:level". Nei test, il primo livello minimo ha fornito una compressione dei dati di 2,658 volte con una velocità di compressione di 438,47 MB/s, una velocità di decompressione di 910,51 MB/s e un consumo di memoria di 780 MB, mentre il livello massimo 15 ha ottenuto 3,126 volte, ma con una velocità di compressione di 37,30 MB/s, decompressione di 878,84 MB/s e un consumo di memoria di 2547 MB;
    • È stata aggiunta la possibilità di avviare dal filesystem posizionato sul dispositivo device-mapper, senza l'uso di initramfs. A partire dall'attuale versione del kernel, il dispositivo device-mapper può essere utilizzato direttamente nel processo di avvio, ad esempio come partizione con il filesystem radice. La configurazione della partizione è effettuata tramite il parametro di avvio "dm-mod.create". Tra i moduli consentiti per l'avvio del device-mapper: "crypt", "delay", "linear", "snapshot-origin" e "verity";
    • Nel filesystem F2FS orientato a unità Flash è stato aggiunto il flag F2FS_NOCOW_FL, che consente di disabilitare la modalità copy-on-write per un file specifico;
    • Dal kernel è stata rimossa la filesystem Exofs, che rappresenta una variante di ext2, adattata per lavorare con i dispositivi di archiviazione basati su oggetti OSD (Object-based Storage Device). È stato anche rimosso il supporto per il protocollo SCSI per tali dispositivi di archiviazione oggetti;
  • Virtualizzazione e sicurezza
    • Nel prctl() è stata aggiunta l'opzione PR_SPEC_DISABLE_NOEXEC per gestire l'esecuzione speculativa delle istruzioni per il processo selezionato. Questa nuova opzione consente di disabilitare in modo selettivo l'esecuzione speculativa per i processi che potrebbero essere potenzialmente attaccati tramite una vulnerabilità del tipo Spectre. Il blocco rimane attivo fino alla prima chiamata a exec();
    • Implementato il modulo LSM SafeSetID, che consente ai servizi di sistema di gestire in modo sicuro gli utenti senza elevare i privilegi (CAP_SETUID) e senza acquisire i diritti dell'utente root. L'assegnazione dei privilegi avviene tramite la definizione nel securityfs di regole basate su un elenco bianco di legami ammessi (nella forma "UID1:UID2");
    • Sono state apportate modifiche di basso livello necessarie per l'organizzazione a pila del caricamento dei moduli di sicurezza (LSM). È stato introdotto il parametro di avvio del kernel "lsm", che consente di gestire quali moduli vengono caricati e in quale ordine;
    • Nella sottosistema di auditing è stata aggiunta la supporto per gli spazi dei nomi dei file;
    • Espansi le capacità del plugin GCC structleak, che consente di bloccare potenziali perdite di contenuto della memoria. È stata garantita l'inizializzazione di tutte le variabili utilizzate nel codice tramite riferimenti nello stack;
  • Sottosistema di rete
    • Per i socket è stata implementata nuova opzione "SO_BINDTOIFINDEX", simile a
      "SO_BINDTODEVICE", ma accetta come argomento l'indice del numero dell'interfaccia di rete anziché il nome dell'interfaccia;
    • Nel stack mac80211 è stata aggiunta la possibilità di assegnare più BSSID (indirizzi MAC) a un dispositivo. Nell'ambito del progetto di ottimizzazione delle prestazioni WiFi, nel stack mac80211 è stata aggiunta la considerazione della distribuzione del tempo di trasmissione e la possibilità di distribuire il tempo di trasmissione tra più stazioni (in modalità access point, assegnando meno tempo di trasmissione alle stazioni wireless più lente, invece di una suddivisione uniforme del tempo tra tutte le stazioni);
    • È stato aggiunto un meccanismo “devlink health", che fornisce notifiche in caso di problemi con l'interfaccia di rete;
  • Memoria e servizi di sistema
    • supporto per l'interfaccia consegna sicura dei segnali, tenendo conto della possibilità di riutilizzo del PID. Ad esempio, durante una chiamata a kill, prima potrebbe verificarsi una situazione in cui, subito dopo l'invio del segnale, il PID target potesse essere liberato a causa della terminazione del processo e occupato da un altro processo, risultando nel fatto che il segnale veniva inviato a un altro processo. Per evitare tali situazioni, è stata aggiunta una nuova chiamata di sistema pidfd_send_signal, che utilizza i descrittori di file da /proc/pid per garantire un collegamento stabile al processo. Anche se il PID viene riutilizzato durante l'elaborazione della chiamata di sistema, il descrittore di file non cambierà e può essere utilizzato in modo sicuro per inviare segnali al processo;
    • È stata aggiunta la possibilità di utilizzare dispositivi di memoria persistente (persistent-memory, ad esempio NVDIMM) come memoria RAM. Fino ad ora, nel kernel, tali dispositivi erano supportati come unità di archiviazione, ma ora possono essere utilizzati anche come memoria volatile aggiuntiva. Questa possibilità è stata implementata in risposta alle richieste degli utenti, disposti a tollerare un calo delle prestazioni e desiderosi di utilizzare l'API di gestione della memoria del kernel Linux invece di ricorrere ai sistemi di allocazione della memoria esistenti nello spazio utente, che operano sopra mmap per il file dax;
    • È stato aggiunto un nuovo gestore di inattività della CPU (cpuidle, che determina quando è possibile mettere la CPU in modalità profonda di risparmio energetico; maggiore è la profondità della modalità, maggiore è il risparmio, ma ci vuole anche più tempo per uscire da essa) - TEO (Timer Events Oriented Governor). Fino ad ora erano state proposte due gestori cpuidle - "menu" e "ladder", che differiscono per la loro euristica. Nel gestore "menu" ci sono noti problemi nell'assumere decisioni euristiche, e per risolverli è stato deciso di preparare un nuovo gestore. TEO è posizionato come alternativa al gestore "menu", permettendo di ottenere prestazioni più elevate mantenendo lo stesso livello di consumo energetico.
      Il nuovo gestore può essere attivato utilizzando il parametro di avvio "cpuidle.governor=teo";
    • Nell'ambito del lavoro per risolvere il problema del 2038, causato dall'overflow del tipo time_t a 32 bit, sono stati inclusi nelle chiamate di sistema contatori temporali a 64 bit per architetture a 32 bit. Di conseguenza, la struttura time_t a 64 bit può ora essere utilizzata su tutte le architetture. Modifiche analoghe sono state implementate nel sottosistema di rete per le opzioni timestamp dei socket di rete;
    • Nel sistema di patching live per il kernel (live patching) è stata aggiunta la funzionalità «Atomic Replace» per l'applicazione atomica di una serie di modifiche a una funzione. La funzione indicata consente di diffondere patch consolidate che coprono più modifiche contemporaneamente, invece di un processo piuttosto complesso di applicazione sequenziale di patch live in un ordine rigorosamente definito. Se in precedenza ogni modifica successiva doveva basarsi sullo stato della funzione dopo l'ultima modifica, ora è possibile diffondere contemporaneamente più modifiche legate a uno stato iniziale (cioè, i manutentori possono gestire una patch consolidata rispetto al nucleo di base invece di una catena di patch dipendenti l'una dall'altra);
    • Dichiarata obsoleta la supporto per il formato di file eseguibili a.out e
      rimossa il codice per generare file core nel formato a.out, che è in uno stato abbandonato. Il formato a.out non è più utilizzato sui sistemi Linux, e la generazione di file a.out non è più supportata dagli strumenti moderni nelle configurazioni per Linux per impostazione predefinita. Inoltre, il caricatore per i file a.out può essere implementato interamente nello spazio utente;
    • Nel meccanismo di verifica dei programmi BPF è stata aggiunta la possibilità di identificare e rimuovere codice non utilizzato. Sono stati inclusi nel kernel anche patch con supporto per spinlock per il sottosistema BPF, offrendo ulteriori possibilità di gestione dell'esecuzione parallela dei programmi BPF;
  • Apparecchiatura
    • Nel driver Nouveau è stata aggiunta supporto per la gestione della memoria eterogenea, che consente l'accesso della CPU e della GPU a aree di memoria sincronizzate condivise. La memoria virtuale condivisa (SVM, shared virtual memory) è implementata sulla base del sottosistema HMM (Heterogeneous memory management), consentendo l'uso di dispositivi con propri blocchi di gestione della memoria (MMU, memory management unit), che possono accedere alla memoria principale. Inoltre, grazie a HMM è possibile organizzare uno spazio di indirizzamento condiviso tra GPU e CPU, in cui la GPU può accedere alla memoria principale del processo. Il supporto per SVM è attualmente abilitato solo per le GPU della famiglia Pascal, sebbene il supporto sia fornito anche per le GPU Volta e Turing. Inoltre, in Nouveau è stata aggiunta nuovo ioctl per gestire la migrazione delle aree di memoria dei processi nella memoria GPU;
    • Nel driver DRM Intel per GPU Skylake e oltre (gen9+) è attivato per impostazione predefinita, la modalità fastboot esclude cambiamenti inutili di modalità durante l'avvio. Aggiunti nuovi identificatori dei dispositivi basati sulle microarchitetture Coffelake e Ice Lake. Per i chip Coffelake è stata aggiunta supporto GVT (virtualizzazione GPU). Per GPU virtuali è stata implementata supporto VFIO EDID. Per pannelli LCD MIPI/DSI è stata aggiunta supporto per elementi ACPI/PMIC. Implementato nuove modalità TV 1080p30/50/60 TV;
    • Nel driver amdgpu è stato aggiunto il supporto per GPU Vega10/20 BACO. Sono stati implementati i controlli di alimentazione per Vega 10/20 e le tabelle di gestione della ventola per Vega 10. Sono stati aggiunti nuovi identificatori PCI per dispositivi per GPU Picasso. Aggiunto interfaccia di gestione delle dipendenze pianificate per escludere deadlock;
    • Aggiunto driver DRM/KMS per acceleratori delle operazioni su schermo ARM Komeda (Mali D71);
    • Aggiunto il supporto per pannelli Toppoly TPG110, Sitronix ST7701, PDA 91-00156-A0, LeMaker BL035-RGB-002 3.5 e Kingdisplay kd097d04;
    • Aggiunto il supporto per codec audio Rockchip RK3328, Cirrus Logic CS4341 e CS35L36, MediaTek MT6358, Qualcomm WCD9335 e Ingenic JZ4725B, oltre alla piattaforma audio Mediatek MT8183;
    • Aggiunto il supporto per controller NAND Flash STMicroelectronics FMC2, Amlogic Meson;
    • Aggiunto il supporto per acceleratori per sistemi di machine learning Habana AI;
    • Aggiunto il supporto per controller Ethernet gigabit NXP ENETC e interfacce wireless MediaTek MT7603E (PCIe) e MT76x8.

Allo stesso tempo, il Fondo Latinoamericano per il Software Libero ha creato
una versione completamente libero kernel 5.1Linux-libre 5.1-gnu, ripulito da elementi di firmware e driver contenenti componenti non liberi o porzioni di codice la cui applicazione è limitata dal produttore. Nel nuovo rilascio è stata disattivata il caricamento di blob nei driver mt7603 e goya. Il codice di pulizia dei blob nei driver e nelle sottosistemi wilc1000, iwlwifi, soc-acpi-intel, brcmfmac, mwifiex, btmrvl, btmtk e touchscreen_dmi è stato aggiornato. La pulizia dei blob nel caricatore di firmware lantiq xrx200 è stata interrotta a causa della sua rimozione dal kernel.

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