En esta página, se resumen las funciones principales de cada versión del kernel y se proporcionan vínculos a información adicional.
Funciones nuevas del kernel 6.12
En esta sección, se explican las funciones nuevas 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 profiling de asignación de memoria (CONFIG_MEM_ALLOC_PROFILING
en la configuración).
Con el perfil de asignación de memoria, cada asignación se atribuye a una línea de origen única para que se puedan identificar rápidamente los problemas con las asignaciones.
Además, la generación de perfiles de asignación de memoria hace lo siguiente:
Se usa durante la fase de ingeniería, pero está disponible en la imagen estándar de GKI.
Se puede habilitar con el parámetro de inicio
sysctl.vm.mem_profiling
.Funciona para módulos cargados y dentro del kernel.
io_uring más rápido con lectura de varias tomas y sin copia
En el kernel 6.12, los módulos statsd
y logd
usan sendfile sin copia, lo que mejora su rendimiento.
Además, esta versión del kernel implementa la lectura de varias tomas, en la que una sola operación de lectura puede recuperar varios datos de forma simultánea, lo que mejora el rendimiento.
Compatibilidad y funciones mejoradas del filtro de paquetes de Berkeley (BPF)
En el kernel 6.12, se trasladó la cadena de herramientas de BPF 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 de proxy
La ejecución de proxy permite que el programador tome prestados ciclos de CPU de procesos de prioridad alta para recuperar bloqueos que mantienen procesos de prioridad más baja. Esta función mitiga los problemas de inversión de prioridad.
Funciones nuevas del kernel 6.6
En esta sección, se explican las funciones nuevas 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 de área de memoria virtual para abordar problemas de contención con mmap_sem
(antes conocido como mmap_lock
). Por lo tanto, las apps que usan una gran cantidad de subprocesos pueden ver reducidos los tiempos de inicio hasta en un 20%.
El programador de fecha límite virtual más temprana (EEVDF) reemplaza a CFS
El EEVDF reemplaza al programador completamente justo (CFS) para equilibrar mejor el acceso a la CPU entre tareas de corta y larga duración.
Se redujo el 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 lotes de devolución de llamada de RCU basado en temporizadores para ahorrar energía. En el caso de un sistema con carga ligera o inactivo, esta opción puede reducir la energía consumida entre un 5% y un 10%.
Mejor compresión de memoria de 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 recomposición reduce aún más la memoria comprimida, lo que proporciona más espacio libre para las tareas activas.
Funciones nuevas del kernel 6.1
En esta sección, se explican las funciones nuevas 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 reduce el costo del tiempo de ejecución y no tiene costo de tiempo de compilación. El costo reducido del entorno de ejecución permite que KCFI se habilite en más lugares en comparación con CFI, en particular, en los puntos de seguimiento y los hooks de proveedores.
Además de KCFI, el kernel 6.1 presenta varias funciones de seguridad, como la verificación estricta de límites de memcpy
y las mitigaciones de ataques de especulación de línea recta.
Para obtener más información sobre la 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 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 en disco y ausencia de bloqueos.
Para obtener más información sobre MGLRU, consulta LRU de varias generaciones.
Programación
Mantener y actualizar el programador es un aspecto clave para el trabajo de mejora del kernel. Entre las actualizaciones del kernel en la versión 6.1, se incluyen las siguientes:
- Se agregó una programación consciente del clúster, que aumenta el rendimiento mediante la migración a núcleos que comparten la caché de L2.
- Se quitó la heurística de margen de energía innecesaria. Esta actualización mejora el uso de energía hasta en un 5%, ya que limita algunas migraciones.
- 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 la 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 en varios futexes de forma simultánea.
Herramientas de depuración
Usa el Kernel Concurrency SANitizer (KCSAN) en compilaciones de depuración para identificar las carreras 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, como las siguientes:
- Compatibilidad con las extensiones de temporizador ARMv8.6
- Compatibilidad con el algoritmo de autenticación de punteros QARMA3
- Compatibilidad inicial con la extensión de matriz escalable (SME) de ARMv9
- Se realizaron mejoras en la aplicación de parches de funciones alternativas, lo que genera un tamaño de imagen del kernel más pequeño.