Lanzamiento del núcleo de Linux 6.7

Luego de dos meses de desarrollo, Linus Torvalds presentó el lanzamiento del kernel Linux 6.7. Entre los cambios más notables: integración del sistema de archivos Bcachefs, interrupción del soporte para la arquitectura Itanium, la capacidad de Nouvea para trabajar con firmware GSP-R, soporte para cifrado TLS en NVMe-TCP, la capacidad de usar excepciones en BPF, soporte para futex en io_uring, optimización del rendimiento del programador fq (Fair Queuing), soporte para la extensión TCP-AO (opción de autenticación TCP) y la capacidad de restringir las conexiones de red en el mecanismo de seguridad Landlock, control de acceso agregado al espacio de nombres de usuario e io_uring a través de AppArmor.

La nueva versión incluye 18405 correcciones de 2066 desarrolladores, el tamaño del parche es de 72 MB (los cambios afectaron a 13467 archivos, se agregaron 906147 líneas de código y se eliminaron 341048 líneas). La última versión tuvo 15291 correcciones de 2058 desarrolladores, el tamaño del parche fue de 39 MB. Aproximadamente el 45% de todos los cambios introducidos en 6.7 están relacionados con controladores de dispositivos, aproximadamente el 14% de los cambios están relacionados con la actualización de código específico para arquitecturas de hardware, el 13% están relacionados con la pila de red, el 5% están relacionados con sistemas de archivos y el 3% están relacionados con los subsistemas internos del kernel.

