Versión do núcleo de Linux 6.1

Despois de dous meses de desenvolvemento, Linus Torvalds presentou o lanzamento do núcleo Linux 6.1. Entre os cambios máis salientables: soporte para o desenvolvemento de controladores e módulos na linguaxe Rust, modernización do mecanismo para determinar as páxinas de memoria usadas, un xestor de memoria especial para programas BPF, un sistema para diagnosticar problemas de memoria KMSAN, o KCFI (Kernelk Control). -Flow Integrity) mecanismo de protección, a introdución da árbore de estrutura Maple.

A nova versión inclúe 15115 correccións de 2139 desenvolvedores, o tamaño do parche é de 51 MB, o que é aproximadamente 2 veces menor que o tamaño dos parches dos núcleos 6.0 e 5.19. Os cambios afectaron a 13165 ficheiros, engadíronse 716247 liñas de código e elimináronse 304560 liñas. Aproximadamente o 45% de todos os cambios introducidos en 6.1 están relacionados con controladores de dispositivos, aproximadamente o 14% dos cambios están relacionados coa actualización de código específico de arquitecturas de hardware, o 14% están relacionados coa pila de rede, o 3% están relacionados con sistemas de ficheiros e o 3% están relacionados cos subsistemas do núcleo interno.

Principais novidades no núcleo 6.1:

  • Servizos de memoria e sistema
    • Engadida a posibilidade de usar Rust como segunda linguaxe para desenvolver controladores e módulos do núcleo. O motivo principal para admitir Rust é facilitar a escritura de controladores de dispositivos seguros e de alta calidade reducindo a probabilidade de cometer erros ao traballar coa memoria. O soporte de Rust está desactivado por defecto e non fai que Rust se inclúa como unha dependencia obrigatoria da construción do núcleo. O núcleo adoptou ata agora unha versión mínima e reducida dos parches, que se reduciu de 40 a 13 mil liñas de código e ofrece só o mínimo necesario, suficiente para construír un módulo do núcleo sinxelo escrito na linguaxe Rust. No futuro, está previsto aumentar gradualmente a funcionalidade existente, trasladando outros cambios da rama Rust-for-Linux. Paralelamente, estanse a desenvolver proxectos para utilizar a infraestrutura proposta para desenvolver controladores para unidades NVMe, o protocolo de rede 9p e a GPU Apple M1 en linguaxe Rust.
    • Para os sistemas baseados en arquitecturas AArch64, RISC-V e LoongArch con EFI, implementouse a capacidade de cargar directamente imaxes do núcleo comprimidas. Engadíronse controladores para cargar, executar e descargar imaxes do núcleo, chamados directamente desde EFI zboot. Tamén se engadiron controladores para instalar e eliminar protocolos da base de datos de protocolos EFI. Anteriormente, o desempaquetado realizábase mediante un cargador de arranque separado, pero agora pode facelo un controlador no propio núcleo: a imaxe do núcleo fórmase como unha aplicación EFI.
    • A composición inclúe parte dos parches coa implementación dun modelo de xestión de memoria multinivel, que permite separar bancos de memoria con diferentes características de rendemento. Por exemplo, as páxinas máis utilizadas poden almacenarse na memoria máis rápida, mentres que as páxinas máis utilizadas poden almacenarse na memoria relativamente lenta. O núcleo 6.1 introduce un mecanismo para determinar onde se atopan as páxinas moi utilizadas na memoria lenta para que poidan ser promovidas a memoria rápida, e tamén introduce un concepto xeral dos niveis de memoria e o seu rendemento relativo.
    • Inclúe o mecanismo MGLRU (Multi-Generational LRU), que substitúe a antiga implementación de LRU (Least Recently Used) baseada en dúas colas cunha estrutura de varias etapas que determina mellor que páxinas de memoria están realmente en uso e cales poden ser enviadas a partición de intercambio.
    • Engadiuse soporte para a estrutura de datos "árbore de bordo" proposta polos enxeñeiros de Oracle, que se sitúa como un substituto máis eficaz da estrutura de "árbore vermella-negra". Maple tree é unha variante de B-tree que admite a indexación de intervalos e está deseñada para facer un uso eficiente da caché dos procesadores modernos. Algúns subsistemas de xestión de memoria xa foron transferidos a maple tree, o que tivo un efecto positivo no seu rendemento. No futuro, a árbore de bordo pode usarse para implementar o bloqueo de rango.
    • A capacidade de crear programas BPF "destrutivos" deseñados especialmente para iniciar un apagado de emerxencia mediante a chamada crash_kexec() engadiuse ao subsistema BPF. Tales programas BPF poden ser necesarios para propósitos de depuración para iniciar a creación dun volcado por accidente nun momento determinado. Para acceder a operacións destrutivas ao cargar un programa BPF, debes especificar a marca BPF_F_DESTRUCTIVE, activar sysctl kernel.destructive_bpf_enabled e ter dereitos CAP_SYS_BOOT.
    • Para os programas BPF, é posible enumerar elementos cgroup, así como enumerar recursos (ficheiros, vma, procesos, etc.) dun fío ou tarefa específica. Implementouse un novo tipo de mapa para crear búfers de anel de usuario.
    • Engadiuse unha chamada especial para a asignación de memoria nos programas BPF (allocador de memoria), que proporciona unha asignación de memoria máis segura no contexto BPF que o estándar kmalloc().
    • A primeira parte dos cambios integrouse, proporcionando a posibilidade de crear controladores para dispositivos de entrada cunha interface HID (Human Interface Device), implementada en forma de programas BPF.
    • O kernel eliminou completamente o código para admitir o formato de ficheiro executable a.out, que quedou en desuso na versión 5.1 e quedou desactivado para as principais arquitecturas desde as versións 5.18 e 5.19. O formato a.out estivo en desuso nos sistemas Linux, e as ferramentas modernas non admiten a xeración de ficheiros a.out nas configuracións predeterminadas de Linux. O cargador de ficheiros a.out pódese implementar enteiramente no espazo do usuario.
    • Para os sistemas baseados na arquitectura de conxunto de instrucións LoongArch usada nos procesadores Loongson 3 5000 e que implementan o novo RISC ISA, similar a MIPS e RISC-V, implícase o soporte para eventos de medición de rendemento (eventos de perf), kexec, kdump e compilación BPF JIT. .
    • A interface de E/S asíncrona io_uring ofrece un novo modo, IORING_SETUP_DEFER_TASKRUN, que permite aprazar temporalmente o traballo relacionado co búfer de anel ata que se realice unha solicitude de aplicación, que se pode usar para traballar por lotes e evitar problemas de latencia debido á preferencia. momento incorrecto.
    • Os procesos no espazo do usuario teñen a capacidade de iniciar a conversión dunha serie de páxinas de memoria normais nun conxunto de páxinas de memoria grandes (Transparent Huge-Pages).
    • Engadiuse a implementación do dispositivo /dev/userfaultfd, que permite o acceso á funcionalidade da chamada ao sistema userfaultfd() usando dereitos de acceso no FS. A funcionalidade userfaultfd permítelle crear controladores para acceder a páxinas de memoria non asignadas (erros de páxina) no espazo do usuario.
    • Aumentáronse os requisitos para a versión da utilidade GNU Make; agora requírese polo menos a versión 3.82 para construír o núcleo.
  • Subsistema de disco, E/S e sistemas de ficheiros
    • Realizáronse importantes optimizacións de rendemento no sistema de ficheiros Btrfs; entre outras cousas, o rendemento da chamada FIEMAP ioctl aumentou en ordes de magnitude. Engadido soporte para escrituras asíncronas en búfer para aplicacións que usan io_uring. Engadido soporte para ficheiros protexidos con fs-verity á operación "enviar".
    • O sistema de ficheiros ext4 engadiu optimizacións de rendemento relacionadas co mantemento do xornal e co funcionamento de só lectura.
    • O sistema de ficheiros EROFS (Enhanced Read-Only File System), deseñado para o seu uso en particións accesibles en modo de só lectura, implementa a capacidade de compartir datos duplicados en diferentes sistemas de ficheiros.
    • Engadiuse a chamada ao sistema statx() para mostrar información sobre se se pode aplicar E/S directa a un ficheiro.
    • Engadiuse soporte para a creación de ficheiros temporais coa marca O_TMPFILE ao subsistema FUSE (Filesystems in User Space).
  • Virtualización e seguridade
    • Substituíuse a implementación do mecanismo de protección CFI (Control Flow Integrity), engadindo comprobacións antes de cada chamada indirecta dunha función para detectar algunhas formas de comportamento indefinido que potencialmente poderían levar a unha violación da orde de execución normal (fluxo de control) como un resultado do uso de exploits que cambian os punteiros a funcións almacenadas na memoria. A implementación estándar de CFI do proxecto LLVM foi substituída por unha opción tamén baseada no uso de Clang, pero especialmente adaptada para protexer subsistemas de baixo nivel e núcleos de sistemas operativos. En LLVM, ofrecerase unha nova implementación na versión Clang 16 e habilitarase coa opción "-fsanitize=kcfi". A diferenza fundamental coa nova implementación é que non está vinculada a optimizacións de tempo de ligazón (LTO) e non provoca que os punteiros de función sexan substituídos por ligazóns na táboa de saltos.
    • Para os módulos LSM (módulo de seguridade de Linux), é posible crear controladores que intercepten operacións para crear espazos de nomes.
    • Ofrécense ferramentas para verificar sinaturas dixitais PKCS#7 nos programas BPF.
    • A capacidade de abrir en modo sen bloqueo (O_NONBLOCK), que foi eliminada inadvertidamente no núcleo 5.6, devolveuse a /dev/random.
    • En sistemas con arquitectura x86, engadiuse un aviso en caso de asignación de páxinas de memoria por parte de subsistemas do núcleo que permiten simultaneamente a execución e a escritura. No futuro, estase considerando a posibilidade de prohibir completamente este mapeamento de memoria.
    • Engadiuse un mecanismo de depuración KMSAN (Kernel Memory Sanitizer) para detectar o uso de memoria non inicializada no núcleo, así como as fugas de memoria non inicializadas entre o espazo do usuario e os dispositivos.
    • Realizáronse melloras no xerador de números pseudoaleatorios CRNG criptoseguro utilizado na chamada getrandom. Os cambios foron preparados por Jason A. Donenfeld, autor de VPN WireGuard, e teñen como obxectivo mellorar a seguridade da extracción de números enteiros pseudoaleatorios.
  • Subsistema de rede
    • A pila TCP ofrece a capacidade (desactivada por defecto) de usar táboas hash de sockets por separado para cada espazo de nomes, o que mellora o rendemento en sistemas cun gran número de espazos de nomes.
    • Eliminouse o código para admitir o protocolo DECnet herdado. Os stubs da API do espazo de usuario déixanse no seu lugar para permitir a compilación das aplicacións que usan DECnet, pero estas aplicacións non poderán conectarse á rede.
    • O protocolo netlink está documentado.
  • Оборудование
    • O controlador amdgpu engadiu soporte para o reenvío DSC (Display Stream Compression) para a compresión de datos sen perdas ao intercambiar información con pantallas que admiten resolucións moi altas. Continúa o traballo para ofrecer soporte ás plataformas AMD RDNA3 (RX 7000) e CDNA (Instinct). Engadiuse compatibilidade con DCN 3.2, SMU 13.x, NBIO 7.7, GC 11.x, PSP 13.x, SDMA 6.x e GMC 11.x IP. O controlador amdkfd (para GPU AMD discretas como Polaris) ofrece compatibilidade con GFX 11.0.3.
    • O controlador i915 (Intel) inclúe soporte para GPU Meteor Lake. Meteor Lake e as GPU máis recentes admiten a interface DP 2.0 (DisplayPort). Engadiron identificadores para tarxetas de vídeo baseados na microarquitectura Alder Lake S.
    • Engadido soporte para subsistemas de audio implementados en procesadores Apple Silicon, Intel SkyLake e Intel KabyLake. O controlador de audio CS35L41 HDA admite o modo de suspensión. Engadido soporte ASoC (ALSA System on Chip) para chips de audio integrados Apple Silicon, AMD Rembrant DSP, AMD Pink Sardine ACP 6.2, Everest ES8326, Intel Sky Lake e Kaby Lake, Mediatek MT8186, NXP i.MX8ULP DSP, Qualcomm SC8280XP, SM8250 SM8450 e Texas Instruments SRC4392
    • Engadiuse soporte para paneis LCD Samsung LTL101AL01, B120XAN01.0, R140NWF5 RH, Densitron DMT028VGHMCMI-1A TFT, AUO B133UAN02.1, IVO M133NW4J-R3, Innolux N120ACAKO-WH1, B116NW01.6J-R116, Innolux N21ACAKO-WH116, BO2X N116, INX N1BCA- EA0800, INX N9BCN-EAXNUMX, Tecnoloxía Multi-Inno MIXNUMXFT-XNUMX.
    • Engadido soporte para controladores AHCI SATA utilizados no SoC Baikal-T1.
    • Engadido soporte para chips Bluetooth MediaTek MT7921, Intel Magnetor (CNVi, conectividade integrada), Realtek RTL8852C, RTW8852AE e RTL8761BUV (Edimax BT-8500).
    • O controlador ath11k para módulos sen fíos Qualcomm engadiu soporte para a dixitalización espectral no rango de 160 MHz, implementou NAPI multiproceso e mellorou o soporte para chips Wi-Fi Qualcomm WCN6750.
    • Agregados controladores para teclado PinePhone, paneles táctiles InterTouch (ThinkPad P1 G3), controlador adaptativo X-Box, controlador de vuelo PhoenixRC, controlador de coche VRC-2, controlador de borde DualSense, panel de operación IBM, mandos a distancia XBOX One Elite, tabletas XP-PEN Deco Pro S e Intuos Pro Small (PTH-460).
    • Engadiuse o controlador para os aceleradores criptográficos Aspeed HACE (Hash and Crypto Engine).
    • Engadido soporte para controladores Thunderbolt/USB4 Intel Meteor Lake integrados.
    • Engadido soporte para teléfonos intelixentes Sony Xperia 1 IV, Samsung Galaxy E5, E7 e Grand Max, Pine64 Pinephone Pro.
    • Engadiuse soporte para SoC e placas ARM: AMD DaytonaX, Mediatek MT8186, Rockchips RK3399 e RK3566, TI AM62A, NXP i.MX8DXL, Renesas R-Car H3Ne-1.7G, Qualcomm IPQ8064-v2.0, IPQ8062, IPQ8065, IPQ8 BL i.MX8195MM OSM-S, MT4 (Acer Tomato), Radxa ROCK 4C+, NanoPi R1S Enterprise Edition, JetHome JetHub DXNUMXp. Controladores actualizados para SoC Samsung, Mediatek, Renesas, Tegra, Qualcomm, Broadcom e NXP.

Ao mesmo tempo, a Latin American Free Software Foundation formou unha versión do kernel 6.1 completamente gratuíto - Linux-libre 6.1-gnu, limpa de elementos de firmware e controladores que conteñan compoñentes ou seccións de código non libres, cuxo alcance é limitado polo fabricante. A nova versión limpa o novo controlador rtw8852b e os ficheiros DTS para varios SoC Qualcomm e MediaTek con procesadores baseados na arquitectura AArch64. Código de limpeza de blob actualizado en controladores e subsistemas amdgpu, i915, brcmfmac, r8188eu, rtw8852c, Intel ACPI. Corrixiuse a limpeza dos controladores obsoletos das tarxetas de TV tm6000, cpia2 v4l, sp8870, av7110.

Fonte: opennet.ru

Engadir un comentario