Configurando Hugepages Transparentes; [sempre], [madvise] ou [nunca]

3

Temos um monte de servidores de pilha Centos 7 LAMP de uso geral que executam o apache com bancos de dados MariaDB subjacentes.

De documentos de ajuste de desempenho do RedHat para o RHEL 6 :

Trasparent Hugepages (THP) hides much of the complexity in using huge pages from system administrators and developers. As the goal of THP is improving performance, its developers (both from the community and Red Hat) have tested and optimized THP across a wide range of systems, configurations, applications, and workloads. This allows the default settings of THP to improve the performance of most system configurations. However, THP is not recommended for database workloads.

O que parece ótimo, até a seção do banco de dados. De fato, algumas das opções do MariaDB, como o mecanismo TokuDB, na verdade, exigem que o THP seja desativado.

Muitos dos guias que encontrei para desabilitar o THP instruem a alteração da configuração padrão de transparent_hugepages= always para never .

No entanto, dos documentos RedHat Performance Tuning para RHEL 7 :

To prevent applications from allocating more memory resources than necessary, you can disable huge pages system-wide and only enable them inside MADV_HUGEPAGE madvise regions

Se eu tiver lido isso corretamente, transparent_hugepages= madvise parece ser uma opção muito melhor, permitindo que os processos que se beneficiam com o THP os usem e aqueles que não o usem.

Eu encontrei um artigo sugerindo essa abordagem.

Por que essa não é a opção padrão?

Há alguma situação em que usar transparent_hugepages= never seja mais sábio que madvise ?

    
por Arth 07.02.2018 / 14:52

1 resposta

3

É a diferença entre opt-in (madvise) e opt-out (sempre). Aplicativos sensíveis ao THP podem ser desativados mesmo sob transparent_hugepages=always . Por exemplo, os aplicativos que usam jemalloc são notavelmente sensíveis a ele (redis, go rt, rust rt) e jemalloc oferece a opção em tempo de compilação como parte da configuração do alocador para usar MADV_NOHUGEPAGE. Começando com o kernel 3.15 (o RHEL7 vem com o 3.10), eles podem optar por uma saída por processo usando prctl(PR_SET_THP_DISABLE) .

O padrão always geralmente deve ser bom porque a localidade dos dados é uma propriedade muito comum para aplicativos que fazem grandes alocações. Os bancos de dados são a exceção notável em que eles sofrem acessando pequenos trechos em um grande número de grandes alocações (e podem desativar o THP).

A documentação do kernel para páginas de página transparentes sugere que transparent_hugepage=never é mais uma opção de depuração do que uma solução recomendada. Só é preferível transparent_hugepage=madvise quando o software está com bugs; ie. quando o desenvolvedor está usando MADV_HUGEPAGE incorretamente.

    
por 07.02.2018 / 17:43

Tags