Rilascio del kernel Linux 5.1

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

Il principale innovazioni:

  • Sottosistema disco, I/O e file system
    • Implementata una nuova interfaccia per I/O asincrono - io_uring, che si distingue per il supporto per il polling I/O e la capacità di lavorare con o senza buffering. Ricordiamo che il meccanismo di I/O asincrono “aio” proposto in precedenza non supportava l'I/O con buffer, poteva funzionare solo in modalità O_DIRECT (senza buffering e bypass della cache), aveva problemi con il blocco a causa dell'attesa della disponibilità dei metadati e ha mostrato ingenti costi generali dovuti alla copia dei dati in memoria.

      All'interno dell'API
      Gli sviluppatori io_uring hanno cercato di eliminare i difetti della vecchia interfaccia aio. Di produttività io_uring è molto vicino a SPDK ed è significativamente più avanti di libaio quando si lavora con il polling abilitato. È stata preparata una libreria per l'utilizzo di io_uring nelle applicazioni finali in esecuzione nello spazio utente liberare, che fornisce un framework di alto livello sull'interfaccia del kernel;

    • Nel meccanismo di tracciamento degli eventi in fanotify() di FS aggiunto supporto per il monitoraggio delle situazioni di superblocco e modifica della struttura diretto (eventi di creazione, eliminazione e spostamento di directory). Le funzionalità presentate aiutano a risolvere i problemi di scalabilità che sorgono quando si crea un tracciamento ricorsivo delle modifiche in file system molto grandi utilizzando il meccanismo inotify (le modifiche dirette in precedenza potevano essere tracciate solo tramite inotify, ma
      le prestazioni in condizioni di tracciamento ricorsivo di grandi directory nidificate lasciavano molto a desiderare). Ora tale monitoraggio può essere effettuato in modo efficace tramite fanotify;

    • Sul file system Btrfs aggiunto la possibilità di personalizzare il livello di compressione per l'algoritmo zstd, che può essere considerato come un compromesso ottimale tra la veloce ma inefficace compressione lz4 e la lenta ma buona compressione xz. Analogamente a come in precedenza era possibile impostare il livello di compressione quando si utilizzava zlib, per zstd è stato aggiunto il supporto per l'opzione di montaggio “-o compress=zstd:level”. Durante i 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, e il livello massimo 15 ha fornito 3.126 volte, ma con una compressione velocità di 37.30 MB/s, disimballaggio 878.84 MB/s e consumo di memoria 2547 MB;
    • Aggiunto da la possibilità di eseguire l'avvio da un file system situato sul dispositivo device-mapper, senza utilizzare initramfs. A partire dall'attuale versione del kernel, i dispositivi device-mapper possono essere utilizzati direttamente durante il processo di avvio, ad esempio come partizione con il file system root. La partizione viene configurata utilizzando il parametro di avvio "dm-mod.create". I moduli di mappatura dei dispositivi consentiti per il caricamento includono: "crypt", "delay", "linear", "snapshot-origin" e "verity";
    • Al file system F2FS orientato alle unità Flash è stato aggiunto il flag F2FS_NOCOW_FL, che consente di disabilitare la modalità copia su scrittura per un determinato file;
    • File system rimosso dal kernel Exof, che è una variante di ext2, adattata per funzionare con archivi di oggetti OSD (Object-based Storage Device). È stato rimosso anche il supporto per il protocollo SCSI per tali dispositivi di archiviazione di oggetti;
  • Virtualizzazione e sicurezza
    • Aggiunta l'opzione PR_SPEC_DISABLE_NOEXEC a prctl() per controllare l'esecuzione speculativa delle istruzioni per il processo selezionato. Una nuova opzione consente di disabilitare selettivamente l'esecuzione speculativa per i processi che potrebbero essere potenzialmente attaccati da un attacco Spectre. Il blocco dura fino alla prima chiamata a exec();
    • Modulo LSM implementato SafeSetID, che consente ai servizi di sistema di gestire in modo sicuro gli utenti senza aumentare i privilegi (CAP_SETUID) e senza ottenere privilegi di root. I privilegi vengono assegnati definendo regole in securityfs basate su una lista bianca di collegamenti validi (nella forma “UID1:UID2”);
    • Aggiunte modifiche di basso livello necessarie per il caricamento basato su stack di moduli di sicurezza (LSM). Introdotta l'opzione di avvio del kernel "lsm" per controllare quali moduli vengono caricati e in quale ordine;
    • Il supporto per gli spazi dei nomi dei file è stato aggiunto al sottosistema di controllo;
    • allargato le funzionalità del plugin GCC structleak, che consente di bloccare potenziali perdite di contenuto della memoria, viene fornita l'inizializzazione di eventuali variabili utilizzate nel codice tramite l'accesso ai riferimenti sullo stack;
  • Sottosistema di rete
    • Per prese implementato nuova opzione "SO_BINDTOIFINDEX" simile a
      "SO_BINDTODEVICE", ma prendendo come argomento il numero di indice dell'interfaccia di rete invece del nome dell'interfaccia;

    • Lo stack mac80211 ha aggiunto la possibilità di assegnare più BSSID (indirizzi MAC) a un dispositivo. Come parte di un progetto per ottimizzare le prestazioni WiFi, lo stack mac80211 ha aggiunto la contabilità del tempo di trasmissione e la capacità di distribuire il tempo di trasmissione tra più stazioni (quando si opera in modalità punto di accesso, assegnando meno tempo di trasmissione alle stazioni wireless lente, invece di distribuire il tempo equamente tra tutte le stazioni). stazioni);
    • Aggiunto meccanismo "salute del devlink", che fornisce notifiche quando si verificano problemi con l'interfaccia di rete;
  • Servizi di memoria e di sistema
    • Implementato consegna sicura del segnale che consente il riutilizzo del PID. Ad esempio, chiamando kill in precedenza, potrebbe verificarsi una situazione in cui, immediatamente dopo l'invio di un segnale, il PID di destinazione potrebbe essere liberato a causa della terminazione del processo e occupato da un altro processo, e il segnale finirebbe per essere passato a un altro processo. Per eliminare tali situazioni, è stata aggiunta una nuova chiamata di sistema pidfd_send_signal, che utilizza descrittori di file da /proc/pid per garantire un collegamento stabile del processo. Anche se il PID viene riutilizzato durante l'elaborazione della chiamata di sistema, il descrittore del file non cambierà e potrà essere utilizzato in sicurezza per inviare un segnale al processo;
    • Aggiunto da la possibilità di utilizzare dispositivi di memoria permanente (memoria persistente, ad esempio NVDIMM) come RAM. Fino ad ora il kernel supportava tali dispositivi come dispositivi di archiviazione, ma ora possono essere utilizzati anche come RAM aggiuntiva. La funzionalità è implementata in risposta ai desideri degli utenti che sono disposti a sopportare un ritardo nelle prestazioni e desiderano utilizzare l'API nativa di gestione della memoria del kernel Linux invece di utilizzare i sistemi esistenti di allocazione della memoria dello spazio utente in esecuzione su mmap per dax file;
    • Aggiunto un nuovo gestore di inattività della CPU (cpuidle, decide quando la CPU può essere messa in modalità di risparmio energetico profondo; più profonda è la modalità, maggiore è il risparmio, ma anche più tempo necessario per uscire dalla modalità) - TEO (Timer Events Oriented Governor ). Finora sono stati proposti due gestori cpuidle: “menu” e “ladder”, che differiscono nell'euristica. Il gestore "menu" ha conosciuto problemi nel prendere decisioni euristiche, per eliminarli si è deciso di preparare un nuovo gestore. TEO si posiziona come alternativa al gestore "menu", consentendo prestazioni più elevate mantenendo lo stesso livello di consumo energetico.
      È possibile attivare il nuovo gestore utilizzando il parametro di avvio “cpuidle.governor=teo”;

    • Come parte del lavoro da eliminare problemi del 2038, causato da un overflow del tipo time_t a 32 bit, include chiamate di sistema che offrono contatori del tempo a 32 bit per architetture a 64 bit. Di conseguenza, la struttura time_t a 64 bit può ora essere utilizzata su tutte le architetture. Modifiche simili sono state implementate anche nel sottosistema di rete per le opzioni timestamp prese di rete;
    • Nel sistema di patch a caldo per il core (patch live) aggiunto Funzionalità "Sostituzione atomica" per applicare atomicamente una serie di modifiche a una singola funzione. Questa funzionalità consente di distribuire patch di riepilogo che coprono diverse modifiche contemporaneamente, invece del processo di applicazione fase per fase delle patch live in un ordine rigorosamente definito, che è piuttosto difficile da mantenere. Mentre in precedenza ogni modifica successiva doveva essere basata sullo stato della funzione dopo l'ultima modifica, ora è possibile propagare diverse modifiche legate a uno stato iniziale contemporaneamente (ovvero, i manutentori possono invece mantenere una patch consolidata relativa al kernel di base di una catena di patch che dipendono l'una dall'altra);
    • Annunciato supporto deprecato per il formato di file eseguibile a.out e
      cancellato codice per generare file core in formato a.out, che è in uno stato abbandonato. Il formato a.out non è stato utilizzato sui sistemi Linux per molto tempo e la generazione di file a.out non è stata supportata per molto tempo dagli strumenti moderni nelle configurazioni Linux predefinite. Inoltre, il caricatore per i file a.out può essere implementato interamente nello spazio utente;

    • Al meccanismo di verifica del programma BPF è stata aggiunta la possibilità di identificare e rimuovere il codice inutilizzato. Il kernel include anche patch con supporto spinlock per il sottosistema BPF, fornendo funzionalità aggiuntive per la gestione dell'esecuzione parallela dei programmi BPF;
  • Attrezzatura
    • Nel driver Nouveau aggiunto supporto per la gestione eterogenea della memoria, consentendo alla CPU e alla GPU di accedere ad aree di memoria sincronizzate comuni. Il sistema di memoria virtuale condivisa (SVM, shared virtual memory) è implementato sulla base del sottosistema HMM (Heterogeneous memory management), che consente l'utilizzo di dispositivi dotati di proprie unità di gestione della memoria (MMU, memory management unit), che possono accedere memoria principale. In particolare, utilizzando HMM, è possibile organizzare uno spazio di indirizzi condiviso tra GPU e CPU, in cui la GPU può accedere alla memoria principale del processo. Il supporto SVM è attualmente abilitato solo per le GPU della famiglia Pascal, sebbene sia fornito supporto anche per le GPU Volta e Turing. Inoltre, in Nouveau aggiunto nuovo ioctl per controllare la migrazione delle aree di memoria del processo alla memoria della GPU;
    • Nel driver Intel DRM per GPU Skylake e versioni successive (gen9+) acceso Per impostazione predefinita, la modalità di avvio rapido elimina le modifiche non necessarie alla modalità durante l'avvio. Aggiunto новые identificatori di dispositivi basati sulle microarchitetture Coffelake e Ice Lake. Per le patatine Coffelake aggiunto Supporto GVT (Virtualizzazione della GPU). Per GPU virtuali implementato Supporto EDID VFIO. Per pannelli LCD MIPI/DSI aggiunto supporto per elementi ACPI/PMIC. Implementato nuove modalità TV TV 1080p30/50/60;
    • Aggiunto il supporto per la GPU Vega10/20 BACO al driver amdgpu. Implementata la gestione dell'alimentazione Vega 10/20 e le tabelle di controllo del dispositivo di raffreddamento Vega 10. Aggiunti nuovi identificatori di dispositivo PCI per le GPU Picasso. Aggiunto interfaccia per la gestione delle dipendenze programmabili per evitare deadlock;
    • Aggiunto Driver DRM/KMS per acceleratori dello schermo BRACCIO Komeda (Mali D71);
    • Aggiunto supporto per i pannelli schermo Toppoly TPG110, Sitronix ST7701, PDA 91-00156-A0, LeMaker BL035-RGB-002 3.5 e Kingdisplay kd097d04;
    • Aggiunto supporto per i codec audio Rockchip RK3328, Cirrus Logic CS4341 e CS35L36, MediaTek MT6358, Qualcomm WCD9335 e Ingenic JZ4725B, nonché per la piattaforma audio Mediatek MT8183;
    • Aggiunto supporto per controller NAND Flash STMicroelectronics FMC2, Amlogic Meson;
    • Aggiunto supporto acceleratore per i sistemi hardware Habana AI;
    • Aggiunto il supporto per i controller Gigabit Ethernet NXP ENETC e le interfacce wireless MediaTek MT7603E (PCIe) e MT76x8.

Allo stesso tempo, la Free Software Foundation America Latina formato
вариант kernel 5.1 completamente gratuito - linux-libre 5.1-gnu, ripulito da elementi firmware e driver contenenti componenti non liberi o sezioni di codice, la cui portata è limitata dal produttore. Nella nuova versione, il caricamento dei blob è disabilitato nei driver mt7603 e goya. Aggiornato il codice di pulizia dei blob nei driver e nei sottosistemi wilc1000, iwlwifi, soc-acpi-intel, brcmfmac, mwifiex, btmrvl, btmtk e touchscreen_dmi. La pulizia del blob nel caricatore del firmware lantiq xrx200 è stata interrotta a causa della sua rimozione dal kernel.

Fonte: opennet.ru

Aggiungi un commento