Red Hat Training

A Red Hat training course is available for RHEL 8

23.4. Configuração do HugeTLB no momento da inicialização

O tamanho da página, que o subsistema HugeTLB suporta, depende da arquitetura. A arquitetura x86_64 suporta 2 MB de páginas enormes e 1 GB de páginas gigantescas.

Este procedimento descreve como reservar uma página de 1 GB no momento da inicialização.

Procedimento

  1. Criar um pool HugeTLB para 1 GB de páginas, anexando a seguinte linha às opções de linha de comando do kernel no arquivo /etc/default/grub como root:

    padrão_hugepagesz=1G hugepagesz=1G
  2. Regenerar a configuração GRUB2 usando o arquivo padrão editado:

    1. Se seu sistema utiliza firmware BIOS, execute o seguinte comando:

      # grub2-mkconfig -o /boot/grub2/grub.cfg
    2. Se seu sistema utiliza a estrutura UEFI, execute o seguinte comando:

      # grub2-mkconfig -o /boot/efi/efi/EFI/redhat/grub.cfg
  3. Crie um novo arquivo chamado hugetlb-gigantic-pages.service no diretório /usr/lib/systemd/system/ e adicione o seguinte conteúdo:

    [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. Crie um novo arquivo chamado hugetlb-reserve-pages.sh no diretório /usr/lib/systemd/ e adicione o seguinte conteúdo:

    Ao adicionar o seguinte conteúdo, substitua number_of_pages pelo número de páginas de 1GB que você deseja reservar, e node pelo nome do nó no qual 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 exemplo, para reservar duas páginas de 1GB em node0 e uma página de 1GB em node1, substituir o number_of_pages por 2 para node0 e 1 para node1:

    reserve_pages 2 node0
    reserve_pages 1 node1
  5. Criar um roteiro executável:

    # chmod x /usr/lib/systemd/hugetlb-reserve-pages.sh
  6. Habilitar a reserva antecipada da bota:

    # systemctl permite páginas hugetlb-gigantic-pages
Nota
  • Você pode tentar reservar mais páginas de 1GB em tempo de execução, escrevendo para nr_hugepages a qualquer momento. Entretanto, tais reservas podem falhar devido à fragmentação da memória. A maneira mais confiável de reservar páginas de 1GB é usando este script hugetlb-reserve-pages.sh, que roda cedo durante a inicialização.
  • Reservar páginas enormes estáticas pode efetivamente reduzir a quantidade de memória disponível para o sistema e impedi-lo de utilizar adequadamente toda a sua capacidade de memória. Embora um pool de páginas enormes reservadas possa ser benéfico para aplicações que o utilizam, um pool de páginas enormes reservadas ou não utilizadas eventualmente será prejudicial ao desempenho geral do sistema. Ao definir um grande pool de páginas reservadas, certifique-se de que o sistema possa utilizar adequadamente toda a sua capacidade de memória.

Recursos adicionais

  • Para mais informações, consulte a documentação pertinente do kernel, que está instalada no arquivo /usr/share/doc/kernel-doc-kernel_version/Documentation/vm/hugetlbpage.txt.
  • Para mais informações, consulte a página de manual systemd.service.