Versión do núcleo de Linux 5.18

Despois de dous meses de desenvolvemento, Linus Torvalds presentou o lanzamento do kernel Linux 5.18. Entre os cambios máis salientables: realizouse unha limpeza importante de funcionalidades obsoletas, o FS de Reiserfs foi declarado obsoleto, implementáronse eventos de rastrexo de procesos de usuario, engadiuse soporte para o mecanismo de bloqueo de exploits de Intel IBT, habilitouse un modo de detección de desbordamento de búfer cando usando a función memcpy (), engadiuse un mecanismo para rastrexar as chamadas de funcións fprobe, mellorouse o rendemento do planificador de tarefas nas CPU AMD Zen, incluíuse un controlador para xestionar a funcionalidade da CPU Intel (SDS), integráronse algúns parches para a reestruturación de ficheiros de cabeceira e aprobouse o uso da norma C11.

A nova versión inclúe 16206 correccións de 2127 desenvolvedores (na última versión había 14203 correccións de 1995 desenvolvedores), o tamaño do parche é de 108 MB (os cambios afectaron a 14235 ficheiros, engadíronse 1340982 liñas de código, elimináronse 593836 liñas). Aproximadamente o 44% de todos os cambios introducidos na versión 5.18 están relacionados con controladores de dispositivos, aproximadamente o 16% dos cambios están relacionados coa actualización de código específico de arquitecturas de hardware, o 11% 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 5.18:

  • Subsistema de disco, E/S e sistemas de ficheiros
    • O sistema de ficheiros Btrfs engadiu soporte para reenviar datos comprimidos ao realizar operacións de envío e recepción. Anteriormente, ao usar enviar/recibir, o lado emisor descomprimiu os datos almacenados en forma comprimida e o lado receptor recomprimiunos antes de escribilos. No kernel 5.18, as aplicacións de espazo de usuario que usaban chamadas de envío/recibir tiñan a posibilidade de transmitir datos comprimidos sen reempaquetar. A funcionalidade está implementada grazas ás novas operacións ioctl BTRFS_IOC_ENCODED_READ e BTRFS_IOC_ENCODED_WRITE, que permiten ler e escribir información directamente en extensións.

      Ademais, Btrfs mellora o rendemento de fsync. Engadiuse a posibilidade de deduplicar e realizar reflink (clonar metadatos de ficheiros creando unha ligazón aos datos existentes sen copialos) para todo o almacenamento, sen limitarse aos puntos de montaxe.

    • No modo de E/S directa, é posible acceder aos ficheiros cifrados cando fscrypt utiliza o cifrado en liña, no que as operacións de cifrado e descifrado son realizadas polo controlador da unidade en lugar do núcleo. Co cifrado normal do núcleo, o acceso aos ficheiros cifrados usando Direct I/O aínda é imposible, xa que se accede aos ficheiros sen pasar polo mecanismo de almacenamento no búfer do núcleo.
    • O servidor NFS inclúe soporte para o protocolo NFSv3 de forma predeterminada, que agora non require unha activación separada e está dispoñible cando NFS está activado en xeral. Considérase que NFSv3 é a versión principal e sempre compatible de NFS, e o soporte para NFSv2 pode quedar descontinuado no futuro. Mellorouse significativamente a eficiencia da lectura do contido do directorio.
    • O sistema de ficheiros ReiserFS quedou en desuso e espérase que se elimine en 2025. O abandono de ReiserFS reducirá o esforzo necesario para manter os cambios no sistema de ficheiros relacionados coa compatibilidade coa nova API para montaxe, iomap e tomes.
    • Para o sistema de ficheiros F2FS, implementouse a capacidade de asignar ID de usuario dos sistemas de ficheiros montados, que se usa para comparar os ficheiros dun usuario específico nunha partición externa montada con outro usuario do sistema actual.
    • Reelaborouse o código para calcular estatísticas nos manejadores do mapeador de dispositivos, o que mellorou significativamente a precisión da contabilidade en manejadores como dm-crypt.
    • Os dispositivos NVMe agora admiten sumas de comprobación de 64 bits para a comprobación da integridade.
    • Para o sistema de ficheiros exfat, propúxose unha nova opción de montaxe "keep_last_dots", que desactiva borrar os puntos ao final do nome do ficheiro (en Windows, os puntos ao final do nome do ficheiro son eliminados por defecto).
    • EXT4 mellora o rendemento do modo fast_commit e aumenta a escalabilidade. A opción de montaxe "mb_optimize_scan", que permite aumentar o rendemento en condicións de gran fragmentación do sistema de ficheiros, está adaptada para traballar con ficheiros con extensións.
    • O soporte para fluxos de escritura no subsistema que admite dispositivos de bloque foi descontinuado. Esta función propúxose para SSD, pero non estaba moi estendida e actualmente non hai dispositivos en uso que admitan este modo e é pouco probable que aparezan no futuro.
  • Servizos de memoria e sistema
    • Comezou a integración dun conxunto de parches, o que permite reducir significativamente o tempo de reconstrución do núcleo reestruturando a xerarquía dos ficheiros de cabeceira e reducindo o número de dependencias cruzadas. O núcleo 5.18 inclúe parches que optimizan a estrutura dos ficheiros de cabeceira do planificador de tarefas (kernel/sched). En comparación coa versión anterior, o consumo de tempo da CPU ao montar o código kernel/sched/ reduciuse nun 61% e o tempo real diminuíu nun 3.9% (de 2.95 a 2.84 seg).
    • O código do núcleo pode usar o estándar C11, publicado en 2011. Anteriormente, o código engadido ao núcleo tiña que cumprir coa especificación ANSI C (C89), creada en 1989. Nos scripts de compilación do núcleo 5.18, a opción '—std=gnu89' substitúese por '—std=gnu11 -Wno-shift-negative-value'. Considerouse a posibilidade de utilizar o estándar C17, pero neste caso sería necesario aumentar a versión mínima compatible de GCC, mentres que a inclusión do soporte C11 encádrase nos requisitos actuais para a versión GCC (5.1).
    • Mellorouse o rendemento da programación de tarefas nos procesadores AMD con microarquitectura Zen, que proporcionan múltiples caché de último nivel (LLC) para cada nodo con canles de memoria locais. A nova versión elimina o desequilibrio de LLC entre os nodos NUMA, o que levou a un aumento significativo do rendemento para algúns tipos de carga de traballo.
    • Ampliáronse as ferramentas para rastrexar aplicacións no espazo do usuario. A nova versión do núcleo engade a posibilidade de que os procesos do usuario creen eventos de usuario e escriban datos no búfer de rastrexo, que se pode ver a través de utilidades estándar de rastrexo do núcleo como ftrace e perf. Os eventos de rastrexo do espazo de usuario están illados dos eventos de rastrexo do núcleo. O estado do evento pódese ver a través do ficheiro /sys/kernel/debug/tracing/user_events_status e o rexistro de eventos e a gravación de datos a través do ficheiro /sys/kernel/debug/tracing/user_events_data.
    • Engadiuse un mecanismo para supervisar as chamadas de función (sonda) - fprobe. A API de fprobe baséase en ftrace, pero só está limitada pola capacidade de anexar controladores de devolución de chamada aos puntos de entrada e saída de funcións. A diferenza de kprobes e kretprobes, o novo mecanismo permítelle usar un controlador para varias funcións á vez.
    • Descontinuouse a compatibilidade con procesadores ARM máis antigos (ARMv4 e ARMv5) que non están equipados cunha unidade de xestión de memoria (MMU). Mantense o soporte para sistemas ARMv7-M sen MMU.
    • O soporte para a arquitectura NDS32 tipo RISC utilizada nos procesadores de Andes Technologies foi descontinuado. O código foi eliminado debido á falta de mantemento e á falta de demanda de soporte NDS32 no núcleo principal de Linux (o resto dos usuarios usan compilacións de núcleos especializadas de fabricantes de hardware).
    • Por defecto, a construción do núcleo con soporte para o formato de ficheiro executable a.out está desactivada para as arquitecturas alfa e m68k, que seguen a usar este formato. É probable que o soporte para o formato herdado a.out se elimine por completo do núcleo en breve. Desde 2019 discutíronse os plans para eliminar o formato a.out.
    • A arquitectura PA-RISC ofrece soporte mínimo para o mecanismo vDSO (obxectos dinámicos compartidos virtuais), que proporciona un conxunto limitado de chamadas ao sistema dispoñibles no espazo do usuario sen cambiar de contexto. A compatibilidade con vDSO permitiu implementar a capacidade de executarse cunha pila non executable.
    • Engadido soporte para o mecanismo Intel HFI (Hardware Feedback Interface), que permite ao hardware transmitir información ao núcleo sobre o rendemento actual e a eficiencia enerxética de cada CPU.
    • Engadiuse un controlador para o mecanismo Intel SDSi (Software-Defined Silicon), que permite controlar a inclusión de funcións adicionais no procesador (por exemplo, instrucións especializadas e memoria caché adicional). A idea é que os chips se poidan subministrar a un prezo máis baixo con funcións avanzadas bloqueadas, que despois poden "comprar" e activar capacidades adicionais sen a substitución de hardware do chip.
    • Engadiuse o controlador amd_hsmp para admitir a interface AMD HSMP (Porto de xestión do sistema anfitrión), que proporciona acceso ás funcións de xestión do procesador mediante un conxunto de rexistros especiais que apareceron nos procesadores de servidor AMD EPYC a partir da xeración Fam19h. Por exemplo, a través de HSMP pode obter datos sobre consumo de enerxía e temperatura, establecer límites de frecuencia, activar varios modos de mellora do rendemento e xestionar parámetros de memoria.
    • A interface de E/S asíncrona io_uring implementa a opción IORING_SETUP_SUBMIT_ALL para rexistrar un conxunto de descritores de ficheiros nun búfer de anel, e a operación IORING_OP_MSG_RING para enviar un sinal desde un búfer de anel a outro.
    • O mecanismo DAMOS (Data Access Monitoring-based Operation Schemes), que permite liberar memoria tendo en conta a frecuencia de acceso á memoria, ten capacidades ampliadas para supervisar as operacións de memoria desde o espazo do usuario.
    • Unha terceira serie de parches integrouse coa implementación do concepto de folios de páxinas, que se asemellan ás páxinas compostas, pero teñen unha semántica mellorada e unha organización máis clara do traballo. Usar tomes permítelle acelerar a xestión da memoria nalgúns subsistemas do núcleo. Nos parches propostos, as funcións de xestión da memoria interna traducíronse en folios, incluíndo variacións da función get_user_pages(). Soporte para a creación de grandes volumes en código de lectura anticipada.
    • O sistema de montaxe agora admite as variables de ambiente USERCFLAGS e USERLDFLAGS, coas que pode pasar marcas adicionais ao compilador e ao enlazador.
    • No subsistema eBPF, o mecanismo BTF (BPF Type Format), que proporciona información de verificación de tipos en pseudocódigo BPF, ofrece a posibilidade de engadir anotacións a variables que fan referencia a áreas de memoria no espazo do usuario. As anotacións axudan ao sistema de verificación do código BPF a identificar e verificar mellor os accesos á memoria.
    • Propúxose un novo controlador de asignación de memoria para almacenar programas BPF cargados, que permite un uso máis eficiente da memoria en situacións nas que se carga un gran número de programas BPF.
    • A marca MADV_DONTNEED_LOCKED engadiuse á chamada ao sistema madvise(), que proporciona ferramentas para optimizar a xestión da memoria do proceso, que complementa a marca MADV_DONTNEED existente, a través da cal o núcleo pode ser informado con antelación sobre a liberación inminente dun bloque de memoria, é dicir. que este bloque xa non é necesario e pode ser usado polo núcleo. A diferenza de MADV_DONTNEED, o uso da bandeira MADV_DONTNEED_LOCKED está permitido para as páxinas de memoria fixadas na memoria RAM, que, cando se chama a madvise, son desaloxadas sen modificar o seu estado fixado e, no caso dun acceso posterior ao bloqueo e a xeración dunha "páxina". culpa”, son devoltos coa vinculación conservada. Ademais, engadiuse un cambio para permitir que a marca MADV_DONTNEED se utilice con páxinas de memoria grande en HugeTLB.
  • Virtualización e seguridade
    • Para a arquitectura x86, engadiuse soporte para o mecanismo de protección do fluxo de comandos Intel IBT (Indirect Branch Tracking), que impide o uso de técnicas de construción de exploits mediante técnicas de programación orientadas ao retorno (ROP, Return-Oriented Programming), nas que o exploit fórmase en forma dunha cadea de chamadas xa existentes na memoria de pezas de instrucións de máquina que rematan cunha instrución de retorno de control (por regra xeral, estes son os extremos das funcións). A esencia do método de protección implementado é bloquear as transicións indirectas ao corpo dunha función engadindo unha instrución ENDBR especial ao comezo da función e permitindo a execución dunha transición indirecta só no caso dunha transición a esta instrución (unha instrución indirecta). chamar a través de JMP e CALL sempre debe recaer na instrución ENDBR, que se sitúa nas funcións iniciales).
    • Activouse a comprobación máis estrita dos límites do búfer nas funcións memcpy(), memmove() e memset(), realizada no tempo de compilación cando o modo CONFIG_FORTIFY_SOURCE está activado. O cambio engadido redúcese a comprobar se os elementos das estruturas cuxo tamaño se coñece van máis aló dos límites. Nótese que a característica implementada permitiría bloquear todos os desbordamentos do búfer do núcleo relacionados con memcpy() identificados polo menos nos últimos tres anos.
    • Engadida a segunda parte do código para a implementación actualizada do xerador de números pseudoaleatorios RDRAND, que é responsable do funcionamento dos dispositivos /dev/random e /dev/urandom. A nova implementación destaca por unificar o funcionamento de /dev/random e /dev/urandom, engadir protección contra a aparición de duplicados no fluxo de números aleatorios ao iniciar máquinas virtuais e cambiar a usar a función hash BLAKE2s en lugar de SHA1 para operacións de mestura de entropía. O cambio mellorou a seguridade do xerador de números pseudoaleatorios eliminando o algoritmo SHA1 problemático e eliminando a sobreescritura do vector de inicialización RNG. Dado que o algoritmo BLAKE2s é superior ao SHA1 en rendemento, o seu uso tamén tivo un efecto positivo no rendemento.
    • Para a arquitectura ARM64, engadiuse soporte para un novo algoritmo de autenticación de punteiro: "QARMA3", que é máis rápido que o algoritmo QARMA mantendo o nivel de seguridade adecuado. A tecnoloxía permítelle utilizar instrucións ARM64 especializadas para verificar os enderezos de retorno mediante sinaturas dixitais que se almacenan nos bits superiores non utilizados do propio punteiro.
    • Para a arquitectura ARM64, implementouse soporte para a montaxe coa inclusión en GCC 12 dun modo de protección contra a sobrescritura do enderezo de retorno dunha función en caso de desbordamento do búfer na pila. A esencia da protección é gardar o enderezo de retorno nunha pila "sombra" separada despois de transferir o control a unha función e recuperar este enderezo antes de saír da función.
    • Engadiuse un novo anel de chaves: "máquina", que contén as claves do propietario do sistema (MOK, Chaves do propietario da máquina), compatibles co cargador de arranque shim. Estas chaves pódense usar para asinar dixitalmente os compoñentes do núcleo cargados nunha fase posterior ao arranque (por exemplo, os módulos do núcleo).
    • Eliminouse a compatibilidade con claves privadas asimétricas para TPM, que se ofrecían nunha versión antiga de TPM, tiñan problemas de seguridade coñecidos e non se adoptaron amplamente na práctica.
    • Engadiuse a protección dos datos co tipo size_t contra desbordamentos de enteiros. O código inclúe controladores size_mul(), size_add() e size_sub(), que permiten multiplicar, sumar e restar tamaños con seguridade co tipo size_t.
    • Ao construír o núcleo, as bandeiras "-Warray-bounds" e "-Wzero-length-bounds" están habilitadas, que mostran avisos cando o índice vai máis aló do límite da matriz e cando se usan matrices de lonxitude cero.
    • O dispositivo virtio-crypto engadiu compatibilidade para o cifrado mediante o algoritmo RSA.
  • Subsistema de rede
    • Na implementación de pontes de rede, engadiuse soporte para o modo de vinculación de portos (modo bloqueado), no que o usuario pode enviar tráfico a través do porto só desde un enderezo MAC autorizado. Tamén se engadiu a posibilidade de utilizar varias estruturas para avaliar o estado do protocolo STP (Spanning Tree Protocol). Anteriormente, as VLAN só se podían mapear directamente a STP (1:1), con cada VLAN xestionada de forma independente. A nova versión engade o parámetro mst_enable, cando está activado, o estado das VLAN está controlado polo módulo MST (Multiple Spanning Trees) e a vinculación das VLAN pode corresponder ao modelo M:N.
    • Continuouse o traballo na integración de ferramentas na pila de rede para rastrexar os motivos polos que se soltaron paquetes (códigos de razón). O código de razón envíase cando se libera a memoria asociada ao paquete e permite situacións como o descarte do paquete debido a erros de cabeceira, detección de falsificación de rp_filter, suma de verificación non válida, falta de memoria, regras IPSec XFRM activadas, número de secuencia TCP non válido, etc.
    • É posible transferir paquetes de rede de programas BPF lanzados desde o espazo de usuario no modo BPF_PROG_RUN, no que os programas BPF se executan no núcleo, pero devolve o resultado ao espazo de usuario. Os paquetes transmítense mediante o subsistema XDP (eXpress Data Path). Admítese o modo de procesamento de paquetes en directo, no que o procesador XDP pode redirixir os paquetes de rede sobre a marcha á pila de rede ou a outros dispositivos. Tamén é posible crear xeradores de software de tráfico externo ou substituír tramas de rede na pila de rede.
    • Para os programas BPF conectados a cgroups de rede, propuxéronse funcións auxiliares para establecer explícitamente o valor de retorno das chamadas ao sistema, o que permite transmitir información máis completa sobre os motivos do bloqueo dunha chamada ao sistema.
    • O subsistema XDP (eXpress Data Path) engadiu soporte para paquetes fragmentados colocados en múltiples búfers, o que lle permite procesar tramas Jumbo en XDP e usar TSO/GRO (Descarga de segmentación TCP/Descarga de recepción xenérica) para XDP_REDIRECT.
    • O proceso de eliminación de espazos de nomes de rede acelerouse significativamente, que era demandado nalgúns sistemas grandes cun gran volume de tráfico.
  • Оборудование
    • O controlador amdgpu inclúe de forma predeterminada a tecnoloxía de sincronización adaptativa FreeSync, que che permite axustar a taxa de actualización da información na pantalla, garantindo imaxes suaves e sen lágrimas mentres xogas e miras vídeos. O soporte para GPU Aldebaran anunciouse como estable.
    • O controlador i915 engade soporte para chips Intel Alderlake N e tarxetas gráficas discretas Intel DG2-G12 (Arc Alchemist).
    • O controlador nouveau ofrece soporte para taxas de bits máis altas para interfaces DP/eDP e soporte para extensores de cable lttprs (Link-Training Tunable PHY Repeaters).
    • No subsistema drm (Direct Rendering Manager) nos controladores armada, exynos, gma500, hyperv, imx, ingenic, mcde, mediatek, msm, omap, rcar-du, rockchip, sprd, sti, tegra, tilcdc, xen e vc4. engadiuse nomodeset, que permite desactivar o cambio de modos de vídeo a nivel do núcleo e o uso de ferramentas de aceleración de renderización de hardware, deixando só as funcionalidades relacionadas co framebuffer do sistema.
    • Engadiuse compatibilidade para ARM SoС Qualcomm Snapdragon 625/632 (utilizado en teléfonos intelixentes LG Nexus 5X e Fairphone FP3), Samsung Exynos 850, Samsung Exynos 7885 (usado en Samsung Galaxy A8), Airoha (Mediatek/EcoNet) EN7523, Mediatek mt6582Prestigio PST5008 tableta 3G), Microchip Lan966, Renesas RZ/G2LC, RZ/V2L, Tesla FSD, TI K3/AM62 e i.MXRTxxxx.
    • Engadido soporte para dispositivos ARM e placas de Broadcom (Raspberry Pi Zero 2 W), Qualcomm (Google Herobrine R1 Chromebook, SHIFT6mq, Samsung Galaxy Book2), Rockchip (Pine64 PineNote, Bananapi-R2-Pro, STM32 Emtrion emSBS, Samsung Galaxy Tab S , tableta Prestigio PMT5008 3G), Allwinner (A20-Marsboard), Amlogic (Amediatek X96-AIR, CYX A95XF3-AIR, Haochuangy H96-Max, Amlogic AQ222 e OSMC Vero 4K+), Aspeed (Quanta S6Q, ASMMVE8), Marvell3 / Armada (Ctera C200 V1 e V2 NAS), Mstar (DongShanPiOne, Miyoo Mini), NXP i.MX (Protonic PRT8MM, emCON-MX8M Mini, Toradex Verdin, Gateworks GW7903).
    • Engadido soporte para sistemas de son e códecs AMD PDM, Atmel PDMC, Awinic AW8738, i.MX TLV320AIC31xx, Intel CS35L41, ESSX8336, Mediatek MT8181, nVidia Tegra234, Qualcomm SC7280, Renesas RZ/V2L585M, Texas Instruments. Engadida a implementación inicial do controlador de son para o chip Intel AVS DSP. Actualizou a compatibilidade de controladores para Intel ADL e Tegra234 e realizou cambios para mellorar a compatibilidade de audio en dispositivos Dell, HP, Lenovo, ASUS, Samsung e Clevo.

    Ao mesmo tempo, a Latin American Free Software Foundation formou unha versión do núcleo completamente gratuíto 5.18 - Linux-libre 5.18-gnu, eliminado 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 controladores para paneis MIPI DBI, VPU Amphion, WiFi MediaTek MT7986 WMAC, Mediatek MT7921U (USB) e Realtek 8852a/8852c, chips de son Intel AVS e Texas Instruments TAS5805M. Os ficheiros DTS tamén se limparon para varios SoC Qualcomm con procesadores baseados na arquitectura AArch64. Código de limpeza de blob actualizado en controladores e subsistemas de GPU AMD, MediaTek MT7915, Silicon Labs WF200+ WiFi, Mellanox Spectru Ethernet, Realtek rtw8852c, Qualcomm Q6V5, Wolfson ADSP, MediaTek HCI UART.

Fonte: opennet.ru

Engadir un comentario