É 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.