Lanzamiento del núcleo de Linux 5.9

Después de dos meses de desarrollo Linus Torvalds presentado lanzamiento del núcleo Linux 5.9. Entre los cambios más notables: limitar la importación de símbolos de módulos propietarios a módulos GPL, acelerar las operaciones de cambio de contexto usando la instrucción del procesador FSGSBASE, soporte para la compresión de imágenes del kernel usando Zstd, reelaborar la priorización de subprocesos en el kernel, soporte para PRP (Protocolo de redundancia paralela), programación consciente del ancho de banda en el programador de fechas límite, empaquetado preventivo de páginas de memoria, indicador de capacidad CAP_CHECKPOINT_RESTOR, llamada al sistema close_range(), mejoras de rendimiento de dm-crypt, eliminación de código para invitados Xen PV de 32 bits, nueva memoria de bloque mecanismo de gestión, opción “rescate” en Btrfs, soporte para cifrado en línea en ext4 y F2FS.

La nueva versión incluye 16074 correcciones de desarrolladores de 2011,
tamaño del parche: 62 MB (los cambios afectaron a 14548 archivos, se agregaron 782155 líneas de código y se eliminaron 314792 líneas). Alrededor del 45% de todos presentados en 5.9
Los cambios están asociados con los controladores de dispositivos, aproximadamente el 15% de los cambios tienen
Actitud hacia la actualización de código específico para arquitecturas de hardware, 13%.
relacionados con la pila de red, 3% con sistemas de archivos y 3% con sistemas internos
subsistemas del núcleo.

