
Configurei o Huge Pages para uso com Java e parece estar funcionando bem, embora eu tenha uma dúvida sobre a contabilidade em /proc/meminfo. Ilustrar
# grep HugePages /proc/meminfo
AnonHugePages: 274432 kB
HugePages_Total: 1008
HugePages_Free: 596
HugePages_Rsvd: 594
HugePages_Surp: 0
Minha pergunta diz respeito aos números "Grátis" e "Rsvd" - por que eles não somam o "Total" de 1008? Na verdade, eles somam 1190. O que não estou entendendo aqui?
Responder1
Isso ocorre porque HugePages_rsvd é essencialmente lido em HugePages_Free. Ou seja, das 596 páginas enormes gratuitas, 594 já estão reservadas para uso por algum aplicativo. Isto é, o kernel comprometeu-se a que essas 594 páginas enormes estejam disponíveis para a aplicação.
Se houver uma solicitação de 3 páginas enormes agora, ela falhará, pois apenas 2 estão disponíveis para reserva. Pense nisso como uma chamada malloc(), quando você reserva páginas virtuais de memória para contabilizar o VSZ do processo, mas quando o processo realmente as utiliza, ele se torna o RSZ (conjunto em execução) do processo.
Como páginas enormes sempre residem na memória principal, quando um aplicativo as solicita, o kernel diminui o pool livre e aumenta o contador Rsvd.
Isto é da fonte do kernel.https://www.kernel.org/doc/Documentation/vm/hugetlbpage.txt
where:
HugePages_Total is the size of the pool of huge pages.
HugePages_Free is the number of huge pages in the pool that are not yet
allocated.
HugePages_Rsvd is short for "reserved," and is the number of huge pages for
which a commitment to allocate from the pool has been made,
but no allocation has yet been made. Reserved huge pages
guarantee that an application will be able to allocate a
huge page from the pool of huge pages at fault time.
HugePages_Surp is short for "surplus," and is the number of huge pages in
the pool above the value in /proc/sys/vm/nr_hugepages. The
maximum number of surplus huge pages is controlled by
/proc/sys/vm/nr_overcommit_hugepages.