Después de dos meses de desarrollo, Linus Torvalds el lanzamiento del núcleo . Entre los cambios más destacados se encuentran: la limitación de la importación de símbolos de módulos propietarios a módulos GPL, la aceleración de las operaciones de cambio de contexto mediante la instrucción de procesador FSGSBASE, el soporte para la compresión de la imagen del núcleo utilizando Zstd, la reestructuración de la priorización de hilos en el núcleo, el soporte para el protocolo PRP (Protocolo de Redundancia Paralela), la programación considerando el ancho de banda en el planificador deadline, la agrupación proactiva de páginas de memoria, el indicador de capacidad CAP_CHECKPOINT_RESTOR, la llamada al sistema close_range(), la mejora del rendimiento de dm-crypt, la eliminación de código para sistemas huéspedes Xen PV de 32 bits, un nuevo mecanismo de gestión de memoria slab, la opción 'rescue' en Btrfs, y el soporte para cifrado en línea en ext4 y F2FS.
Se han incluido 16074 correcciones de 2011 desarrolladores en la nueva versión,
el tamaño del parche es de 62 MB (los cambios afectaron a 14548 archivos, se han añadido 782155 líneas de código y se han eliminado 314792 líneas). Aproximadamente el 45% de todos los cambios presentados en 5.9
están relacionados con los controladores de dispositivos, aproximadamente el 15% de los cambios tienen
relación con la actualización de código específico para arquitecturas de hardware, el 13% está
relacionado con la pila de red, el 3% con sistemas de archivos y el 3% con subsistemas internos
del núcleo.
:
- Memoria y servicios del sistema
- protección contra el uso de capas GPL para vincular controladores propietarios con componentes del núcleo exportados únicamente para módulos bajo licencia GPL. El indicador TAINT_PROPRIETARY_MODULE se hereda ahora en todos los módulos que importan símbolos de módulos con este indicador. Si un módulo GPL intenta importar símbolos de un módulo no GPL, este módulo GPL heredará la etiqueta TAINT_PROPRIETARY_MODULE y no podrá acceder a los componentes del núcleo disponibles solo para módulos bajo licencia GPL, incluso si el módulo había importado previamente símbolos de la categoría 'gplonly'. La reversión (exportación solo de EXPORT_SYMBOL_GPL en módulos que han importado EXPORT_SYMBOL_GPL), que podría interrumpir el funcionamiento de controladores propietarios, no se implementa (solo se hereda el indicador del módulo propietario, pero no las vinculaciones GPL).
- soporte para el mecanismo kcompactd para en segundo plano, permitiendo aumentar el número de grandes páginas de memoria disponibles para el núcleo. Según una estimación preliminar, el empaquetado en segundo plano con un costo mínimo de sobrecarga permite reducir los retrasos en la asignación de grandes páginas de memoria (huge-page) entre 70 y 80 veces en comparación con el mecanismo de empaquetado utilizado anteriormente, que se activaba solo cuando era necesario (on-demand). Para establecer los límites de la fragmentación externa que gestionará kcompactd, se ha añadido sysctl vm.compaction_proactiveness.
- soporte para la compresión de la imagen del núcleo utilizando el algoritmo (zstd).
- Para sistemas x86 se ha implementado soporte para la instrucción del procesador , que permite leer y modificar el contenido de los registros FS/GS desde el espacio de usuario. En el núcleo, FSGSBASE se utiliza para acelerar las operaciones de cambio de contexto al eliminar operaciones innecesarias de escritura de MSR para GSBASE, y en el espacio de usuario permite evitar llamadas al sistema innecesarias para cambiar FS/GS.
- el parámetro "allow_writes", que permite prohibir los cambios en los registros MSR del procesador desde el espacio de usuario y limitar el acceso al contenido de esos registros a operaciones de lectura, ya que cambiar los MSR puede causar problemas. Por defecto, la escritura no está prohibida por el momento y los cambios en los MSR se reflejan en el registro, pero en el futuro se planea cambiar el acceso por defecto a modo de solo lectura.
- En la interfaz de entrada/salida asíncrona se ha añadido soporte completo para operaciones asíncronas de lectura en búfer que no requieren la participación de hilos del núcleo. Se espera soporte para escritura en la próxima versión.
- En el planificador de entrada/salida deadline la planificación teniendo en cuenta el ancho de banda, tomar decisiones correctas en sistemas asimétricos, como los sistemas ARM basados en las arquitecturas y big.LITTLE, que combinan en un solo chip núcleos de CPU potentes y menos potentes y energéticamente eficientes. En particular, el nuevo modo permite evitar desincronizaciones durante la planificación, cuando un núcleo de CPU lento no dispone de los recursos adecuados para ejecutar una tarea en el plazo estipulado.
- El modelo de consumo de energía en el núcleo (marco Energy Model) ahora no solo abarca el comportamiento del consumo de energía de la CPU, sino que también incluye a los dispositivos periféricos.
- Se ha implementado la llamada al sistema close_range(), que permite a un proceso cerrar un rango completo de descriptores de archivo abiertos de una vez.
- Se ha eliminado el código de la implementación de la consola de texto y del controlador fbcon un algoritmo de asignación de prioridades para los hilos dentro del núcleo. La nueva versión garantiza una mejor coherencia en todos los subsistemas del núcleo al asignar prioridades a las tareas en tiempo real.
- Se ha añadido sysctl
- sched_uclamp_util_min_rt_default Se ha realizado la preparación para implementar el soporte de la tecnología Transparent Huge Pages en la caché de páginas.
- Se han implementado nuevos flags FAN_REPORT_NAME y FAN_REPORT_DIR_FID en el mecanismo fanotify para transmitir información sobre el nombre padre y el identificador único FID al ocurrir eventos de creación, eliminación o movimiento de elementos de directorio, y de objetos no relacionados con directorios.
- Para cgroups
- se introduce un nuevo controlador de distribución de memoria slab (slab memory controller), el cual destaca por trasladar el seguimiento de slab del nivel de páginas de memoria al nivel de objetos del núcleo, lo que permite compartir páginas slab entre diferentes cgroup, en lugar de asignar cachés slab separadas para cada cgroup. Este enfoque propuesto permite mejorar la eficiencia en el uso de slab, reducir en un 30-45% el tamaño de la memoria utilizada para slab, disminuir significativamente el consumo total de memoria del núcleo y reducir la fragmentación de la memoria. En el subsistema de sonido
- ALSA y las recomendaciones recientemente adoptadas sobre uso de terminología inclusiva en el núcleo de Linux, se ha realizado una limpieza de términos políticamente incorrectos. El código ha sido depurado del uso de las palabras “slave”, “master”, “blacklist” y “whitelist”. se ha habilitado la opción (CONFIG_INIT_STACK_ALL_ZERO) de inicialización automática a cero de todas las variables almacenadas en la pila (en la compilación se indica “-ftrivial-auto-var-init=zero”).
- Virtualización y seguridad
- En el subsistema seccomp, al utilizar el modo de control de proceso en el espacio de usuario, la posibilidad de configurar (CONFIG_INIT_STACK_ALL_ZERO) la inicialización automática con valor nulo de todas las variables almacenadas en la pila (en la compilación se indica «-ftrivial-auto-var-init=zero»).
- En el subsistema seccomp, al emplear el modo de control de procesos en espacio de usuario, sustituciones en el proceso de seguimiento de descriptores de archivos para una emulación completa de las llamadas al sistema que llevan a la creación de descriptores de archivos. Esta funcionalidad es requerida en sistemas de contenedores aislados y en la implementación de sandboxes para Chrome.
- Para las arquitecturas xtensa y csky, se añadió soporte para restringir llamadas al sistema mediante el subsistema seccomp. Además, para xtensa se implementó el mecanismo de auditoría.
- nuevo flag de capacidad CAP_CHECKPOINT_RESTORE, que permite proporcionar acceso a las funcionalidades relacionadas con la congelación y restauración del estado de los procesos sin otorgar privilegios adicionales.
- En GCC 11 se implementaron todas las capacidades necesarias para
la herramienta de depuración KCSAN (Kernel Concurrency Sanitizer), diseñada para detectar dinámicamente condiciones de carrera dentro del núcleo. De este modo, KCSAN ahora puede utilizarse con núcleos compilados en GCC. - Para AMD Zen y modelos de CPU más nuevos soporte para la tecnología P2PDMA, que permite utilizar DMA para la transferencia directa de datos entre la memoria de dos dispositivos conectados al bus PCI.
- Se añadió un modo en dm-crypt que permite reducir las latencias al realizar el procesamiento criptográfico de datos sin utilizar colas de trabajo. Este modo también es necesario para un funcionamiento correcto con Se eliminó el código para soportar sistemas invitados de 32 bits que operan en modo de paravirtualización bajo el hipervisor Xen. Los usuarios de tales sistemas deben migrar al uso de núcleos de 64 bits en entornos invitados o usar modos de virtualización completa (HVM) o virtualización combinada (PVH) en lugar de paravirtualización (PV).
- En el sistema de archivos Btrfs
- Subsistema de disco, entrada/salida y sistemas de archivos
- opción de montaje «rescue», que unifica el acceso a todas las demás opciones de recuperación. Se eliminó el soporte para las opciones «alloc_start» y «subvolrootid», y se declaró obsoleta la opción «inode_cache». Se llevaron a cabo optimizaciones de rendimiento, acelerando notablemente la ejecución de operaciones fsync(). posibilidad de utilizar tipos alternativos de sumas de verificación diferentes de CRC32c. posibilidad de utilizar tipos alternativos de sumas de verificación, diferentes de CRC32c.
- la posibilidad de utilizar el cifrado en línea (Inline Encryption) en los sistemas de archivos ext4 y F2FS, para lo cual se prevé la opción de montaje «inlinecrypt». El modo de cifrado en línea permite utilizar los mecanismos de cifrado integrados en el controlador de almacenamiento, que realizan el cifrado y descifrado transparentes de las entradas/salidas.
- En XFS el vaciado de inode (flush) en modo completamente asíncrono, que no bloquea los procesos durante la operación de limpieza de memoria. Se ha solucionado un problema persistente con las cuotas, que causaba un seguimiento incorrecto de las advertencias sobre el excedente del límite blando y las restricciones en el número de inodes. Se ha unificado la implementación del soporte DAX para ext4 y xfs.
- En Ext4 la carga anticipada de mapas de bits de distribución de bloques. En combinación con la restricción de escaneado de grupos no inicializados, la optimización ha permitido reducir el tiempo de montaje de particiones muy grandes.
- En F2FS ioctl F2FS_IOC_SEC_TRIM_FILE, que permite usar comandos TRIM/discard para el restablecimiento físico de los datos especificados en el archivo, por ejemplo, para eliminar claves de acceso sin dejar datos residuales en el almacenamiento.
En F2FS también se ha añadido un nuevo modo de recolección de basura GC_URGENT_LOW, que opera de manera más agresiva al omitir algunas comprobaciones de inactividad (idle) antes de iniciar el recolector de basura. - En bcache, el tamaño de bucket_size para extensiones ha aumentado de 16 a 32 bits como parte de la preparación para posibilitar su uso con cachés de dispositivos zonificados.
- En el subsistema SCSI se ha añadido la posibilidad de utilizar cifrado en línea basado en herramientas de cifrado de hardware integradas proporcionadas por controladores UFS ().
- Se ha añadido un nuevo parámetro de línea de comando del núcleo «debugfs», que permite gestionar la disponibilidad de un sistema de archivos pseudo homónimo.
- En el cliente NFSv4.2 se ha proporcionado soporte para atributos de archivo extendidos (xattr).
- En dm-dust interfaz para obtener de una vez una lista de todos los bloques defectuosos identificados en el disco («dmsetup message dust1 0 listbadblocks»).
- Para md/raid5 se ha añadido el parámetro /sys/block/md1/md/stripe_size para ajustar el tamaño del bloque STRIPE.
- Para dispositivos de almacenamiento NVMe se ha añadido soporte para comandos de zonificación del almacenador (ZNS, NVM Express Zoned Namespace), que permite dividir el espacio de almacenamiento en zonas que constituyen grupos de bloques, para un control más completo de la ubicación de los datos en el almacenamiento.
- Subsistema de red
- En Netfilter la posibilidad de rechazar paquetes en la etapa antes de la verificación de enrutamiento (la expresión REJECT ahora puede usarse no solo en las cadenas INPUT, FORWARD y OUTPUT, sino también en la etapa PREROUTING para icmp y tcp).
- En nftables la posibilidad de auditar eventos relacionados con cambios en la configuración.
- En nftables en la API de netlink soporte para cadenas anónimas, cuyo nombre se asigna dinámicamente por el núcleo. Al eliminar la regla asociada a una cadena anónima, la cadena también se elimina automáticamente.
- Se ha añadido soporte para iteradores en BPF para recorrer, filtrar y modificar elementos de arreglos asociativos (map) sin copiar datos en el espacio del usuario. Los iteradores se pueden usar para sockets TCP y UDP, lo que permite a los programas BPF recorrer listas de sockets abiertos y extraer la información necesaria de ellos.
- Se ha añadido un nuevo tipo de programas BPF BPF_PROG_TYPE_SK_LOOKUP, que se ejecutan cuando el núcleo busca un socket de escucha adecuado para una conexión entrante. Con este programa BPF, es posible crear controladores que tomen decisiones sobre qué socket debe asociarse con la conexión, sin estar limitados por la llamada al sistema bind(). Por ejemplo, es posible organizar la vinculación de un socket con un rango de direcciones o puertos. Además, se ha añadido soporte para la opción SO_KEEPALIVE en bpf_setsockopt() y se ha implementado la posibilidad de establecer controladores BPF_CGROUP_INET_SOCK_RELEASE, que se llaman al liberar un socket.
- Se ha implementado el soporte para el protocolo (Protocolo de Redundancia Paralela), que permite realizar un cambio transparente para las aplicaciones en un canal de respaldo en caso de falla de cualquier componente de la red sobre Ethernet.
- En la pila mac80211 soporte para la negociación de canal de cuatro etapas WPA/WPA2-PSK en modo punto de acceso.
- Se ha añadido la posibilidad de cambiar el programador qdisc (disciplina de colas) para utilizar por defecto el algoritmo de gestión de colas de red FQ-PIE (Flow Queue PIE), diseñado para reducir el impacto negativo de la sobremarcación de paquetes en el hardware de red de borde (bufferbloat) en redes con módems por cable.
- Se han añadido nuevas funcionalidades en MPTCP (MultiPath TCP), extensiones del protocolo TCP para gestionar conexiones TCP que permiten la entrega de paquetes simultáneamente a través de múltiples rutas mediante distintas interfaces de red vinculadas a diferentes direcciones IP. Se ha agregado soporte para syn cookie, DATA_FIN, autoconfiguración de buffers, diagnóstico de sockets y uso de las banderas REUSEADDR, REUSEPORT y V6ONLY en setsockopt.
- Para las tablas de enrutamiento virtual VRF (Virtual Routing and Forwarding), que permiten operar múltiples dominios de enrutamiento en un solo sistema, se ha implementado el modo "estricto". En este modo, la tabla virtual solo puede asociarse a una tabla de enrutamiento que no esté siendo utilizada en otras tablas virtuales.
- En el controlador inalámbrico ath11k se ha añadido soporte para la frecuencia de 6GHz y .
- Hardware
- Se ha eliminado el código para el soporte de la arquitectura UniCore, desarrollada en el centro de microprocesadores de la Universidad de Pekín e incluida en el núcleo de Linux en 2011. Esta arquitectura ha estado sin mantenimiento desde 2014 y no tiene soporte en GCC.
- Para la arquitectura RISC-V se ha implementado soporte para (interfaz debugfs para analizar la cobertura del código del núcleo), kmemleak (sistema de detección de fugas de memoria), protección de pila, etiquetas de salto y operaciones tickless (multitarea independiente de señales de temporizador).
- Para la arquitectura PowerPC se ha implementado el soporte de colas para spinlock, lo que ha permitido mejorar significativamente el rendimiento en situaciones de conflicto de bloqueos.
- Para las arquitecturas ARM y ARM64 se ha activado, por defecto, el mecanismo de regulación de frecuencia del procesador (gobernador cpufreq), que utiliza información directamente del planificador de tareas para decidir sobre cambios de frecuencia y puede comunicarse inmediatamente con los controladores cpufreq para ajustar dinámicamente la frecuencia, adaptando instantáneamente los parámetros de operación de la CPU a la carga actual.
- En el controlador DRM i915 para tarjetas gráficas Intel se ha incluido soporte para chips basados en la microarquitectura y se ha añadido soporte inicial para tarjetas discretas .
- En el controlador amdgpu se ha añadido soporte inicial para la GPU AMD (Navy Flounder) y (Sienna Cichlid). Se ha agregado soporte para motores de aceleración de codificación y decodificación de video UVD/VCE para GPUs Southern Islands (Radeon HD 7000).
Se ha añadido una propiedad para rotar la visualización a 90, 180 o 270 grados.Curiosamente, el controlador para la GPU AMD el controlador más grande en el núcleo, cuenta con aproximadamente 2,71 millones de líneas de código, que representan aproximadamente el 10% del tamaño total del núcleo (27,81 millones de líneas). De estos, 1,79 millones de líneas son encabezados generados automáticamente con datos para los registros de GPU, y el código en C consiste en 366 mil líneas (para comparación, el controlador Intel i915 incluye 209 mil líneas, y Nouveau — 149 mil).
- En el controlador Nouveau soporte de comprobación de integridad cuadro por cuadro mediante (Comprobaciones de Redundancia Cíclica) en los motores de visualización de GPU NVIDIA. La implementación se basa en la documentación proporcionada por NVIDIA.
- Se han añadido controladores para paneles LCD: Frida FRD350H54004, KOE TX26D202VM0BWA, CDTech S070PWS19HP-FC21, CDTech S070SWV29HG-DC44, Tianma TM070JVHG33 y Xingbangda XBD599.
- En el subsistema de sonido ALSA se ha implementado el soporte para (modo de suministro de energía constante para dispositivos HDMI externos para eliminar la latencia al iniciar la reproducción) y para el control de la retroiluminación de los botones de activación del micrófono y de silencio, además de añadir soporte para nuevo hardware, incluyendo el controlador .
- Se ha añadido soporte para placas, dispositivos y plataformas ARM: Pine64 PinePhone v1.2, Lenovo IdeaPad Duet 10.1, ASUS Google Nexus 7, Acer Iconia Tab A500, Qualcomm Snapdragon SDM630 (utilizado en Sony Xperia 10, 10 Plus, XA2, XA2 Plus y XA2 Ultra), Jetson Xavier NX, Amlogic WeTek Core2, Aspeed EthanolX, cinco nuevas placas basadas en NXP i.MX6, MikroTik RouterBoard 3011, Xiaomi Libra, Microsoft Lumia 950, Sony Xperia Z5, MStar, Microchip Sparx5, Intel Keem Bay, Amazon Alpine v3, Renesas RZ/G2H.
Al mismo tiempo, el Fondo Latinoamericano de Software Libre
una variante — , purgado de elementos de firmware y controladores que contienen componentes o secciones de código no libres, cuya aplicación está limitada por el fabricante. En esta nueva versión se ha desactivado la carga de blobs en los controladores para WiFi rtw8821c y SoC MediaTek mt8183. Se ha actualizado el código de limpieza de blobs en los controladores y subsistemas Habanalabs, Wilc1000, amdgpu, mt7615, i915 CSR, Mellanox mlxsw (Spectrum3), r8169 (rtl8125b-2) y x86 touchscreen.
Fuente: opennet.ru