Innovaciones clave en el kernel 6.7:

  • Subsistema de disco, E/S y sistemas de archivos
    • El kernel adopta el código del sistema de archivos Bcachefs, que intenta lograr el rendimiento, confiabilidad y escalabilidad de XFS, combinado con elementos de funcionalidad avanzada que se encuentran en Btrfs y ZFS. Por ejemplo, Bcachefs admite funciones como la inclusión de varios dispositivos en una partición, diseños de unidades de varias capas (la capa inferior con datos de uso frecuente basados ​​en SSD rápidos y la capa superior con datos de discos duros menos utilizados), replicación (RAID 1/10), almacenamiento en caché, compresión de datos transparente (modos LZ4, gzip y ZSTD), cortes de estado (instantáneas), verificación de integridad mediante sumas de verificación, capacidad de almacenar códigos de corrección de errores Reed-Solomon (RAID 5/6), almacenamiento de información en forma cifrada (se utilizan ChaCha20 y Poly1305). En términos de rendimiento, Bcachefs está por delante de Btrfs y otros sistemas de archivos basados ​​en el mecanismo de copia en escritura y demuestra una velocidad de funcionamiento cercana a Ext4 y XFS.
    • El sistema de archivos Btrfs introduce un modo de cuota simplificado que le permite lograr un mayor rendimiento al rastrear las extensiones solo en la subpartición en la que se crean, lo que simplifica significativamente los cálculos y mejora el rendimiento, pero no le permite tener en cuenta las extensiones compartidas en varios. subparticiones.
    • Btrfs ha agregado una nueva estructura de datos de "árbol de rayas", adecuada para el mapeo de extensiones lógicas en situaciones donde las asignaciones físicas no coinciden entre dispositivos. La estructura se utiliza actualmente en implementaciones de RAID0 y RAID1 para dispositivos de bloques zonificados. En el futuro, planean utilizar esta estructura en RAID de nivel superior, lo que resolverá una serie de problemas existentes en la implementación actual.
    • El sistema de archivos Ceph implementa soporte para mapear ID de usuario de sistemas de archivos montados, utilizados para hacer coincidir los archivos de un usuario específico en una partición externa montada con otro usuario en el sistema actual.
    • Se agregó la capacidad de especificar uid y gid en el montaje de efivarfs para permitir que los procesos no raíz cambien las variables UEFI.
    • Se agregaron llamadas ioctl a exFAT para leer y cambiar atributos de FS. Manejo agregado de directorios de tamaño cero.
    • F2FS implementa la capacidad de utilizar bloques de 16K.
    • El mecanismo de montaje automático de autofs se ha cambiado para utilizar la nueva API de montaje de particiones.
    • OverlayFS ofrece opciones de montaje "lowerdir+" y "datadir+". Se agregó soporte para el montaje anidado de OverlayFS con xattrs.
    • XFS ha optimizado la carga de la CPU en el código de asignación de bloques en tiempo real. Se proporciona la capacidad de realizar simultáneamente operaciones de lectura y FICLONE.
    • El código EXT2 se ha convertido para utilizar folios de páginas.
  • Servicios de memoria y sistema.
    • Se suspendió el soporte para la arquitectura ia64 utilizada en los procesadores Intel Itanium, que se suspendieron por completo en 2021. Intel introdujo los procesadores Itanium en 2001, pero la arquitectura ia64 no pudo competir con AMD64, principalmente debido al mayor rendimiento de AMD64 y la transición más fluida desde los procesadores x32 de 86 bits. Como resultado, los intereses de Intel se desplazaron a favor de los procesadores x86-64, y el lote de Itanium siguió siendo los servidores HP Integrity, cuyos pedidos se detuvieron hace tres años. El código para el soporte ia64 se eliminó del kernel principalmente debido a la falta de soporte a largo plazo para esta plataforma, mientras que Linus Torvalds expresó su voluntad de devolver el soporte ia64 al kernel, pero solo si hay un mantenedor que pueda demostrar alta calidad. soporte para esta plataforma fuera del kernel principal durante al menos un año.
    • Se agregó el parámetro de comando de línea del kernel “ia32_emulation”, que le permite habilitar o deshabilitar la compatibilidad con la emulación en modo de 32 bits en kernels creados para la arquitectura x86-64 en la etapa de arranque. En el aspecto práctico, la nueva opción le permite construir el kernel con soporte para compatibilidad con aplicaciones de 32 bits, pero deshabilite este modo de forma predeterminada para reducir el vector de ataque al kernel, ya que la API de compatibilidad está menos probada que el kernel principal. interfaces.
    • Migración continua de cambios de la rama Rust-para-Linux relacionados con el uso del lenguaje Rust como segundo lenguaje para desarrollar controladores y módulos del kernel (el soporte de Rust no está activo por defecto y no conduce a la inclusión de Rust entre los dependencias de ensamblaje requeridas para el kernel). La nueva versión hace la transición al uso de la versión Rust 1.73 y ofrece un conjunto de enlaces para trabajar con colas de trabajo.
    • Es posible utilizar el mecanismo binfmt_misc para agregar soporte para nuevos formatos de archivos ejecutables (por ejemplo, para ejecutar aplicaciones Java o Python compiladas) dentro de espacios de nombres separados y sin privilegios.
    • El cpuset del controlador de cgroup, que le permite controlar el uso de los núcleos de la CPU al ejecutar una tarea, proporciona una división en particiones locales y remotas, que difieren en si el cgroup principal es la sección raíz correcta o no. También se han agregado nuevas configuraciones “cpuset.cpus.exclusive” y “cpuset.cpus.excluisve. Effective” a cpuset para el enlace exclusivo de la CPU.
    • El subsistema BPF implementa soporte para excepciones, que se procesan como una salida de emergencia de un programa BPF con la capacidad de desenredar marcos de pila de forma segura. Además, los programas BPF permiten el uso de punteros kptr en conexión con la CPU.
    • Se agregó soporte para operaciones con futex al subsistema io_uring y se implementaron nuevas operaciones: IORING_OP_WAITID (versión asíncrona de waitid), SOCKET_URING_OP_GETSOCKOPT (opción getsockoptand), SOCKET_URING_OP_SETSOCKOPT (opción setsockopt) e IORING_OP_READ_MULTISHOT (múltiples operaciones de lectura que no se detienen mientras hay datos o el buffer no está lleno).
    • Se agregó la implementación de colas FIFO livianas de conexión única que requieren un bloqueo de giro solo para quitar la cola en un contexto de proceso y prescinden de un bloqueo de giro para adiciones atómicas a la cola en cualquier contexto.
    • Se agregó un búfer circular "objpool" con una implementación escalable de una cola de alto rendimiento para asignar y devolver objetos.
    • La parte inicial de los cambios se agregó para implementar la nueva API futex2, que tiene un mejor rendimiento en sistemas NUMA, admite tamaños distintos de 32 bits y se puede usar en lugar de la llamada al sistema futex() multiplexada.
    • Para las arquitecturas ARM32 y S390x, se agregó compatibilidad con el conjunto actual (cpuv4) de instrucciones BPF.
    • Para la arquitectura RISC-V, es posible utilizar el modo de verificación Shadow-Call Stack disponible en Clang 17, diseñado para proteger contra la sobrescritura de la dirección de retorno de una función en caso de un desbordamiento del búfer en la pila. La esencia de la protección es guardar la dirección de retorno en una pila "sombra" separada después de transferir el control a una función y recuperar esta dirección antes de salir de la función.
    • Se ha agregado un nuevo modo de escaneo de páginas de memoria inteligente al mecanismo para fusionar páginas de memoria idénticas (KSM: Kernel Samepage Merging), que rastrea las páginas escaneadas sin éxito y reduce la intensidad de su reescaneo. Para habilitar el nuevo modo, se agregó la configuración /sys/kernel/mm/ksm/smart_scan.
    • Se agregó un nuevo comando ioctl PAGEMAP_SCAN que, cuando se usa con userfaultfd(), le permite determinar los hechos de escritura en un rango de memoria específico. La nueva función, por ejemplo, se puede utilizar en el sistema para guardar y restaurar el estado de los procesos CRIU o en los sistemas antitrampas del juego.
    • En el sistema ensamblador, si el compilador Clang está disponible, el ensamblaje de ejemplos de uso del subsistema perf, escritos como programas BPF, está habilitado de forma predeterminada.
    • Se eliminó la antigua capa videobuf, que se usaba para administrar framebuffers en el subsistema de medios y fue reemplazada por una nueva implementación de videobuf10 hace más de 2 años.
  • Virtualización y seguridad
    • Se ha agregado al subsistema fscrypt la capacidad de cifrar datos en bloques más pequeños que el tamaño del bloque en el sistema de archivos. Esto puede ser necesario para habilitar mecanismos de cifrado de hardware que solo admitan bloques pequeños (por ejemplo, los controladores UFS que solo admiten un tamaño de bloque 4096 se pueden usar con un sistema de archivos con un tamaño de bloque de 16 K).
    • El subsistema "iommufd", que le permite administrar tablas de páginas de memoria IOMMU (Unidad de administración de memoria de E/S) a través de descriptores de archivos desde el espacio del usuario, ha agregado un seguimiento de los datos que aún no se han eliminado del caché (sucios) para DMA. operaciones, lo cual es necesario para determinar la memoria con datos no vaciados durante la migración del proceso.
    • Se agregó soporte para definir reglas de control de acceso para sockets TCP al mecanismo Landlock, lo que le permite limitar la interacción de un grupo de procesos con el entorno externo. Por ejemplo, puede crear una regla que solo permita el acceso al puerto de red 443 para establecer conexiones HTTPS.
    • El subsistema AppArmor ha agregado la capacidad de controlar el acceso al mecanismo io_uring y crear espacios de nombres de usuario, lo que le permite permitir selectivamente el acceso a estas capacidades solo a ciertos procesos.
    • Se agregó API de certificación de máquina virtual para verificar la integridad del proceso de inicio de la máquina virtual.
    • Los sistemas LoongArch admiten la virtualización mediante el hipervisor KVM.
    • Cuando se utiliza el hipervisor KVM en sistemas RISC-V, ha aparecido soporte para la extensión Smstateen, que bloquea el acceso de la máquina virtual a registros de CPU que no son admitidos explícitamente por el hipervisor. También se agregó soporte para el uso de la extensión Zicond en sistemas invitados, que permite el uso de algunas operaciones con enteros condicionales.
    • En sistemas invitados basados ​​en x86 que se ejecutan bajo KVM, se permiten hasta 4096 CPU virtuales.
  • Subsistema de red
    • El controlador NVMe-TCP (NVMe over TCP), que le permite acceder a unidades NVMe a través de la red (NVM Express over Fabrics) usando el protocolo TCP, ha agregado soporte para cifrar el canal de transmisión de datos usando TLS (usando KTLS y un proceso en segundo plano). en el espacio de usuario tlshd para negociación de conexión).
    • Se optimizó el rendimiento del programador de paquetes fq (Fair Queuing), lo que permitió aumentar el rendimiento en un 5% bajo cargas pesadas en la prueba tcp_rr (Solicitud/Respuesta TCP) y en un 13% con un flujo ilimitado de paquetes UDP.
    • TCP agrega una capacidad opcional de marca de tiempo con precisión de microsegundos (TCP TS) (RFC 7323), que permite una estimación de latencia más precisa y módulos de control de congestión más avanzados. Para habilitarlo, puede usar el comando "ip route add 10/8...features tcp_usec_ts".
    • La pila TCP ha agregado soporte para la extensión TCP-AO (TCP Authentication Option, RFC 5925), que permite verificar los encabezados TCP utilizando códigos MAC (Message Authentication Code), utilizando algoritmos más modernos HMAC-SHA1 y CMAC-AES- 128 en lugar de la opción TCP-MD5 previamente disponible basada en el algoritmo MD5 heredado.
    • Se ha agregado un nuevo tipo de dispositivos de red virtuales "netkit", cuya lógica de transferencia de datos se configura mediante un programa BPF.
    • KSMBD, una implementación a nivel de kernel de un servidor SMB, ha agregado soporte para resolver nombres de archivos que contienen pares sustitutos de caracteres compuestos.
    • NFS ha mejorado la implementación de subprocesos con servicios RPC. Se agregó soporte para delegación de escritura (para NFSv4.1+). NFSD ha agregado soporte para el controlador netlink rpc_status. Soporte mejorado para clientes NFSv4.x al reexportar a knfsd.
  • Equipo
    • Se agregó soporte inicial para el firmware GSP-RM al módulo del kernel Nouveau, que se utiliza en la GPU NVIDIA RTX 20+ para mover las operaciones de inicialización y control de la GPU al lado de un microcontrolador GSP (procesador del sistema GPU) separado. La compatibilidad con GSP-RM permite que el controlador Nouveau funcione a través de llamadas de firmware, en lugar de programar directamente interacciones de hardware, lo que hace que sea mucho más fácil agregar soporte para nuevas GPU NVIDIA mediante el uso de llamadas prediseñadas para inicialización y administración de energía.
    • El controlador AMDGPU es compatible con GC 11.5, NBIO 7.11, SMU 14, SMU 13.0 OD, DCN 3.5, VPE 6.1 y DML2. Soporte mejorado para carga fluida (sin parpadeos al cambiar el modo de video).
    • El controlador i915 agrega soporte para chips Intel Meteor Lake y agrega una implementación inicial de Intel LunarLake (Xe 2).
    • Se agregó soporte para canales de transmisión asimétricos agregados a la especificación USB4 v2 (120/40G).
    • Se agregó soporte para ARM SoC: Qualcomm Snapdragon 720G (usado en teléfonos inteligentes Xiaomi), AMD Pensando Elba, Renesas, R8A779F4 (R-Car S4-8), USRobotics USR8200 (usado en enrutadores y NAS).
    • Se agregó soporte para el teléfono inteligente Fairphone 5 y las placas ARM Orange Pi 5, QuartzPro64, Turing RK1, Variscite MX6, BigTreeTech CB1, Freescale LX2162, Google Spherion, Google Hayato, Genio 1200 EVK, RK3566 Powkiddy RGB30.
    • Se agregó soporte para placas RISC-V Milk-V Pioneer y Milk-V Duo.
    • Se agregó soporte para interfaces de sonido de computadoras portátiles HUAWEI equipadas con CPU AMD. Se agregó soporte para parlantes adicionales instalados en computadoras portátiles Dell Oasis 13/14/16. Se agregó soporte para parlantes integrados ASUS K6500ZC. Se agregó soporte para el indicador de silencio en las computadoras portátiles HP 255 G8 y G10. Se agregó soporte para controladores de audio acp6.3. Se agregó soporte para las interfaces de grabación profesionales Focusrite Clarett+ 2Pre y 4Pre.

Al mismo tiempo, la Fundación Latinoamericana de Software Libre creó una versión del kernel 6.7 completamente libre - Linux-libre 6.7-gnu, libre de elementos de firmware y controladores que contienen componentes o secciones de código no libres, cuyo alcance es limitado. por el fabricante. En la versión 6.7, el código de limpieza de blobs se actualizó en varios controladores y subsistemas, por ejemplo, en los controladores amdgpu, nouveau, adreno, mwifiex, mt7988, ath11k, avs y btqca. El código para limpiar los controladores localtalk y rtl8192u se eliminó debido a su exclusión del kernel. Se eliminaron componentes innecesarios para limpiar los controladores xhci-pci, rtl8xxxu y rtw8822b, agregados anteriormente por error. Se limpiaron los nombres de blobs en archivos dts para la arquitectura Aarch64. Se eliminaron blobs en los nuevos controladores mt7925, tps6598x, aw87390 y aw88399.

Fuente: opennet.ru

Añadir un comentario