Rilascio del kernel Linux 6.15

После двух месяцев разработки Линус Торвальдс представил релиз ядра Linux 6.15. Среди наиболее заметных изменений: механизм аудита в Landlock, режим закрепления маппинга памяти, подсистема fwctl, драйвер Nova для GPU NVIDIA, реализация хост-системы для гипервизора Hyper-V, поддержка зонированных устройств хранения в XFS, оптимизация сетевой подсистемы, scrub-проверка в Bcachefs, возможность контроля над операциями через io_uring.

В новую версию принято 15945 исправлений от 2154 разработчиков, размер патча — 59 МБ (изменения затронули 13596 файлов, добавлено 739608 строк кода, удалено 312168 строк). В прошлом выпуске было 12115 исправлений от 1984 разработчиков, размер патча — 39 МБ. Около 41% всех представленных в 6.15 изменений связаны с драйверами устройств, примерно 16% изменений имеют отношение к обновлению кода, специфичного для аппаратных архитектур, 13% связано с сетевым стеком, 5% — с файловыми системами и 4% c внутренними подсистемами ядра.

Основные новшества в ядре 6.15:

  • Sottosistema disco, I/O e file system
    • В механизм fanotify добавлена возможность отслеживания событий монтирования и отмонтирования.
    • В XFS добавлена поддержка зонированных устройств хранения (разделение на зоны групп блоков или секторов, в которые допускается лишь последовательное добавление данных с обновлением целиком всей группы блоков). Добавлен флаг rwf_dontcache для отключения кэширования при записи. Реализована возможность атомарной записи сразу нескольких блоков данных.
    • В Btrfs реализована возможность указания при монтировании отрицательных уровней сжатия zstd (от -15 до -1, например, «compress=zstd:-5»), обеспечивающих более высокую скорость работы ценой снижения эффективности сжатия. Улучшено кэширование файловых путей (в проведённом тесте выполнение операции «send» ускорилось на 30%). Добавлена поддержка блоков размером 2Кб.
    • В EXT4 повышена производительность при воспроизведении журнала с очень большим числом отозванных записей (нагрузка, свойственная разделам под ФС Lustre). Реализован линейный поиск записей «dentry» (внутреннее представление элементов каталогов), решающий проблемы с доступом к некоторым файлам в режиме без учёта регистра символов. Налажена работа опции монтирования «errors=remount-ro». Повышена стойкость при обработке повреждённых ФС.
    • В F2FS реализован ioctl для получения сведений о приоритете операции ввода/вывода для заданного файла. Проведена работа по переходу на использование фолиантов страниц памяти (page folios).
    • В Bcachefs добавлен режим «scrub», при котором осуществляется проверка корректности чтения всех данных и метаданных из ФС. В случае выявления ошибок запускается процедура восстановления. В Bcachefs также добавлена поддержка работы с ФС, размер блока в которых больше, чем размер страницы памяти. Стабилизирован формат дисковых структур Bcachefs (дальнейшие изменения формата будут реализовываться в форме опциональных дополнений).
    • В EROFS добавлена поддержка 48-разрядной адресации блоков.
    • В подсистеме FUSE реализованы sysctl default_request_timeout и max_request_timeout для задания таймаутов на выполнение запросов, что позволяет отслеживать зависания компонентов FUSE, работающих в пространстве пользователя. Максимальный размер имён файлов в FUSE увеличен до 1024 символов.
    • В системный вызов statmount() добавлена возможность получения информации о маппинге идентификаторов пользователей примонтированных файловых систем, применяемом для сопоставления файлов определённого пользователя на примонтированном чужом разделе с другим пользователем в текущей системе.
    • Релизована возможность создания точки монтирования с иным маппингом идентификаторов пользователей, чем у исходного примонтированного раздела.
    • В API для управления монтированием внесены изменения, упрощающие сборку сложных иерархий файловых систем без раскрытия отдельных частей файловых систем, которые необходимо оставить скрытыми.
    • В подсистему для работы с блочными устройствами добавлена поддержка аппаратных устройств защиты ключей шифрования.
    • В файловой системе SMB реализована опция is_network_name_deleted и включён по умолчанию режим smb_server_kerberos5.
    • Для ФС OverlayFS добавлена опция монтирования «override_creds», при указании которой для доступа к нижним уровням хранилища будут использоваться учётные данные вызывающего пользователя, а не выполнившего монтирование. Изменение, например, позволяет при монтировании OverlayFS требовать пользователя с полномочиями CAP_SYS_ADMIN, но использовать ФС с учётными данными без данной привилегии.
    • In exFAT, le operazioni di eliminazione dei file sono state accelerate. Invece di inviare richieste «discard» separatamente per ogni cluster liberato del file da eliminare, il driver ora raggruppa le richieste. In un test condotto, il tempo per eliminare un file di 80 GB è stato ridotto da 286 secondi a 1,6 secondi.
    • Tutti i pseudo-FS e i FS EXT2 sono stati convertiti per utilizzare il nuovo API di montaggio delle partizioni.
    • È stato rimosso il codice per il supporto dei file system SYSV (SystemV/386, Xenix e Coherent), che dal 2023 è stato contrassegnato come non supportato (orphaned).
  • Memoria e servizi di sistema
    • La versione minima di GCC necessaria per compilare il kernel è stata aumentata a 8.1, mentre quella di Clang è passata a 15.0.0.
    • È stata aggiunta la sottosistema fwctl (Firmware Control), che fornisce un API per la gestione sicura dei firmware e l'esecuzione dei gestori del firmware dallo spazio utente. Sulla base di fwctl sono stati preparati driver per dispositivi CXL (Compute Express Link), adattatori Ethernet Mellanox ConnectX (mlx5) e schede di servizio AMD/Pensando.
    • Sono state ampliate le funzionalità del meccanismo pidfd, che consente di utilizzare identificatori legati a processi specifici e, a differenza di pid, non sono riutilizzabili. È stata fornita la possibilità di recuperare dati sullo stato di uscita di un processo identificato tramite pidfd dopo che il processo padre ha ricevuto conferma della conclusione del processo figlio (reaped) e delle sue risorse sono state liberate. È stato aggiunto un flag PIDFD_SELF alle chiamate di sistema, attraverso il quale il processo può fare riferimento a se stesso.
    • Per l'architettura RISC-V è stata implementata la supporto per le estensioni BFloat16, Zaamo (operazioni atomiche in memoria), Zalrsc (Load-Reserved/Store-conditional) e ZBKB (operazioni bit per la crittografia).
    • Durante il tracciamento è stata fornita la possibilità di salvare gli argomenti delle funzioni chiamate e di visualizzarli nei log di tracciamento.
    • Nel sistema di input/output asincrono io_uring è stato aggiunto il supporto per la lettura delle informazioni sugli eventi epoll. L'uso di io_uring per gestire gli eventi epoll consente di ridurre il numero di switch di contesto, permettendo di gestire più eventi epoll contemporaneamente.
    • Nella sottosistema eBPF è stata migliorata la verifica dei programmi con cicli. Sono state aggiunte nuove istruzioni «timed_may_goto», «load-acquire» e «store-release». È stata fornita la possibilità di modificare gli attributi estesi dei file da programmi BPF. È stata aggiunta la funzione try_alloc_pages(), progettata per allocare memoria in caso di elevata probabilità di fallimento dell'operazione (quando si eseguono programmi BPF in contesti limitati).

      È stato implementato un nuovo primitivo di lock — rqspinlock (Resilient Queued Spin Lock), che durante l'esecuzione identifica situazioni che portano a deadlock. Questo nuovo primitivo consente di caricare programmi BPF per cui il verificatore non garantiva la correttezza nel funzionamento con i lock.

    • È stata significativamente migliorata l'affidabilità nell'allocazione di pagine di grandi dimensioni (huge-page).
    • È stata notevolmente accelerata la computazione delle somme di controllo CRC64 sui sistemi x86. Tra l'altro, sono state utilizzate nuove istruzioni vettoriali dal set AVX-512 per ottimizzare le prestazioni, che in alcune situazioni sono aumentate di 100 volte.
    • Prosegue il trasferimento delle modifiche dal ramo Rust-for-Linux, relative all'uso del linguaggio Rust come secondo linguaggio per lo sviluppo di driver e moduli del kernel (il supporto Rust non è attivo per impostazione predefinita e non comporta che Rust diventi una dipendenza di compilazione obbligatoria per il kernel). È stata fornita la possibilità di utilizzare il macro «#[kunit_tests()]» nel codice del kernel per eseguire unit test. È stato aggiunto il supporto per l'architettura ARMv7. Sono stati implementati moduli dma e hrtimer con wrapper Rust per DMA (aggiunti da Linus bypassando il maintainer, che dopo si è dimesso) e timer ad alta precisione. Sono stati ampliati i moduli ‘list’, ‘str’, ‘sync’, ‘error’ e ‘alloc’. È stato aggiunto il supporto per la nuova sintassi ‘&raw’ (raw_ref_op).
    • Nella sottosistema perf è stata implementata la possibilità di profilazione dei ritardi, utilizzando informazioni dal pianificatore di compiti.
    • È stato aggiunto un parametro della riga di comando del kernel «traceoff_after_boot», che disabilita il tracciamento dopo che il kernel è stato caricato e il processo init è stato avviato. Questo parametro può essere utilizzato nel diagnosticare problemi legati al boot, assicurando che i dati di tracciamento accumulati durante il caricamento non vengano sovrascritti.
    • È stata interrotta la supporto per sistemi x86 a 32 bit con più di 8 CPU e 4 GB di RAM. Queste macchine non vengono più prodotte da tempo, e i sistemi che richiedono tali risorse sono stati trasferiti su CPU a 64 bit.
    • Sono state apportate modifiche all'implementazione dei timer POSIX, che consentono allo strumento CRIU (Checkpoint/Restore in Userspace) di salvare e ripristinare gli identificatori dei timer.
  • Virtualizzazione e sicurezza
    • È stata aggiunta la possibilità di utilizzare Linux come ambiente principale (Dom0, partizione root) per l'iperfoglio Hyper-V (Microsoft Hypervisor). L'ambiente host gestisce l'iperfoglio, organizza l'avvio dei sistemi guest, assegna risorse e garantisce l'interazione di macchine virtuali con l'hardware. La gestione dell'iperfoglio Hyper-V su Linux avviene attraverso il dispositivo /dev/mshv.
    • È stato aggiunto un meccanismo di audit al modulo Landlock, che fornisce ai programmi non privilegiati strumenti per limitare l'uso degli oggetti del kernel Linux (gerarchie di file, socket di rete, ioctl, ecc.). L'audit consente di valutare in dettaglio le ragioni delle restrizioni di accesso attuate tramite Landlock, oltre a offrire la possibilità di comprendere quando e quale operazione è stata bloccata, perché è stata eseguita la restrizione e quale regola è stata attivata.
    • È stata aggiunta la possibilità di implementare in moduli LSM (Linux Security Modules) gestori che controllano gli accessi al sistema di input/output asincrono io_uring e che permettono di bloccare l'uso di io_uring per eludere le restrizioni all'accesso alle chiamate di sistema. Un gestore simile è stato implementato nel modulo LSM SELinux.
    • In SELinux è stata implementata la possibilità di applicare politiche a qualsiasi tipo di dato caricato dal kernel, inclusi le immagini del firmware, le politiche di sicurezza e i certificati.
    • È stata aggiunta una modalità di sigillatura (seal) per alcune operazioni di mappatura della memoria eseguite dal kernel nello spazio degli indirizzi del processo. La sigillatura rende la mappatura di sola lettura e non consente modifiche in caso di sfruttamento di vulnerabilità. Questa modalità si applica alla mappatura vDSO, vsyscall, vvar, sigpage e uprobes. La modalità è disattivata per impostazione predefinita, poiché potrebbe compromettere il funzionamento di alcune applicazioni. È stata aggiunta un'opzione di configurazione CONFIG_MSEAL_SYSTEM_MAPPINGS per abilitarla.
  • Sottosistema di rete
    • È continuato il lavoro per eliminare il blocco globale del stack di rete RTNL (rtnl_lock) e trasformarlo in blocchi legati a spazi di nomi di rete specifici.
    • È stata aggiunta la funzionalità iniziale per ricevere pacchetti di rete tramite io_uring con copia del contenuto direttamente nella memoria del programma nello spazio utente, senza buffering intermedio (zero-copy). Nei test condotti, questa modifica ha consentito di gestire il traffico attraverso un canale da 200 gigabit utilizzando un'unica unità CPU.
    • Sono state implementate le sysctl tcp_rto_max_ms e l'opzione TCP-socket TCP_RTO_MAX_MS, attraverso le quali è possibile impostare il tempo massimo tra i tentativi di ritrasmissione dei pacchetti.
    • Nel BPF è stata aggiunta una serie di chiamate di callback per ottenere informazioni sul tempo da diverse parti dello stack di rete, che possono essere utilizzate per diagnosticare problemi di latenza di rete.
    • Sono state implementate ottimizzazioni delle prestazioni delle operazioni di rete:
      • L'ottimizzazione GRO (Generic Receive Offload), che unisce più pacchetti piccoli in uno grande, è ora attivata durante il passaggio della gestione del pacchetto a un'altra CPU (per bilanciamento del carico) utilizzando il sottosistema XDP (eXpress Data Path), che consente di elaborare i pacchetti a livello del driver di rete prima della loro trasmissione allo stack di rete. L'aumento delle prestazioni nella gestione dei flussi TCP grazie all'ottimizzazione può raggiungere il doppio.
      • Sotto carichi pesanti, le prestazioni della funzione connect() sono state raddoppiate grazie alla sostituzione del blocco spin con un meccanismo di sincronizzazione RCU (Read-Copy-Update) durante la ricerca di record con informazioni sui lati della connessione (sorgenti e destinazioni Indirizzi IP e porte). È stata inoltre effettuata un'ottimizzazione dell'hashing, che ha fornito un ulteriore incremento delle prestazioni del 229%.
      • È stata accelerata l'implementazione di MPTCP (Multipath TCP), un'estensione del protocollo TCP per organizzare la consegna dei pacchetti contemporaneamente su più percorsi attraverso diverse interfacce di rete associate a indirizzi IP diversi. MPTCP in modalità a singolo flusso è stato accelerato del 29%.
      • In netfilter, in presenza di un socket, è stata interrotta l'esecuzione delle operazioni di ricerca dei percorsi nel FIB (Forwarding Information Base). Grazie a questa ottimizzazione, le prestazioni sono aumentate del 20%.
      • Le prestazioni di UDP in condizioni di flood sono aumentate del 10% grazie all'eliminazione di operazioni ridondanti con la struttura sk_tsflags durante la ricezione dei pacchetti.
    • È stato aggiunto un driver con implementazione del protocollo MCTP-over-USB.
  • Attrezzature
    • Nel kernel è stata adottata la prima implementazione del driver Nova per GPU NVIDIA, equipado con firmware GSP, utilizzati a partire dalla serie NVIDIA GeForce RTX 2000 basata sull'architettura Turing. Il driver è scritto in linguaggio Rust. Nella prima fase è stata aggiunta solo la struttura di base nova-core, che conta circa 400 righe di codice e implementa un livello di astrazione sui diversi interfaccie firmware GSP. Nella fase successiva, si prevede di includere nel kernel il driver DRM nova-drm (Direct Rendering Manager) per l'interazione con le GPU dallo spazio utente, oltre al driver VFIO con gestore vGPU, che consente di utilizzare GPU virtuali NVIDIA nei sistemi di virtualizzazione.
    • Prosegue il lavoro sul driver drm (Direct Rendering Manager) Xe per GPU basate sull'architettura Intel Xe, utilizzata nelle schede grafiche Intel della famiglia Arc e nella grafica integrata, a partire dai processori Tiger Lake. È stato aggiunto il supporto per la SVM (Shared Virtual Memory), un componente del framework DRM che gestisce la memoria condivisa utilizzata da CPU e GPU.
    • Nel driver i915 sono stati aggiunti identificativi per nuove GPU.
    • Nel driver Nouveau è stata ristrutturata l'interfaccia GSP RPC e integrato l'interfaccia drm_slave_encoder.
    • Nel driver AMDGPU è stato implementato il supporto per l'architettura DCN36 (Display Core Next). È stata aggiunta la possibilità di definire curve di luminosità personalizzate utilizzate per la regolazione della luminosità del display.
    • Nel driver adreno è stato aggiunto il supporto per la GPU Qualcomm Adreno 623.
    • È stato aggiunto il supporto per i touchpad Apple Touch Bar.
    • È stato aggiunto il supporto per la seconda versione dell'estensione eUSB2 (eUSB2V2 — Embedded USB2 Version 2.0), che consente di ridurre la tensione di alimentazione (fino a 1.2 volt) e migliorare le prestazioni di USB 2.0. La velocità di trasmissione dati in eUSB2V2 può raggiungere i 4.8 Gbps, dieci volte più veloce dei normali 480 Mbps tipici di USB 2.0. eUSB2V2 permetterà ai produttori di laptop di dotare i loro dispositivi di webcam ad alta risoluzione utilizzando ancora il bus Embedded USB2 per il collegamento.
    • È stato aggiunto il supporto per gli adattatori Ethernet Intel Killer E5000 (RTL8126).
    • È stato aggiunto il supporto per i pannelli visionari Visionox RM692E5, Rockchip w552793dba-v10, kingdisplay-kd110n11-51ie e starry-2082109qfh040022-50e.
    • È stato aggiunto un driver per i laptop Samsung Galaxy Book.
    • È stato aggiunto il supporto per i sistemi audio Presonus Studio 1824c, Jabra Evolve 65. È stato aggiunto il supporto per i moduli DSP AMD ACP 7.x, AWINC WM88166, Everest ES8388, Intel AVS PEAKVOL e GAIN. È stato migliorato il supporto audio per i laptop ASUS, HP e Lenovo.
    • È stato aggiunto il supporto per piattaforme ARM, SoC e dispositivi: Arm Morello, AMD (Xilinx) Versal NET, Google Pixel Pro 6, NetCube Kumquat, MYIR Remi Pi, Huawei Matebook E Go, Milk-V Jupiter ST STM32MP2, Mediatek MT8370, Apple T2, Skov (i.MX8MP), EVK (i.MX95), Rockchip RK35xx, Allwinner A523, 11 schede Toradex basate su i.MX6.

Contemporaneamente, il Fondo Latinoamericano per il Software Libero ha creato una versione completamente libera del kernel 6.15 — Linux-libre 6.15-gnu, ripulito da elementi di firmware e driver che contengono componenti o sezioni di codice non liberi, la cui area di applicazione è limitata dal produttore. Nella release 6.15 è stata neutralizzata il caricamento dei blob nei driver nova, Qualcomm iris v4l2, Airoha NPU, Tehuti Networks TN40xx Ethernet 10G, Realtek 8814A wifi, touchscreen del SoC Apple Silicon, Renesas UFS e aw88166 audio. È stata interrotta la pulizia del driver Spider 1Gb Ethernet, che è stato rimosso dal kernel. Sono stati rimossi i riferimenti ai file binari tivoizzati. È stata implementata la bloccatura del caricamento dei blob dal codice in linguaggio Rust.

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