Versión do núcleo de Linux 6.3

Despois de dous meses de desenvolvemento, Linus Torvalds presentou o lanzamento do núcleo Linux 6.3. Entre os cambios máis salientables: limpeza de plataformas ARM e controladores gráficos legados, integración continuada do soporte da linguaxe Rust, utilidade hwnoise, soporte para estruturas de árbore vermello-negro en BPF, modo BIG TCP para IPv4, benchmark Dhrystone incorporado, capacidade de desactivación execución en memfd, admite a creación de controladores HID mediante BPF, fixéronse cambios en Btrfs para reducir a fragmentación dos grupos de bloques.

A nova versión inclúe 15637 correccións de 2055 desenvolvedores; tamaño do parche: 76 MB (os cambios afectaron a 14296 ficheiros, engadíronse 1023183 liñas de código, elimináronse 883103 liñas). En comparación, a versión anterior ofrecía 16843 correccións de 2178 desenvolvedores; O tamaño do parche é de 62 MB. Aproximadamente o 39% de todos os cambios introducidos no núcleo 6.3 están relacionados con controladores de dispositivos, aproximadamente o 15% dos cambios están relacionados coa actualización de código específico de arquitecturas de hardware, o 10% están relacionados coa pila de rede, o 5% están relacionados con sistemas de ficheiros e O 3% están relacionados con subsistemas do núcleo interno.

