Transparent Huge Pages (THP) consolida páginas de 4 KB en páginas de 2 MB para reducir la presión sobre la TLB y mejorar la eficiencia del acceso a memoria. Este tema describe las opciones de configuración de THP, los ajustes de desfragmentación y las recomendaciones de optimización para Alibaba Cloud Linux.
Configuraciones de THP
En Alibaba Cloud Linux 2, el kernel 4.19.81-17.2 y versiones anteriores establecían transparent_hugepage/enabled como madvise de forma predeterminada (THP selectivo). A partir del kernel 4.19.91-18, el valor predeterminado cambió a always para ser compatible con Red Hat Enterprise Linux 7, CentOS 7 y Amazon Linux 2. El ajuste always habilita THP en todo el sistema.
Configuración global
Configure THP mediante /sys/kernel/mm/transparent_hugepage/enabled:
-
alwaysTHP se habilita de manera global.
-
neverTHP se deshabilita de manera global.
-
madviseTHP se habilita únicamente en las regiones de memoria marcadas con
MADV_HUGEPAGEa través demadvise().NotaLa bandera
MADV_HUGEPAGEindica al kernel que una aplicación tiene la intención de usar páginas enormes para una región de memoria específica.
Configuración de desfragmentación
Además de los ajustes globales de THP, aplican dos mecanismos de desfragmentación:
Desfragmentación de THP: fusiona páginas pequeñas dispersas en páginas enormes para reducir la fragmentación de la memoria.
Desfragmentación de khugepaged: el daemon
khugepagedanaliza la memoria periódicamente y combina páginas pequeñas dispersas en páginas enormes contiguas.
El daemon khugepaged fusiona páginas de forma proactiva en segundo plano. El ajuste defrag de THP controla la estrategia de desfragmentación durante la asignación de memoria.
Desfragmentación de THP
Controla el comportamiento de la memoria durante los fallos de página (Direct Reclaim, Background Reclaim, Direct Compaction, Background Compaction). Para configurarla, escriba en /sys/kernel/mm/transparent_hugepage/defrag:
-
alwaysEl sistema pausa el proceso solicitante y ejecuta Direct Reclaim y Direct Compaction de forma síncrona. Si hay suficiente memoria contigua disponible, se asigna la THP.
-
deferEl sistema recurre a una página de 4 KB y activa
kswapd(Background Reclaim) ykcompactd(Background Compaction). Más adelante,khugepagedfusiona las páginas de 4 KB en una THP de 2 MB cuando hay memoria contigua disponible. -
madviseEn las regiones de memoria marcadas con
MADV_HUGEPAGEmediantemadvise(), se comporta igual quealways. Todas las demás regiones recurren a páginas de 4 KB.NotaEn Alibaba Cloud Linux 2 con la versión de kernel 4.19.81-17.2 o posterior, el valor predeterminado del sistema para este ajuste es
madvise. -
defer+madvisePara las regiones
MADV_HUGEPAGE(mediantemadvise()), se comporta igual quealways. En el resto de las regiones, se comporta igual quedefer. -
never
Deshabilita la desfragmentación durante la asignación de memoria.
Desfragmentación de khugepaged
Principales configuraciones de khugepaged:
-
Habilitar o deshabilitar la función
Archivo de configuración: /sys/kernel/mm/transparent_hugepage/khugepaged/defrag. Opciones:
-
0Deshabilita la desfragmentación de
khugepaged. -
1Cuando se establece en
1, el daemonkhugepagedfusiona periódicamente páginas dispersas de 4 KB en THP de 2 MB durante los periodos de inactividad.NotaEn Alibaba Cloud Linux 2 con la versión de kernel 4.19.91-18 o posterior, el valor predeterminado del sistema es
1.Este proceso adquiere bloqueos en la ruta de memoria. Si
khugepagedanaliza la memoria en momentos no óptimos, puede degradar el rendimiento de la aplicación.
-
-
Intervalo de reintento
Tiempo que
khugepagedespera antes de reintentar tras una asignación de THP con errores. Valor predeterminado:60000ms (60 segundos). Archivo de configuración:/sys/kernel/mm/transparent_hugepage/khugepaged/alloc_sleep_millisecs. -
Intervalo de análisis
Tiempo entre activaciones de
khugepaged. Valor predeterminado:10000ms (10 segundos). Archivo de configuración:/sys/kernel/mm/transparent_hugepage/khugepaged/scan_sleep_millisecs. -
Número de páginas por analizar
Páginas analizadas en cada activación de
khugepaged. Valor predeterminado: 4096. Archivo de configuración:/sys/kernel/mm/transparent_hugepage/khugepaged/pages_to_scan.
Recomendaciones de configuración de THP
Impacto de usar THP
THP mejora el rendimiento porque aumenta la tasa de aciertos de la TLB y reduce la sobrecarga de PTE, sin necesidad de modificar el código de la aplicación. Sin embargo, cuando la asignación de THP falla, los mecanismos de recuperación que se activan pueden degradar el rendimiento. La configuración predeterminada no es adecuada para todas las cargas de trabajo. Por ejemplo:
Si la desfragmentación de THP está en
always, el sistema ejecuta Direct Reclaim o Direct Compaction de forma síncrona bajo presión de memoria, lo que provoca picos de latencia.Con
khugepagedhabilitado (1), el daemon adquiere bloqueos en la ruta de memoria durante la consolidación. Esto puede degradar aplicaciones sensibles a la memoria si se activa en un momento inadecuado.Si THP está habilitado pero ambas funciones de desfragmentación están deshabilitadas, la memoria agota las páginas libres más rápido que con páginas de 4 KB. Esto desencadena procesos de recuperación y compactación antes de tiempo.
Recomendaciones de configuración
El impacto de THP en el rendimiento depende de su carga de trabajo. Ajuste la configuración según los requisitos de su aplicación.
Respalde sus archivos de configuración o Create a snapshot for a disk antes de aplicar cambios.
-
Para equilibrar rendimiento y estabilidad, considere el ajuste experimental
defer+madvise. Esta opción permite quekswapd,kcompactdykhugepagedgestionen la compactación en segundo plano sin bloquear las aplicaciones.sudo bash -c "echo 'defer+madvise' > /sys/kernel/mm/transparent_hugepage/defrag" -
Si el uso de CPU de
khugepagedes alto (cerca del 100 %), aumente su intervalo de análisis. Por ejemplo, establézcalo en 30 segundos:sudo sh -c 'echo 30000 > /sys/kernel/mm/transparent_hugepage/khugepaged/scan_sleep_millisecs'Como alternativa, deshabilite
khugepaged:sudo sh -c 'echo 0 > /sys/kernel/mm/transparent_hugepage/khugepaged/defrag' -
En cargas de trabajo donde la estabilidad es más importante que el rendimiento (como bases de datos de alto volumen, servicios sensibles a la latencia o asignaciones frecuentes de corta duración), deshabilite THP. Para deshabilitarlo en tiempo de ejecución:
sudo sh -c 'echo "never" > /sys/kernel/mm/transparent_hugepage/enabled'NotaEste cambio aplica únicamente a la sesión actual y se revierte al reiniciar. Para deshabilitar THP de forma permanente, agregue un parámetro de arranque del kernel:
sudo grubby --args="transparent_hugepage=never" --update-kernel="/boot/vmlinuz-$(uname -r)" sudo reboot
Comprobar el uso de THP
Compruebe el uso de THP a nivel de sistema o de proceso.
-
Nivel de sistema
Los parámetros de THP afectan a todos los procesos. Compruebe el uso de THP en todo el sistema:
cat /proc/meminfo | grep AnonHugePagesEjemplo de salida:
AnonHugePages: 614400 kBNotaUn valor distinto de cero indica que el sistema está utilizando THP.
-
Nivel de proceso: las aplicaciones usan
madvise()conMADV_HUGEPAGEpara controlar THP en sus propias regiones de memoria sin afectar otros procesos. Compruebe el uso de THP de un proceso específico:sudo cat /proc/<PID>/smaps | grep AnonHugePagesNotaReemplace
<PID>con el identificador real del proceso.Ejemplo de salida:
AnonHugePages: 0 kB AnonHugePages: 0 kB AnonHugePages: 0 kB AnonHugePages: 0 kB AnonHugePages: 0 kB AnonHugePages: 0 kB AnonHugePages: 0 kB AnonHugePages: 0 kB AnonHugePages: 0 kB AnonHugePages: 0 kB
Referencias
La funcionalidad y los riesgos de THP se documentan en Transparent Hugepage Support.
Code Huge Page aplica el mismo principio de consolidación para mapear segmentos de código en regiones de 2 MB o más, lo que reduce los fallos de la TLB. Alibaba Cloud Linux también es compatible con Huge Pages para código.
Ajuste de THP en Red Hat Enterprise Linux 7: Configuring Transparent Huge Pages.