- Linus Torvalds lanzó el kernel 6.11
- Su mensaje: "Una vez más estoy de viaje y no estoy en mi zona horaria habitual, pero aquí en Viena es domingo por la tarde y 6.11 ya salió."
- Entre los principales cambios de esta versión se incluyen nuevas operaciones
bind() y listen() en io_uring, el parche de bloqueo anidado de bottom-half, la capacidad de escribir sobre ejecutables en uso, soporte para escribir drivers de bloques en Rust, soporte para operaciones de escritura atómica en la capa de bloques, un asignador slab de buckets dedicados y una implementación vDSO de getrandom(), entre otros
Cambios por arquitectura
- La arquitectura Arm de 64 bits ahora soporta hotplug de CPU en sistemas ACPI. Para más detalles, ver este commit de documentación
- El kernel X86 ahora puede ejecutarse como invitado usando la capacidad de virtualización segura cifrada SEV-SNP de AMD, mediante el módulo de servicios de VM segura
- Se eliminó la función de "mapa de memoria EFI falso" en X86. Esta función permitía crear entradas ficticias de mapa de memoria durante el arranque, pero no encaja con configuraciones de computación confidencial
- Nueva implementación del cifrado AES-GCM para sistemas x86-64. Aunque las mejoras de rendimiento siempre son bienvenidas, este aporte también destaca por su amplia documentación sobre el código y cómo funciona. Para más detalles, ver este commit
- Se eliminó el soporte para la plataforma PowerPC 40x
- Se añadió soporte de hotplug de memoria para sistemas RISC-V
Núcleo del kernel
- El subsistema io_uring ahora ofrece operaciones que implementan bind() y listen()
- Un nuevo conjunto de operaciones ioctl() para el sistema de archivos nsfs (namespaces) realiza conversión de IDs de procesos y grupos de hilos entre namespaces PID
- El sistema de archivos pidfd soporta una nueva llamada ioctl() para obtener descriptores de archivo de namespaces del proceso representado por un pidfd
- Se integró el parche de bloqueo anidado de bottom-half. Está dirigido principalmente a mejorar la latencia en kernels en tiempo real, pero también debería beneficiar a otros usuarios
- Hay una nueva llamada al sistema, uretprobe(), implementada por ahora solo en sistemas x86-64. Su función es optimizar el manejo de uretprobe (puntos de rastreo de retorno de funciones) insertados dinámicamente en procesos de espacio de usuario
- Se eliminó la restricción de usuario único para el function-graph tracer
- Se pueden reservar regiones de memoria con nombre usando el nuevo parámetro de línea de comandos reserve_mem=. Esto está pensado para usarse junto con el subsistema pstore y el nuevo parámetro ramoops.mem_name=
Sistemas de archivos y E/S de bloques
- La llamada al sistema statx() ahora permite que el argumento de ruta sea un puntero nulo si está configurada la bandera AT_EMPTY_PATH
- En Linux 6.11, la llamada al sistema open_by_handle_at() relaja algo la verificación de permisos en situaciones donde el kernel puede confirmar que quien la invoca tiene acceso adecuado al archivo
- El kernel de Linux tradicionalmente bloqueaba la escritura sobre ejecutables que estuvieran en uso por algún proceso del sistema. Esto era para evitar sorpresas desagradables en programas en ejecución. Los desarrolladores del kernel han ido eliminando gradualmente esta limitación durante años. Desde 6.11, el kernel ya no impide escribir sobre ejecutables en uso
- El sistema de archivos Btrfs ahora reconoce varios valores nuevos para la opción de montaje rescue= (ignoremetacsums e ignoresuperflags). Están pensados para ayudar a recuperar sistemas de archivos parcialmente convertidos por herramientas de espacio de usuario, especialmente sistemas de archivos sometidos a conversión de checksums
- Se mejoró la forma en que Btrfs realiza la recuperación de grupos de bloques. Esto busca evitar situaciones en las que no se puede usar espacio libre aunque el sistema de archivos no esté lleno. Para una explicación del nuevo funcionamiento de los umbrales dinámicos de recuperación, ver este commit
Soporte de hardware
- Controlador de reloj de cámara Qualcomm SM8650
- Monitoreo de hardware como sensores de temperatura compatibles con SPD5118 y el controlador digital multifase de doble lazo Monolithic Power Systems MP2993
- Otros, como sensores del controlador embebido de ChromeOS y controladores de carga basados en ChromeOS EC
- Redes: adaptador inalámbrico USB Realtek RTL8192DU, interfaz Renesas Ethernet-TSN e interfaz CAN Vining 800, entre otros
- Relacionado con relojes: controlador PLL Amlogic C3 y controladores de reloj de pantalla/cámara/video Qualcomm SM7150, entre otros
- GPIO y control de pines: unidad de control de pines NXP IMX91, controlador de pines y GPIO Nuvoton MA35, entre otros
- Gráficos: panel Lincoln Technologies lcd197 y paneles basados en Ilitek ILI9806E, entre otros
- Se añadió nuevo soporte de hardware en varias áreas, como I/O industrial, dispositivos de entrada, medios, otros, PHY, sonido y USB
Otros
- Aparece un nuevo subsistema de secuenciación de energía para poner en marcha los dispositivos del sistema en el orden correcto
- El módulo "sloppy logic analyzer" puede convertir un conjunto de líneas GPIO en un analizador lógico de bajo presupuesto
- Se añadieron muchas funciones nuevas a la herramienta perf
- Se integró un pequeño conjunto de abstracciones en Rust para la carga de firmware. Aún faltan muchas piezas necesarias para escribir drivers importantes en Rust, pero esa lista se va reduciendo
Redes
- El nuevo knob sysctl net.tcp_rto_min_us permite ajustar el tiempo mínimo de espera de retransmisión para sockets TCP
- La utilidad ethtool ahora permite afinar la configuración de interrupciones para interfaces que usan Net DIM
Relacionado con seguridad
Virtualización y contenedores
- Se añadió soporte inicial en KVM para el mecanismo de virtualización segura cifrada SEV-SNP de AMD
- Hay una nueva llamada ioctl() de KVM para precargar la memoria del invitado antes de que este empiece a ejecutarse
Cambios internos del kernel
- El primer cambio integrado en 6.11 fue el nuevo mecanismo de "constantes en tiempo de ejecución" añadido por Linus Torvalds
- Por fin se añadió algo de documentación para el subsistema iomap
- La versión mínima requerida de GNU Make para compilar el kernel subió a 4.0
- En 6.11 se eliminaron 118 símbolos exportados y se añadieron 464, para un aumento neto de 346. También hay 6 nuevas kfunc
Opinión de GN⁺
- En esta versión 6.11 del kernel destacan muchas mejoras por arquitectura y la ampliación del soporte de hardware. En particular, el hotplug de CPU en ARM de 64 bits y el soporte para SEV-SNP de AMD en x86 son relevantes desde el punto de vista de seguridad y virtualización
- Con nuevas funciones añadidas a io_uring y BPF, se refuerza la tendencia de ampliar el soporte a nivel de kernel para I/O de alto rendimiento y programación con eBPF. Esto será de gran ayuda para optimización de rendimiento del sistema, monitoreo y redes, entre otros
- La aparición de nuevos subsistemas y módulos, como secuenciación de energía o el analizador lógico sloppy, puede aumentar la utilidad del kernel Linux en entornos embebidos o IoT
- También continúan las mejoras internas del kernel en optimización de código y facilidad de desarrollo, como las constantes en tiempo de ejecución o mejoras en documentación. Aun así, todavía hay muchas áreas con documentación insuficiente, por lo que parece necesaria más colaboración de la comunidad
- En la parte final de la merge window de 6.11 predominaron mejoras de rendimiento para varias arquitecturas y nuevo soporte de hardware. Entre los cambios destacables están la optimización del cifrado AES-GCM en x86-64 y el soporte de hotplug de memoria en RISC-V
- También hubo avances en seguridad de virtualización, como el soporte inicial para SEV-SNP de AMD en KVM. Esto sugiere que el papel del kernel Linux seguirá ampliándose en entornos de nube y edge computing
- La incorporación de abstracciones en Rust para carga de firmware y prevención de heap spraying muestra el potencial de Rust como lenguaje de programación de sistemas. Se espera que la proporción de código Rust dentro del kernel aumente gradualmente en el futuro
- Es una lástima que se haya pospuesto la integración de la clase de planificador escalable, pero parece una decisión inevitable para permitir suficiente revisión y estabilización. Como el planificador afecta directamente el rendimiento del sistema, hace falta un enfoque cuidadoso
3 comentarios
"Incluso después de actualizar a 6.10.10, a veces sigue sin despertar del modo de suspensión"
No era el único...
Parece que el tío Torvalds va a tener que vivir unos 200 años más
Opiniones en Hacker News