Red Hat Training

A Red Hat training course is available for RHEL 8

23.4. Configuración de HugeTLB en el arranque

El tamaño de las páginas que soporta el subsistema HugeTLB depende de la arquitectura. La arquitectura x86_64 soporta páginas enormes de 2 MB y páginas gigantes de 1 GB.

Este procedimiento describe cómo reservar una página de 1 GB en el momento del arranque.

Procedimiento

  1. Cree un pool HugeTLB para páginas de 1 GB añadiendo la siguiente línea a las opciones de línea de comandos del kernel en el archivo /etc/default/grub como root:

    default_hugepagesz=1G hugepagesz=1G
  2. Regenerar la configuración de GRUB2 utilizando el archivo por defecto editado:

    1. Si su sistema utiliza el firmware de la BIOS, ejecute el siguiente comando:

      # grub2-mkconfig -o /boot/grub2/grub.cfg
    2. Si su sistema utiliza el marco UEFI, ejecute el siguiente comando:

      # grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
  3. Cree un nuevo archivo llamado hugetlb-gigantic-pages.service en el directorio /usr/lib/systemd/system/ y añada el siguiente contenido:

    [Unit]
    Description=HugeTLB Gigantic Pages Reservation
    DefaultDependencies=no
    Before=dev-hugepages.mount
    ConditionPathExists=/sys/devices/system/node
    ConditionKernelCommandLine=hugepagesz=1G
    
    [Service]
    Type=oneshot
    RemainAfterExit=yes
    ExecStart=/usr/lib/systemd/hugetlb-reserve-pages.sh
    
    [Install]
    WantedBy=sysinit.target
  4. Cree un nuevo archivo llamado hugetlb-reserve-pages.sh en el directorio /usr/lib/systemd/ y añada el siguiente contenido:

    Al añadir el siguiente contenido, sustituya number_of_pages por el número de páginas de 1GB que desea reservar, y node por el nombre del nodo en el que se van a reservar estas páginas.

    #!/bin/sh
    
    nodes_path=/sys/devices/system/node/
    if [ ! -d $nodes_path ]; then
        echo "ERROR: $nodes_path does not exist"
        exit 1
    fi
    
    reserve_pages()
    {
        echo $1 > $nodes_path/$2/hugepages/hugepages-1048576kB/nr_hugepages
    }
    
    reserve_pages number_of_pages node

    Por ejemplo, para reservar dos páginas de 1GB en node0 y una página de 1GB en node1, sustituya number_of_pages por 2 para node0 y 1 para node1:

    reserve_pages 2 node0
    reserve_pages 1 node1
  5. Crear un script ejecutable:

    # chmod x /usr/lib/systemd/hugetlb-reserve-pages.sh
  6. Habilitar la reserva de arranque anticipado:

    # systemctl enable hugetlb-gigantic-pages
Nota
  • Puedes intentar reservar más páginas de 1GB en tiempo de ejecución escribiendo en nr_hugepages en cualquier momento. Sin embargo, estas reservas pueden fallar debido a la fragmentación de la memoria. La forma más fiable de reservar páginas de 1GB es usando este script hugetlb-reserve-pages.sh, que se ejecuta antes durante el arranque.
  • Reservar páginas enormes estáticas puede reducir efectivamente la cantidad de memoria disponible para el sistema, y evita que éste utilice adecuadamente toda su capacidad de memoria. Aunque una reserva de páginas enormes reservadas del tamaño adecuado puede ser beneficiosa para las aplicaciones que la utilizan, una reserva de páginas enormes reservadas sobredimensionada o no utilizada acabará siendo perjudicial para el rendimiento general del sistema. Al establecer un pool de páginas enormes reservadas, asegúrese de que el sistema puede utilizar correctamente toda su capacidad de memoria.

Recursos adicionales

  • Para más información, consulte la documentación pertinente del núcleo, que se instala en el archivo /usr/share/doc/kernel-doc-kernel_version/Documentation/vm/hugetlbpage.txt.
  • Para más información, consulte la página de manual systemd.service.