Principais novidades no núcleo 6.3:

  • Servizos de memoria e sistema
    • Realizouse unha limpeza significativa do código asociado a placas ARM antigas e non utilizadas, o que permitiu reducir o tamaño do código fonte do núcleo en 150 mil liñas. Elimináronse máis de 40 plataformas ARM antigas.
    • Implementouse a posibilidade de crear controladores para dispositivos de entrada cunha interface HID (Human Interface Device), implementada en forma de programas BPF.
    • Continuou a transferencia desde a rama Rust-for-Linux de funcionalidades adicionais relacionadas co uso da linguaxe Rust como segunda lingua para desenvolver controladores e módulos do núcleo. O soporte de Rust non está activado de forma predeterminada e non fai que Rust se inclúa como unha dependencia obrigatoria da construción do núcleo. A funcionalidade ofrecida en versións anteriores ampliouse para admitir os tipos Arc (implementación de punteiros cun reconto de referencias), ScopeGuard (limpeza ao saír do ámbito) e ForeignOwnable (ofrece movemento de punteiros entre o código C e Rust). O módulo "préstamo" (tipo "Cow" e o trazo "ToOwned") foi eliminado do paquete "alloc". Nótase que o estado do soporte de Rust no núcleo xa está preto de comezar a aceptar os primeiros módulos escritos en Rust no núcleo.
    • Linux en modo usuario (executando o núcleo como proceso de usuario) en sistemas x86-64 implementa soporte para código escrito na linguaxe Rust. Engadiuse compatibilidade para construír Linux en modo usuario usando clang con optimizacións de tempo de ligazón (LTO) habilitadas.
    • Engadida a utilidade hwnoise para rastrexar os atrasos causados ​​polo hardware. As desviacións no tempo de execución das operacións (jitter) determínanse cando o procesamento de interrupcións está desactivado, superando un microsegundo por cada 10 minutos de cálculos.
    • Engadiuse un módulo do núcleo que implementa o benchmark de Dhrystone, que se pode usar para avaliar o rendemento da CPU en configuracións sen compoñentes de espazo de usuario (por exemplo, na fase de portabilidade para novos SoC que só implementan a carga do núcleo).
    • Engadiuse o parámetro da liña de comandos do núcleo "cgroup.memory=nobpf", que desactiva a contabilidade do consumo de memoria para os programas BPF, o que pode ser útil para sistemas con contedores illados.
    • Para os programas BPF, proponse unha implementación da estrutura de datos de árbore vermello-negro, que usa kfunc + kptr (bpf_rbtree_add, bpf_rbtree_remove, bpf_rbtree_first) en lugar de engadir un novo tipo de mapeo.
    • O mecanismo de secuencias reiniciables (rseq, secuencias reiniciables) engadiu a posibilidade de transferir identificadores de execución paralela (ID de simultaneidade do mapa de memoria) aos procesos, identificados co número de CPU. Rseq proporciona un medio para executar rapidamente operacións atómicamente, que, se se interrompen por outro fío, limparanse e inténtase de novo.
    • Os procesadores ARM admiten instrucións SME 2 (Scalable Matrix Extension).
    • Para as arquitecturas s390x e RISC-V RV64, implementouse o soporte para o mecanismo "BPF trampoline", que permite minimizar a sobrecarga ao transferir chamadas entre o kernel e os programas BPF.
    • En sistemas con procesadores baseados na arquitectura RISC-V, implícase o uso de instrucións "ZBB" para acelerar as operacións de cadeas.
    • Para sistemas baseados na arquitectura do conxunto de instrucións LoongArch (utilizado nos procesadores Loongson 3 5000 e que implementan o novo RISC ISA, similar a MIPS e RISC-V), soporte para a aleatorización do espazo de enderezos do núcleo (KASLR), cambios na colocación da memoria do núcleo (relocalización). ), puntos de hardware está implementado mecanismo de parada e kprobe.
    • O mecanismo DAMOS (Data Access Monitoring-based Operation Schemes), que permite liberar memoria en función da frecuencia de acceso á memoria, admite filtros para excluír determinadas áreas de memoria do procesamento en DAMOS.
    • A biblioteca C estándar mínimo de Nolibc ofrece soporte para a arquitectura s390 e o conxunto de instrucións Arm Thumb1 (ademais de soporte para ARM, AArch64, i386, x86_64, RISC-V e MIPS).
    • Objtool optimizouse para acelerar a montaxe do núcleo e reducir o consumo máximo de memoria durante a montaxe (ao construír o núcleo en modo "allyesconfig", agora non hai problemas coa terminación forzada dos procesos en sistemas con 32 GB de RAM).
    • O soporte para a montaxe do núcleo por parte do compilador Intel ICC foi descontinuado, que estivo inoperativo durante moito tempo e ninguén expresou o seu desexo de solucionalo.
  • Subsistema de disco, E/S e sistemas de ficheiros
    • tmpfs implementa soporte para mapear ID de usuario de sistemas de ficheiros montados, usado para facer coincidir os ficheiros dun usuario específico nunha partición externa montada con outro usuario do sistema actual.
    • En Btrfs, para reducir a fragmentación dos grupos de bloques, as extensións divídense por tamaño ao asignar bloques, é dicir. calquera grupo de bloques está agora limitado a pequenos (ata 128KB), medianos (ata 8 MB) e grandes extensións. A implementación de raid56 foi refactorizada. Reelaborouse o código para comprobar as sumas de verificación. Realizáronse optimizacións de rendemento para acelerar a operación de envío ata 10 veces almacenando en caché o tempo de uso dos directorios e executando comandos só cando sexa necesario. As operacións de Fiemap son agora tres veces máis rápidas ao omitir as comprobacións de backlink para os datos compartidos (instantáneas). As operacións con metadatos aceleráronse nun 10% ao optimizar a busca de claves nas estruturas b-tree.
    • O rendemento do sistema de ficheiros ext4 foi mellorado ao permitir que varios procesos realicen simultaneamente operacións de E/S directas en bloques pre-asignados mediante bloqueos de inodos compartidos en lugar de bloqueos exclusivos.
    • En f2fs, traballouse para mellorar a lexibilidade do código. Resolveuse problemas importantes relacionados coas escrituras atómicas e a nova caché de extensión.
    • O sistema de ficheiros EROFS (Enhanced Read-Only File System), deseñado para o seu uso en particións de só lectura, implementa a capacidade de vincular as operacións de descompresión de contidos de ficheiros comprimidos á CPU para reducir a latencia ao acceder aos datos.
    • O programador de E/S BFQ engadiu compatibilidade con unidades de disco xiratorias avanzadas, como as que usan varias unidades de cabeza controladas por separado (actuadores múltiples).
    • Engadiuse soporte para o cifrado de datos mediante o algoritmo AES-SHA2 á implementación do servidor e do cliente NFS.
    • Engadiuse soporte ao mecanismo de expansión de consulta ao subsistema FUSE (Filesystems In User Space), o que permite colocar información adicional na consulta. Con base nesta característica, é posible engadir identificadores de grupo á solicitude FS, que son necesarios para ter en conta os dereitos de acceso ao crear obxectos no FS (create, mkdir, symlink, mknod).
  • Virtualización e seguridade
    • O hipervisor KVM para sistemas x86 engadiu soporte para as hiperchamadas estendidas de Hyper-V e proporcionou o seu reenvío a un controlador que se executa no entorno do host no espazo do usuario. O cambio permitiu implementar soporte para o lanzamento anidado do hipervisor Hyper-V.
    • KVM facilita restrinxir o acceso dos hóspedes aos eventos da PMU (Performance Monitor Unit) relacionados coa medición do rendemento.
    • O mecanismo memfd, que permite identificar unha área de memoria mediante un descritor de ficheiros transferido entre procesos, engadiu a posibilidade de crear áreas nas que a execución de código está prohibida (memfd non executable) e é imposible establecer dereitos de execución no futuro. .
    • Engadiuse unha nova operación prctl PR_SET_MDWE que bloquea os intentos de habilitar dereitos de acceso á memoria que permiten simultaneamente a escritura e a execución.
    • A protección contra ataques da clase Spectre engadiuse e habilitouse por defecto, baseándose no modo automático IBRS (Enhanced Indirect Branch Restricted Speculation) proposto nos procesadores AMD Zen 4, que permite permitir e desactivar de forma adaptativa a execución especulativa de instrucións durante o procesamento de interrupcións, chamadas ao sistema e cambios de contexto. A protección proposta resulta nunha menor sobrecarga en comparación coa protección de Retpoline.
    • Corrixiuse unha vulnerabilidade que permitía evitar a protección contra ataques Spectre v2 cando se utilizaba tecnoloxía multi-threading simultánea (SMT ou Hyper-Threading) e causada pola desactivación do mecanismo STIBP (Single Thread Indirect Branch Predictors) ao seleccionar o modo de protección IBRS.
    • Para os sistemas baseados na arquitectura ARM64, engadiuse un novo obxectivo de montaxe "virtconfig", cando se selecciona, só se activa o conxunto mínimo de compoñentes do núcleo necesarios para arrincar nos sistemas de virtualización.
    • Para a arquitectura m68k, engadiuse soporte para filtrar chamadas ao sistema mediante o mecanismo seccomp.
    • Engadiuse compatibilidade para dispositivos CRB TPM2 (Command Response Buffer) integrados nos procesadores AMD Ryzen, baseados na tecnoloxía Microsoft Pluton.
  • Subsistema de rede
    • Engadiuse unha interface netlink para configurar a subcapa PLCA (Physical Layer Collision Avoidance), definida na especificación IEEE 802.3cg-2019 e utilizada en redes Ethernet 802.3cg (10Base-T1S) optimizadas para conectar dispositivos de Internet das cousas e sistemas industriais. O uso de PLCA mellora o rendemento en redes Ethernet con medios compartidos.
    • A compatibilidade coa API de "extensións sen fíos" para xestionar as interfaces sen fíos WiFi 7 (802.11be) foi descontinuada xa que esta API non cobre todas as configuracións necesarias. Cando se intente utilizar a API de "extensións sen fíos", que segue sendo compatible como capa emulada, agora aparecerá unha advertencia para a maioría dos dispositivos actuais.
    • Preparouse documentación detallada sobre a API de netlink (para desenvolvedores principais e para desenvolvedores de aplicacións de espazo de usuario). Implementouse a utilidade ynl-gen-c para xerar código C baseado nas especificacións YAML do protocolo Netlink.
    • Engadiuse a compatibilidade coa opción IP_LOCAL_PORT_RANGE aos sockets de rede para simplificar a configuración das conexións de saída mediante tradutores de enderezos sen utilizar SNAT. Cando se usa un enderezo IP en varios hosts, IP_LOCAL_PORT_RANGE fai posible utilizar un rango diferente de portos de rede de saída en cada host e reenviar paquetes en función dos números de porto da pasarela.
    • Para MPTCP (MultiPath TCP), implementouse a capacidade de procesar fluxos mixtos utilizando os protocolos IPv4 e IPv6. MPTCP é unha extensión do protocolo TCP para organizar o funcionamento dunha conexión TCP coa entrega de paquetes simultaneamente ao longo de varias rutas a través de diferentes interfaces de rede asociadas a diferentes enderezos IP.
    • Para IPv4, é posible utilizar a extensión BIG TCP, que permite aumentar o tamaño máximo do paquete TCP a 4 GB para optimizar o funcionamento das redes internas de centros de datos de alta velocidade. Un aumento similar no tamaño do paquete cun tamaño de campo de cabeceira de 16 bits conséguese mediante a implementación de paquetes "jumbo", cuxo tamaño na cabeceira IP está configurado en 0 e o tamaño real transmítese nun separado de 32 bits. campo nunha cabeceira anexa separada.
    • Engadiuse un novo parámetro sysctl default_rps_mask, a través do cal pode establecer a configuración predeterminada RPS (Receive Packet Steering), que se encarga de distribuír o procesamento do tráfico entrante entre os núcleos da CPU a nivel de controlador de interrupcións.
    • Descontinuouse o soporte para disciplinas de procesamento de filas para limitar o tráfico CBQ (cola baseada en clases), ATM (circuítos virtuais ATM), dsmark (marcador de servizo diferenciado), tcindex (índice de control de tráfico) e RSVP (protocolo de reserva de recursos). Estas disciplinas levan moito tempo abandonadas e non había ninguén disposto a continuar co seu apoio.
  • Оборудование
    • Elimináronse todos os controladores de gráficos baseados en DRI1: i810 (tarxetas gráficas Intel 8xx integradas máis antigas), mga (GPU Matrox), r128 (GPU ATI Rage 128, incluídas as tarxetas Rage Fury, XPERT 99 e XPERT 128), savage (GPU S3 Savage), sis (Crusty SiS GPU), tdfx (3dfx Voodoo) e via (VIA IGP), que quedaron obsoletos en 2016 e que non se admitían en Mesa desde 2012.
    • Elimináronse os controladores de framebuffer legados (fbdev) omap1, s3c2410, tmiofb e w100fb.
    • Engadiuse un controlador DRM para as unidades VPU (Unidade de procesamento versátil) integradas na CPU Intel Meteor Lake (14ª xeración), deseñadas para acelerar as operacións relacionadas coa visión por ordenador e a aprendizaxe automática. O controlador está implementado mediante o subsistema "accel", destinado a proporcionar soporte para aceleradores computacionais, que poden proporcionarse en forma de ASIC individuais ou como bloques IP dentro do SoC e da GPU.
    • O controlador i915 (Intel) amplía a compatibilidade con tarxetas gráficas Intel Arc (DG2/Alchemist) discretas, ofrece soporte preliminar para GPU Meteor Lake e inclúe compatibilidade con GPU Intel Xe HP 4tile.
    • O controlador amdgpu engade compatibilidade coa tecnoloxía AdaptiveSync e a posibilidade de usar o modo de visualización segura con varias pantallas. Compatibilidade actualizada para DCN 3.2 (Display Core Next), SR-IOV RAS, VCN RAS, SMU 13.x e DP 2.1.
    • O controlador msm (Qualcomm Adreno GPU) engadiu soporte para as plataformas SM8350, SM8450 SM8550, SDM845 e SC8280XP.
    • O controlador Nouveau xa non admite chamadas antigas de ioctl.
    • Engadiuse soporte experimental para NPU VerSilicon (Procesador de rede neuronal VeriSilicon) ao controlador etnaviv.
    • Implementouse o controlador pata_parport para as unidades IDE conectadas a través dun porto paralelo. O controlador engadido permitiunos eliminar o antigo controlador PARIDE do núcleo e modernizar o subsistema ATA. Unha limitación do novo controlador é a imposibilidade de conectar simultaneamente unha impresora e un disco a través do porto paralelo.
    • Engadiuse o controlador ath12k para tarxetas sen fíos en chips Qualcomm compatibles con Wi-Fi 7. Engadido soporte para tarxetas sen fíos nos chips RealTek RTL8188EU.
    • Engadido soporte para 46 placas con procesadores baseados na arquitectura ARM64, incluíndo Samsung Galaxy tab A (2015), Samsung Galaxy S5, BananaPi R3, Debix Model A, EmbedFire LubanCat 1/2, Facebook Greatlakes, Orange Pi R1 Plus, Tesla FSD e tamén dispositivos baseados en SoC Qualcomm MSM8953 (Snapdragon 610), SM8550 (Snapdragon 8 Gen 2), SDM450 e SDM632, Rockchips RK3128 TV box, RV1126 Vision, RK3588, RK3568, RK3566, RK3588, RK3328 e RK3 /AM642 654/ AM68/AM69).

Ao mesmo tempo, a Latin American Free Software Foundation formou unha versión do kernel 6.3 completamente gratuíto - Linux-libre 6.3-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. Na versión 6.3, limpáronse os blobs nos novos controladores ath12k, aw88395 e peb2466, así como nos novos ficheiros da árbore de dispositivos para dispositivos qcom baseados na arquitectura AArch64. Código de limpeza de blob actualizado en controladores e subsistemas amdgpu, xhci-rcar, qcom-q6v5-pas, sp8870, av7110, así como en controladores para tarxetas DVB con decodificación de software e en ficheiros BPF precompilados. A limpeza dos controladores mga, r128, tm6000, cpia2 e r8188eu detívose desde que foron eliminados do núcleo. Limpeza de manchas do controlador i915 mellorada.

Fonte: opennet.ru

Engadir un comentario