En esta página, se resumen las funciones principales de cada versión del kernel y se proporcionan 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 perfil de asignación de memoria (CONFIG_MEM_ALLOC_PROFILING
en la configuración).
Con el perfilamiento de asignación de memoria, cada asignación se atribuye a una línea de código fuente única para que los problemas con las asignaciones se puedan identificar rápidamente.
Además, se realiza la generación de perfiles de asignación de memoria:
Se usa durante la fase de ingeniería, pero está disponible en la imagen estándar del GKI.
Se puede habilitar con el parámetro de arranque
sysctl.vm.mem_profiling
.Funciona tanto para los módulos cargados como para los que se encuentran en el kernel.
io_uring más rápido con lectura de múltiples disparos y sin copias
En el kernel 6.12, los módulos statsd
y logd
usan la función sendfile de copia cero, lo que mejora su rendimiento.
Además, esta versión del kernel implementa la lectura de múltiples disparos, en la que una sola operación de lectura puede recuperar varios fragmentos de datos de forma simultánea, lo que mejora el rendimiento.
Mejoras en las capacidades y la compatibilidad del filtro de paquetes de Berkeley (BPF)
En el kernel 6.12, la cadena de herramientas de BPF se trasladó para admitir CO-RE y varias funciones modernas. Además, un nuevo cargador de BPF permite el uso de BPF moderno para los programas que forman parte de AOSP.
Ejecución del proxy
La ejecución de proxy permite que el programador tome prestados ciclos de CPU de procesos de alta prioridad para recuperar los bloqueos que mantienen los 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 los problemas de contención con mmap_sem
(anteriormente conocido como mmap_lock
). Por lo tanto, las apps que usan una gran cantidad de subprocesos podrían ver tiempos de inicio reducidos hasta en un 20%.
El programador Earliest Eligible Virtual Deadline First (EEVDF) reemplaza a CFS
El EEVDF reemplaza al Completely Fair Scheduler (CFS) para equilibrar mejor el acceso a la CPU entre las tareas de corta y larga duración.
Se redujo el consumo de energía de las devoluciones de llamada de actualización de la copia de lectura (RCU)
La opción RCU_LAZY
usa un método de procesamiento por lotes de devolución de llamada de RCU basado en temporizador para ahorrar energía. En el caso de 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 ningún costo de tiempo de compilación. El costo de tiempo de ejecución reducido permite habilitar KCFI en más lugares en comparación con CFI, en particular, en los puntos de seguimiento y los hooks del proveedor.
Además de KCFI, el kernel 6.1 introduce varias funciones de seguridad, como la verificación estricta de límites memcpy
y 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 se usan realmente. 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 espacio y a su ausencia de bloqueos.
Para obtener más información sobre MGLRU, consulta Multi-Gen LRU.
Programación
El mantenimiento y la actualización del programador son aspectos clave del trabajo para mejorar el kernel. Las actualizaciones del kernel en la versión 6.1 incluyen lo siguiente:
- Se agregó la programación compatible con clústeres, lo que aumenta el rendimiento gracias a la migración a núcleos que comparten la caché de L2.
- Se quitó la heurística innecesaria de margen de energía. Al limitar algunas migraciones, esta actualización mejora la utilización de energía hasta en un 5%.
- Se mejoró el balanceo de cargas para reducir la latencia de activación.
- Se trasladaron 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 Vulcan Video.
El nuevo método futex_waitv()
simplifica la portabilidad de juegos desde 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 condiciones de carrera en el código del kernel.
Además, usa el 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, entre las que se incluyen 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
- Se mejoró la aplicación de parches de la función de alternativas, lo que generó un tamaño de imagen del kernel más pequeño.