Notas de la versión del kernel

En esta página, se resumen las funciones principales de cada versión del kernel y se incluyen vínculos a información adicional.

Nuevas funciones del kernel 6.12

En esta sección, se explican las nuevas funciones del kernel 6.12.

Generación de perfiles de asignación de memoria

La clave para comprender el uso de la memoria es saber dónde se realizan las asignaciones. El kernel 6.12 incluye un nuevo sistema de atribución de asignación de memoria llamado generación de perfiles de asignación de memoria (CONFIG_MEM_ALLOC_PROFILING en la configuración). Con la generación de perfiles de asignación de memoria, cada asignación se atribuye a una línea de origen única para que los problemas con las asignaciones se puedan identificar rápidamente. Además, la generación de perfiles de asignación de memoria:

  • Se usa durante la fase de ingeniería, pero está disponible en la imagen GKI estándar.

  • Se puede habilitar con el parámetro de arranque sysctl.vm.mem_profiling.

  • Funciona tanto para módulos integrados en el kernel como para módulos cargados.

io_uring más rápido con lectura de copia cero y multishot

En el kernel 6.12, los módulos statsd y logd usan sendfile de copia cero, lo que mejora su rendimiento.

Además, esta versión del kernel implementa la lectura multishot, en la que una sola operación de lectura puede recuperar varios datos de forma simultánea, lo que mejora el rendimiento.

Capacidades y compatibilidad mejoradas de Berkeley Packet Filter (BPF)

En el kernel 6.12, la cadena de herramientas de BPF se movió para admitir CO-RE y varias funciones modernas. Además, un nuevo cargador de BPF permite el uso de BPF moderno para programas que forman parte de AOSP.

Ejecución de proxy

La ejecución de proxy permite que el programador tome prestados ciclos de CPU de procesos de alta prioridad para recuperar bloqueos que tienen procesos de menor prioridad. Esta función mitiga los problemas de inversión de prioridad.

Nuevas funciones del kernel 6.6

En esta sección, se explican las nuevas funciones del kernel 6.6.

Compatibilidad con Rust

Varios proyectos del kernel 6.6 usan Rust.

Bloqueos por área de memoria virtual (VMA)

El kernel 6.6 usa bloqueos por área de memoria virtual para abordar problemas de contención con mmap_lock (antes conocido como mmap_sem). Por lo tanto, las apps que usan una gran cantidad de subprocesos pueden ver que los tiempos de inicio se reducen hasta en un 20%.

El programador EEVDF (Earliest Eligible Virtual Deadline First) reemplaza a CFS

EEVDF reemplaza al programador completamente justo (CFS) para equilibrar mejor el acceso a la CPU entre tareas de corta y larga duración.

Reducción del consumo de energía de las devoluciones de llamada de actualización de copia de lectura (RCU)

La opción RCU_LAZY usa un método de procesamiento por lotes de devoluciones de llamada de RCU basado en el temporizador para ahorrar energía. Para un sistema inactivo o con poca carga, esta opción puede reducir el consumo de energía entre un 5% y un 10%.

Mejor compresión de memoria ZRAM

El nuevo parámetro de configuración de compilación CONFIG_ZRAM_MULTI_COMP permite que ZRAM vuelva a comprimir páginas con uno de los tres algoritmos alternativos. Esta recompresión reduce aún más la memoria comprimida, lo que proporciona más espacio libre para las tareas activas.

Nuevas funciones del kernel 6.1

En esta sección, se explican las nuevas funciones del kernel 6.1.

Seguridad más rápida con la integridad del flujo de control del kernel (KCFI)

KCFI reemplaza la integridad del flujo de control (CFI), lo que genera un costo de tiempo de ejecución reducido y sin costo de tiempo de compilación. El costo de tiempo de ejecución reducido permite que KCFI se habilite en más lugares en comparación con CFI, en particular, los puntos de seguimiento y los hooks del proveedor.

Además de KCFI, el kernel 6.1 presenta varias funciones de seguridad, como la verificación estricta de límites memcpy y las mitigaciones de ataques de especulación de línea recta.

Para obtener más información sobre KCFI, consulta Integridad del flujo de control del kernel.

LRU multigeneracional (MGLRU)

Se agregó MGLRU al kernel 6.1 para mejorar la administración de la memoria, ya que identifica mejor qué páginas están en uso. Esta mejora reduce la necesidad de detener las apps cuando el sistema experimenta una escasez de memoria. Esta actualización también mejora la experiencia del usuario, ya que la capacidad de respuesta general del dispositivo es mejor.

La implementación de MGLRU también incluye compatibilidad con un nuevo árbol de arce seguro para RCU, que, en algunos casos, se puede usar para reemplazar el árbol rojo-negro (rbtree). Cuando se usa, el árbol de arce seguro para RCU aumenta el rendimiento debido a su menor tamaño y a la falta de bloqueo.

Para obtener más información sobre MGLRU, consulta LRU multigeneracional.

Programación

Mantener y actualizar el programador es un aspecto clave del trabajo para mejorar el kernel. Las actualizaciones del kernel en 6.1 incluyen lo siguiente:

  • Se agregó la programación compatible con clústeres, lo que aumenta el rendimiento mediante la migración a núcleos que comparten la caché L2.
  • Se quitó la heurística innecesaria de margen de energía. Al limitar algunas migraciones, esta actualización mejora el uso de energía hasta en un 5%.
  • Se mejoró el balanceo de cargas para reducir la latencia de activación.
  • Se movieron los períodos de gracia acelerados de RCU a un kthread en tiempo real. Esta actualización redujo en gran medida los valores atípicos de latencia relacionados con RCU.

Gráficos

El kernel 6.1 contiene métodos nuevos para dma-buf para exportar e importar archivos de sincronización, lo que se alinea con la necesidad de la API de video de Vulcan.

El nuevo método futex_waitv() simplifica la portabilidad de juegos de otras plataformas, ya que espera varios futexes de forma simultánea.

Herramientas de depuración

Usa Kernel Concurrency SANitizer (KCSAN) en compilaciones de depuración para identificar las condiciones de carrera en el código del kernel.

Además, usa Kernel Memory SANitizer (KMSAN) para encontrar valores no inicializados en el kernel.

Mejoras en la compatibilidad con ARM64

El kernel 6.1 incluye varias mejoras para la arquitectura ARM64, incluidas las siguientes:

  • Compatibilidad con las extensiones de temporizador ARMv8.6
  • Compatibilidad con el algoritmo de autenticación de puntero QARMA3
  • Compatibilidad inicial con la extensión de matriz escalable (SME) de ARMv9
  • Mejoras en la aplicación de parches de funciones alternativas, lo que genera un tamaño de la imagen del kernel más pequeño