Hugepages são interessantes quando os aplicativos precisam de grandes mapeamentos para os quais farão acessos aleatórios, porque esse é o pior caso possível para o Translation Lookaside Buffer (TLB). Você troca a granularidade de mapeamento por entradas de TLB.
As páginas, incluindo as páginas de entrada, só podem ser mapeadas para um bloco de memória física do mesmo tamanho e alinhadas a esse tamanho. Portanto, uma página de 2 MB precisa ser mapeada para um limite de 2 MB na RAM física, e uma página de 1 GB precisa ser mapeada para um limite de 1 GB, porque os bits inferiores endereçam dados dentro da página e nenhum deslocamento pode ser adicionado aqui. p>
Isso significa que as páginas iniciais geralmente são reservadas no início do sistema, quando a memória física ainda não está fragmentada. Aplicativos que estão ciente da página do mouse podem usar hugetlbfs
para alocá-los.
Você tem que decidir com um parâmetro de kernel se as páginas de entrada 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 as máquinas virtuais (qemu / kvm pode usar as páginas de entrada), onde isso permite manter todo o mapeamento de memória da VM em um pequeno número de entradas de TLB, que nunca são despejadas, portanto, acessos de memória dentro da VM requer uma consulta à tabela de páginas somente dentro do contexto convidado.
Alguns sistemas de banco de dados também suportam páginas de entrada, mas isso geralmente só é útil se você trabalha com grandes conjuntos de dados e índices.
As perguntas:
-
Existem páginas normais (4kB) e páginas enormes (2MB ou 1GB). Quando você consulta o tamanho da página, você obtém o tamanho para páginas normais, quando você consulta o tamanho de página enorme, você obtém a configuração para as páginas grandes. Páginas normais e grandes podem ser usadas em paralelo, mas você não pode misturar tamanhos de páginas enormes.
-
Você obtém resultados diferentes porque essas são duas coisas diferentes. O tamanho das páginas normais é fixado no hardware, por isso não é uma configuração.
-
Páginas enormes precisam ser alocadas antecipadamente e, embora a memória seja tecnicamente "gratuita", ela não pode ser usada para nada além de aplicativos com muita página de conhecimento, de modo que todos esses aplicativos terão menos memória disponível. Isso geralmente não é um problema, porque você usaria as páginas grandes em máquinas dedicadas a aplicativos que exigem muita memória, como VMs ou bancos de dados.
-
Abraces transparentes tentam disponibilizar a memória como buffers e caches (ao contrário do # 3), e tentam dar mais páginas a aplicativos que mapeiam grandes blocos de memória, para que aplicativos que não tenham conhecimento de páginas suficientes possam lucrar com eles - basicamente, uma aplicação que solicite um bloco de memória de 2MB / 1GB receberá uma página, se possível. Se isso ajuda ou prejudica o desempenho depende de seus aplicativos. Se você tem um aplicativo que reconhece a página de tamanho e deseja atribuir a memória manualmente, é necessário desativar o THP, enquanto um sistema que tenha um aplicativo de banco de dados que não entende as páginas maiores provavelmente se beneficiará.