El principal innovaciones:

  • Servicios de memoria y sistema.
    • Apretado protección contra el uso de capas GPL para vincular controladores propietarios con componentes del kernel exportados solo para módulos bajo la licencia GPL. El indicador TAINT_PROPRIETARY_MODULE ahora se hereda 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 que no es GPL, entonces ese módulo GPL heredará la etiqueta TAINT_PROPRIETARY_MODULE y no podrá acceder a los componentes del kernel disponibles solo para los módulos con licencia GPL, incluso si el módulo ha importado previamente símbolos de la categoría "gplonly". El bloqueo inverso (exportar solo EXPORT_SYMBOL_GPL en módulos que importaron EXPORT_SYMBOL_GPL), que podría interrumpir el trabajo de los controladores propietarios, no está implementado (solo se hereda el indicador del módulo propietario, pero no los enlaces GPL).
    • Añadido por soporte de motor kcompacto para páginas de memoria preempaquetadas en segundo plano para aumentar el número de páginas de memoria grandes disponibles para el kernel. Según estimaciones preliminares, el empaquetado en segundo plano, a costa de una sobrecarga mínima, puede reducir los retrasos en la asignación de páginas de memoria grandes (páginas enormes) entre 70 y 80 veces en comparación con el mecanismo de empaquetado utilizado anteriormente, que se inicia cuando surge la necesidad (bajo demanda). ). Para establecer los límites de la fragmentación externa que proporcionará kcompactd, se ha agregado sysctl vm.compaction_proactiveness.
    • Añadido por soporte para la compresión de imágenes del kernel mediante algoritmo Zestándar (zstd).
    • Se ha implementado soporte para instrucciones del procesador para sistemas x86. FSGSBASE, que le permite leer y cambiar el contenido de los registros FS/GS desde el espacio del usuario. En el kernel, FSGSBASE se utiliza para acelerar las operaciones de cambio de contexto eliminando operaciones de escritura MSR innecesarias para GSBASE, y en el espacio de usuario evita llamadas innecesarias al sistema para cambiar FS/GS.
    • Добавлен el parámetro "allow_writes" le permite prohibir cambios en los registros MSR del procesador desde el espacio del usuario y limitar el acceso al contenido de estos registros para operaciones de lectura, ya que cambiar el MSR puede generar problemas. De forma predeterminada, la escritura aún no está deshabilitada y los cambios en el MSR se reflejan en el registro, pero en el futuro está previsto cambiar el acceso predeterminado al modo de solo lectura.
    • A la interfaz de E/S asíncrona io_durante Se agregó soporte completo para operaciones de lectura asincrónicas en buffer que no requieren subprocesos del kernel. Se espera soporte de grabación en una versión futura.
    • En la fecha límite del programador de E/S implementado planificación basada en la capacidad, permitiendo tomar decisiones correctas en sistemas asimétricos como los sistemas basados ​​en ARM DynamIQ y big.LITTLE, que combinan núcleos de CPU potentes y menos eficientes energéticamente en un solo chip. En particular, el nuevo modo le permite evitar discrepancias en la programación cuando un núcleo de CPU lento no tiene los recursos adecuados para completar una tarea a tiempo.
    • El modelo de consumo de energía en el núcleo (marco del modelo energético) ahora es описывает no solo cubre el comportamiento del consumo de energía de la CPU, sino que también cubre los dispositivos periféricos.
    • La llamada al sistema close_range() se implementó para permitir que un proceso cierre un rango completo de descriptores de archivos abiertos a la vez.
    • De la implementación de la consola de texto y el controlador fbcon código eliminado, que proporciona la capacidad de desplazar el texto hacia atrás mediante programación (CONFIG_VGACON_SOFT_SCROLLBACK) en una cantidad mayor que la memoria de video en modo de texto VGA.
    • Reelaborado Algoritmo para asignar prioridades a los subprocesos dentro del kernel. La nueva opción proporciona una mejor coherencia en todos los subsistemas del kernel al asignar prioridades a tareas en tiempo real.
    • sistema agregado sched_uclamp_util_min_rt_default para controlar la configuración de aumento de CPU para tareas en tiempo real (por ejemplo, puede cambiar el comportamiento de las tareas en tiempo real sobre la marcha para ahorrar energía después de cambiar a batería o en sistemas móviles).
    • Se han hecho preparativos para implementar soporte para la tecnología Transparent Huge Pages en el caché de la página.
    • El motor fanotify implementa nuevos indicadores FAN_REPORT_NAME y FAN_REPORT_DIR_FID para informar el nombre principal y la información FID única cuando ocurren eventos de creación, eliminación o movimiento para elementos del directorio y objetos que no son del directorio.
    • Para grupos c implementado un nuevo controlador de memoria de losa, que se destaca por mover la contabilidad de losa desde el nivel de la página de memoria al nivel de objeto del kernel, lo que hace posible compartir páginas de losa en diferentes cgroups, en lugar de asignar cachés de losa separados para cada cgroup. El enfoque propuesto permite aumentar la eficiencia del uso de slab, reducir el tamaño de la memoria utilizada para slab en un 30-45%, reducir significativamente el consumo general de memoria del kernel y reducir la fragmentación de la memoria.
    • En el subsistema de sonido. Alsa и pila USB, de acuerdo con recientemente adoptado recomendaciones sobre el uso de terminología inclusiva en el kernel de Linux; se limpiaron términos políticamente incorrectos. Se han eliminado del código las palabras "esclavo", "maestro", "lista negra" y "lista blanca".
  • Virtualización y seguridad
    • Al construir el kernel usando el compilador Clang apareció la capacidad de configurar (CONFIG_INIT_STACK_ALL_ZERO) la inicialización automática a cero de todas las variables almacenadas en la pila (al compilar, especifique “-ftrivial-auto-var-init=zero”).
    • En el subsistema seccomp, cuando se utiliza el modo de control de procesos en el espacio de usuario, agregado oportunidad sustitución de descriptores de archivos en el proceso monitoreado para emular completamente las llamadas al sistema que conducen a la creación de descriptores de archivos. La funcionalidad tiene demanda en sistemas de contenedores aislados e implementaciones de espacio aislado para Chrome.
    • Para las arquitecturas xtensa y csky, se agregó soporte para limitar las llamadas al sistema utilizando el subsistema seccomp. Para xtensa se implementa adicionalmente soporte para el mecanismo de auditoría.
    • Добавлен nuevo indicador de capacidad CAP_CHECKPOINT_RESTORE, que le permite proporcionar acceso a capacidades relacionadas con la congelación y restauración del estado de procesos sin transferir privilegios adicionales.
    • GCC 11 proporciona todas las funciones que necesita para
      herramienta de depuración KCSAN (Kernel Concurrency Sanitizer), diseñada para detectar dinámicamente condiciones de carrera dentro del kernel. Por lo tanto, KCSAN ahora se puede utilizar con núcleos integrados en GCC.

    • Para AMD Zen y modelos de CPU más nuevos agregado soporte para la tecnología P2PDMA, que le permite utilizar DMA para la transferencia directa de datos entre la memoria de dos dispositivos conectados al bus PCI.
    • Se ha agregado un modo a dm-crypt que le permite reducir la latencia al realizar el procesamiento de datos criptográficos sin utilizar colas de trabajo. Este modo también es necesario para el correcto funcionamiento con zonificado dispositivos de bloque (dispositivos con áreas que deben escribirse secuencialmente, actualizando todo el grupo de bloques). Se ha trabajado para aumentar el rendimiento y reducir la latencia en dm-crypt.
    • Se eliminó el código para admitir invitados de 32 bits que se ejecutan en modo paravirtualización y ejecutan el hipervisor Xen. Los usuarios de dichos sistemas deberían pasar a utilizar kernels de 64 bits en entornos invitados o utilizar modos de virtualización completos (HVM) o combinados (PVH) en lugar de paravirtualización (PV) para ejecutar entornos.
  • Subsistema de disco, E/S y sistemas de archivos
    • En el sistema de archivos Btrfs implementado una opción de montaje de "rescate" que unifica el acceso a todas las demás opciones de recuperación. Se eliminó la compatibilidad con las opciones "alloc_start" y "subvolrootid", y la opción "inode_cache" quedó obsoleta. Se han realizado optimizaciones de rendimiento, especialmente acelerando notablemente la ejecución de operaciones fsync(). Añadido por la capacidad de utilizar tipos alternativos de sumas de verificación distintos de CRC32c.
    • Añadido por la capacidad de utilizar cifrado en línea (Inline Encryption) en sistemas de archivos ext4 y F2FS, para habilitarlo se proporciona la opción de montaje "inlinecrypt". El modo de cifrado en línea le permite utilizar los mecanismos de cifrado integrados en el controlador de la unidad, que cifra y descifra de forma transparente la entrada/salida.
    • En XFS asegurado reinicio de inodo (vaciado) en un modo completamente asíncrono que no bloquea los procesos al realizar una operación de limpieza de memoria. Se resolvió un problema de cuota de larga data que causaba que las advertencias de límite suave y límite de inodo se rastrearan incorrectamente. Implementación unificada de soporte DAX para ext4 y xfs.
    • En Ext4 implementado precargar mapas de bits de asignación de bloques. Combinada con la limitación del escaneo de grupos no inicializados, la optimización redujo el tiempo necesario para montar particiones muy grandes.
    • En F2FS adicional ioctl F2FS_IOC_SEC_TRIM_FILE, que le permite utilizar los comandos TRIM/discard para restablecer físicamente datos específicos en un archivo, por ejemplo, para eliminar claves de acceso sin dejar datos residuales en la unidad.
      En F2FS también adicional nuevo modo de recolección de basura GC_URGENT_LOW, que funciona de manera más agresiva al eliminar algunas comprobaciones de estar en estado inactivo antes de iniciar el recolector de basura.

    • En bcache, el tamaño del depósito para las extensiones se ha aumentado de 16 a 32 bits en preparación para habilitar las cachés de dispositivos por zonas.
    • Se ha agregado al subsistema SCSI la capacidad de utilizar cifrado en línea basado en el cifrado de hardware integrado proporcionado por los controladores UFS (Almacenamiento flash universal).
    • Se ha agregado un nuevo parámetro de línea de comando del kernel, "debugfs", que le permite controlar la disponibilidad del pseudo-FS del mismo nombre.
    • El cliente NFSv4.2 proporciona soporte para atributos de archivos extendidos (xattr).
    • En polvo DM adicional Interfaz para mostrar a la vez una lista de todos los bloques defectuosos identificados en el disco (“dmsetup messagedust1 0 listbadblocks”).
    • Para md/raid5, se agregó el parámetro /sys/block/md1/md/stripe_size para configurar el tamaño del bloque STRIPE.
    • Para dispositivos de almacenamiento NVMe agregado soporte para comandos de zonificación de unidades (ZNS, NVM Express Zoned Namespace), que le permite dividir el espacio de almacenamiento en zonas que forman grupos de bloques para un control más completo sobre la ubicación de los datos en la unidad.
  • Subsistema de red
    • En Netfilter agregado la capacidad de rechazar paquetes en la etapa anterior a la verificación de enrutamiento (la expresión REJECT ahora se puede usar no solo en las cadenas INPUT, FORWARD y OUTPUT, sino también en la etapa PREROUTING para icmp y tcp).
    • En nftables agregado la capacidad de auditar eventos relacionados con cambios de configuración.
    • En nftables en la API netlink agregado soporte para cadenas anónimas, cuyo nombre es asignado dinámicamente por el núcleo. Cuando elimina una regla asociada con una cadena anónima, la cadena en sí se elimina automáticamente.
    • BPF agrega soporte para que los iteradores atraviesen, filtren y modifiquen elementos de matrices asociativas (mapas) sin copiar datos en el espacio del usuario. Los iteradores se pueden utilizar para sockets TCP y UDP, lo que permite a los programas BPF iterar sobre listas de sockets abiertos y extraer de ellos la información que necesitan.
    • Se agregó un nuevo tipo de programa BPF BPF_PROG_TYPE_SK_LOOKUP, que se inicia cuando el kernel busca un socket de escucha adecuado para una conexión entrante. Usando un programa BPF como este, puede crear controladores que tomen decisiones sobre a qué socket se debe asociar una conexión, sin estar restringido por la llamada al sistema bind(). Por ejemplo, puede asociar un único socket con un rango de direcciones o puertos. Además, se agregó soporte para el indicador SO_KEEPALIVE a bpf_setsockopt() y se implementó la capacidad de instalar controladores BPF_CGROUP_INET_SOCK_RELEASE, llamados cuando se lanza el socket.
    • Soporte de protocolo implementado PRP (Protocolo de redundancia paralela), que permite la conmutación basada en Ethernet a un canal de respaldo, transparente para las aplicaciones, en caso de falla de cualquier componente de la red.
    • Pila mac80211 agregado soporte para negociación de canales WPA/WPA2-PSK de cuatro etapas en modo punto de acceso.
    • Se agregó la capacidad de cambiar el programador qdisc (disciplina de colas) para usar el algoritmo de administración de colas de red FQ-PIE (Flow Queue PIE) de forma predeterminada, con el objetivo de reducir el impacto negativo del almacenamiento intermedio de paquetes en el equipo de red de borde (bufferbloat) en redes con módems de cable.
    • Se han agregado nuevas funciones a MPTCP (MultiPath TCP), extensiones del protocolo TCP para organizar el funcionamiento de una conexión TCP con la entrega de paquetes simultáneamente a lo largo de varias rutas a través de diferentes interfaces de red asociadas con diferentes direcciones IP. Se agregó soporte para cookies de sincronización, DATA_FIN, ajuste automático del búfer, diagnóstico de socket y indicadores REUSEADDR, REUSEPORT y V6ONLY en setsockopt.
    • Para las tablas de enrutamiento virtual VRF (Virtual Routing and Forwarding), que permiten organizar el funcionamiento de varios dominios de enrutamiento en un sistema, se ha implementado el modo "estricto". En este modo, una tabla virtual solo se puede asociar con una tabla de enrutamiento que no se utiliza en otras tablas virtuales.
    • El controlador inalámbrico es ath11k. agregado Soporta frecuencia de 6GHz y escaneo espectral.
  • Equipo
    • Se eliminó el código para admitir la arquitectura UniCore, desarrollado en el Centro de Microprocesadores de la Universidad de Pekín e incluido en el kernel de Linux en 2011. Esta arquitectura no ha recibido mantenimiento desde 2014 y no tiene soporte en GCC.
    • Se ha implementado soporte para la arquitectura RISC-V. kcov (interfaz debugfs para analizar la cobertura del código del kernel), kmemleak (sistema de detección de fugas de memoria), protección de pila, marcas de salto y operaciones sin ticks (multitarea independiente de las señales del temporizador).
    • Para la arquitectura PowerPC, se implementó soporte para colas de bloqueo de giro, lo que mejoró significativamente el rendimiento en situaciones de conflicto de bloqueo.
    • Para las arquitecturas ARM y ARM64, el mecanismo de regulación de frecuencia del procesador está habilitado de forma predeterminada. programar (gobernador de cpufreq), que utiliza directamente información del programador de tareas para tomar una decisión sobre el cambio de frecuencia y puede acceder inmediatamente a los controladores de cpufreq para cambiar rápidamente la frecuencia, ajustando instantáneamente los parámetros operativos de la CPU a la carga actual.
    • El controlador DRM i915 para tarjetas gráficas Intel incluye soporte para chips basados ​​en microarquitectura Rocket Lake y soporte inicial agregado para tarjetas discretas Intel Xe DG1.
    • El controlador Amdgpu agregó soporte inicial para GPU AMD Navi 21 (platija marina) y Navi 22 (Cíclidos de Siena). Se agregó soporte para motores de aceleración de codificación y decodificación de video UVD/VCE para la GPU de Southern Islands (Radeon HD 7000).
      Se agregó una propiedad para rotar la pantalla 90, 180 o 270 grados.

      Curiosamente, el controlador para GPU AMD es el controlador más grande del kernel: tiene alrededor de 2.71 millones de líneas de código, que es aproximadamente el 10% del tamaño total del kernel (27.81 millones de líneas). Al mismo tiempo, los archivos de encabezado generados automáticamente con datos para los registros de GPU representan 1.79 millones de líneas, y el código C es de 366 mil líneas (a modo de comparación, el controlador Intel i915 incluye 209 mil líneas y el Nouveau, 149 mil).

    • En el nuevo conductor agregado soporte para la verificación de integridad cuadro por cuadro utilizando CRC (Comprobaciones de redundancia cíclica) en motores de visualización de GPU NVIDIA. La implementación se basa en la documentación proporcionada por NVIDIA.
    • Se agregaron controladores para paneles LCD: Frida FRD350H54004, KOE TX26D202VM0BWA, CDTech S070PWS19HP-FC21, CDTech S070SWV29HG-DC44, Tianma TM070JVHG33 y Xingbangda XBD599.
    • El subsistema de audio ALSA admite Transmisión silenciosa Intel (modo de alimentación continua para dispositivos HDMI externos para eliminar el retraso al iniciar la reproducción) y Nuevo dispositivo para controlar la iluminación de los botones de activación y silencio del micrófono, y también agregó soporte para nuevos equipos, incluido un controlador Longson 7A1000.
    • Se agregó 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 (usado 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, la Fundación Latinoamericana de Software Libre formado
вариант kernel 5.9 completamente gratis - linux-libre 5.9-gnu, libre de elementos de firmware y controladores que contengan componentes o secciones de código no libres, cuyo alcance está limitado por el fabricante. La nueva versión deshabilita la carga de blobs en los controladores para WiFi rtw8821c y SoC MediaTek mt8183. Código de limpieza de blobs actualizado en los controladores y subsistemas de pantalla táctil Habanalabs, Wilc1000, amdgpu, mt7615, i915 CSR, Mellanox mlxsw (Spectrum3), r8169 (rtl8125b-2) y x86.

Fuente: opennet.ru

Añadir un comentario