temos vários servidores em cluster e queremos saber em que casos precisamos configurar páginas enormes?
Eu também tenho algumas perguntas
- dose "tamanho da página de memória" é igual a páginas enormes?
no meu servidor Linux, digitei o seguinte comando para verificar o tamanho da página de memória padrão
grep Hugepagesize /proc/meminfo
Hugepagesize: 2048 kB
getconf PAGESIZE
4096
mas como todos veem aqui, obtemos resultados diferentes, por quê?
quais são os riscos ao usar páginas enormes?
dose Desabilitar Transparent Huge Page - significa desabilitar a opção HUGE PAGES?
Responder1
Hugepages são interessantes quando os aplicativos precisam de grandes mapeamentos aos quais farão acessos aleatórios, porque esse é o pior caso possível para o Translation Lookaside Buffer (TLB). Você troca a granularidade do mapeamento por entradas TLB.
As páginas, incluindo páginas enormes, só podem ser mapeadas para um bloco de memória física do mesmo tamanho e alinhadas a esse tamanho. Portanto, uma página enorme de 2 MB precisa ser mapeada para um limite de 2 MB na RAM física, e uma página enorme de 1 GB precisa ser mapeada para um limite de 1 GB, porque os bits mais baixos endereçam os dados dentro da página e nenhum deslocamento pode ser adicionado aqui.
Isso significa que páginas enormes geralmente são reservadas na inicialização do sistema, quando a memória física ainda não está fragmentada. Aplicativos que reconhecem páginas enormes podem usar hugetlbfs
para alocá-los.
Você tem que decidir com um parâmetro do kernel se as páginas enormes devem ter 2 MB ou 1 GB de tamanho, você não pode misturá-las. Páginas normais de 4kB estão sempre disponíveis.
O caso de uso mais comum são máquinas virtuais (qemu/kvm pode usar enormes páginas), onde isso permite manter todo o mapeamento de memória da VM em um pequeno número de entradas TLB, que portanto nunca são despejadas, portanto, os acessos à memória dentro da VM exigem uma página pesquisa de tabela apenas dentro do contexto do convidado.
Alguns sistemas de banco de dados também suportam páginas enormes, mas isso geralmente só é útil se você trabalhar com grandes conjuntos de dados e índices.
As questões:
Existem páginas normais (4 KB) e páginas enormes (2 MB ou 1 GB). Ao consultar o tamanho da página, você obtém o tamanho das páginas normais; ao consultar o tamanho da página enorme, obtém a configuração para as páginas enormes. Páginas normais e grandes podem ser usadas em paralelo, mas você não pode misturar diferentes tamanhos de páginas enormes.
Você obtém resultados diferentes porque são duas coisas diferentes. O tamanho das páginas normais é fixado no hardware, portanto não é uma configuração.
Páginas enormes precisam ser alocadas antecipadamente e, embora a memória seja tecnicamente "livre", ela não pode ser usada para nada além de aplicativos com reconhecimento de páginas enormes, portanto, todos, exceto esses aplicativos, terão menos memória disponível. Isso geralmente não é um problema, porque você usaria páginas enormes em máquinas dedicadas a aplicativos que exigem muita memória, como VMs ou bancos de dados.
Hugepages transparentes tentam disponibilizar a memória como buffers e caches (ao contrário do item 3) e tentam fornecer páginas enormes para aplicativos que mapeiam grandes blocos de memória, para que aplicativos que não tenham reconhecimento de páginas enormes ainda possam lucrar com eles - basicamente um aplicativo que solicita um bloco de memória de 2 MB/1 GB e receberá uma página enorme, se possível. Se isso ajuda ou prejudica o desempenho depende de seus aplicativos. Se você tiver um aplicativo com reconhecimento de páginas enormes e quiser atribuir a memória manualmente, será necessário desabilitar o THP, enquanto um sistema que possui um aplicativo de banco de dados que não entende páginas enormes provavelmente se beneficiaria.
Responder2
Casos de uso óbvios para páginas enormes são quando PageTables (visíveis em /proc/meminfo) chegam a dezenas de GB. Isso significa grande sobrecarga de memória e CPU apenas para rastrear sua memória. Isso acontece com pedaços gigantes de memória, grande número de processos ou ambos. Freqüentemente em aplicativos de banco de dados.
Páginas enormes reduzem significativamente essa sobrecarga porque uma única entrada de tabela de página agora aborda muito mais memória, digamos 2.048 KB em vez de 4 KB. (Existem tamanhos diferentes em outras plataformas, o AIX on POWER suporta páginas grandes de 16 MB, por exemplo.)
Páginas enormes no Linux podem não ser usadas para cache de arquivos e são irritantes e ineficientes para alguns MB em malloc() para memória não compartilhada. Portanto, o administrador precisa alocar enormes conjuntos de páginas que só podem ser usados para alguns propósitos. Esta é uma desvantagem de usar páginas enormes.
As páginas enormes transparentes (THP) tentam tornar a administração menos incômoda, "desfragmentando" automaticamente a memória contígua em páginas enormes. A ideia era tornar opcionais páginas enormes pré-alocadas. Os benefícios são altamente específicos para a carga de trabalho, é possível que gaste muita CPU para valer a pena. Desativar o THP significa que você ainda pode alocar páginas enormes manualmente. Às vezes vale a pena desligar o THP e apenas colocar os segmentos de memória compartilhada do banco de dados em páginas enormes.
Uma última reclamação sobre as páginas enormes do Linux: acho irritante gerenciá-las.
- A memória compartilhada usa uma interface, mas para as outras você usa uma biblioteca e um sistema de arquivos Hugetlbfs.
- Você pode "desperdiçar" memória alocando páginas muito grandes e não configurando seu aplicativo para usá-la.
- Esse número de páginas deve ser dimensionado para cada tamanho de host, porque é uma contagem de páginas e não uma porcentagem de memória.
- Freqüentemente, a capacidade de alocar páginas enormes fica restrita a um grupo; a troca de usuários do banco de dados pode levar a um desperdício surpreendente de memória.