THP Service

De jagfloriano.com
Ir a la navegaciónIr a la búsqueda

Rol Ansible: THP Service

Descripción

El rol THP Service se utiliza para gestionar el estado de Transparent Huge Pages (THP) en sistemas Linux mediante un único servicio systemd de tipo oneshot.

El objetivo principal del rol es permitir habilitar o deshabilitar THP de forma persistente utilizando una sola variable de Ansible, sin depender de scripts ad-hoc ni configuraciones manuales en cada arranque del sistema.

Repositorio del rol:

¿Qué son Transparent Huge Pages (THP)?

Transparent Huge Pages es una funcionalidad del kernel Linux que intenta mejorar el rendimiento utilizando páginas de memoria de mayor tamaño de forma automática.

Aunque puede ser beneficioso en algunos escenarios, en otros (bases de datos, aplicaciones Java, entornos de baja latencia, clústeres, etc.) puede provocar:

  • Latencias impredecibles
  • Penalización de rendimiento
  • Problemas de estabilidad

Por este motivo, en muchos entornos empresariales se requiere deshabilitar THP de forma persistente.

---

¿Qué hace este rol?

Este rol realiza las siguientes acciones:

  • Crea un servicio systemd llamado thp-configuration.service
  • El servicio se ejecuta una sola vez (oneshot)
  • Escribe los valores adecuados en:
    • /sys/kernel/mm/transparent_hugepage/enabled
    • /sys/kernel/mm/transparent_hugepage/defrag
  • Garantiza que la configuración se aplique:
    • En tiempo de ejecución
    • En cada arranque del sistema
  • Permite cambiar el estado de THP modificando una única variable

---

Ventajas del enfoque

Este diseño aporta varias ventajas frente a métodos tradicionales:

  • No depende de scripts en /etc/rc.local
  • No requiere tareas periódicas (cron)
  • Es compatible con systemd
  • Es idempotente
  • Fácil de auditar
  • Fácil de revertir

---

Sistemas compatibles

  • RHEL 8
  • RHEL 9

Requisitos:

  • Acceso como root (uso de become: true)
  • Kernel Linux con soporte para THP
  • Existencia de /sys/kernel/mm/transparent_hugepage

---

Variables del rol

thp_state

Define el estado deseado de THP.

Valores posibles:

  • enabled
  • disabled

Valor por defecto:

enabled

---

thp_map

Mapa interno que traduce el estado lógico (enabled / disabled) a los valores reales que se escriben en el sistema de ficheros /sys.

Valores por defecto:

thp_map:
  enabled:
    enabled: "always"
    defrag: "always"
  disabled:
    enabled: "never"
    defrag: "never"

Este diseño permite extender el rol fácilmente en el futuro.

---

thp_verify

Indica si, tras aplicar la configuración, se debe mostrar el estado actual de THP.

Valor por defecto:

true

---

Ejemplo de uso

Playbook de ejemplo utilizando el rol:

- hosts: all
  become: true
  roles:
    - role: transparent_huge_pages_service
      vars:
        # Descomentar solo una opción
        # thp_state: enabled
        # thp_state: disabled

---

Cuándo usar este rol

Este rol es especialmente útil en los siguientes escenarios:

  • Servidores de bases de datos
  • Clústeres (Pacemaker, Kubernetes, etc.)
  • Sistemas con aplicaciones sensibles a latencia
  • Estandarización de configuraciones en grandes entornos
  • Hardening y buenas prácticas de rendimiento

---

Conceptos que demuestra este rol

  • Uso de systemd oneshot services
  • Persistencia de configuraciones del kernel
  • Abstracción mediante variables
  • Idempotencia en Ansible
  • Buen diseño de roles reutilizables

---

Nota final

Este rol no pretende decidir si THP debe estar habilitado o no, sino proporcionar un mecanismo limpio, controlado y reutilizable para gestionar su estado de forma coherente en toda la infraestructura.