No Linux, dado DirectMap4k, DirectMap2M, DirectMap4M e DirectMap1G, por que nr_hugepages?

1

Parece que o kernel está usando páginas enormes de qualquer maneira, então por que um parâmetro específico do kernel especificando o número de páginas enormes para manter em reserva?

Afinal /proc/meminfo exibe valores para DirectMap4K , DirectMap4M e DirectMap1G , indicando o número de entradas da tabela de páginas existentes para cada tamanho de página . Então, claramente, páginas maiores que 4KiB estão sendo usadas.

Por que /proc/sys/vm/nr_hugepages e amigos ainda existem?

    
por Omnifarious 07.07.2017 / 02:36

1 resposta

1

nr_hugepages ainda existe porque é complementar aos outros valores que você mencionou. A documentação do kernel tem todos os detalhes, mas basicamente, /proc/sys/vm/nr_hugepages mostra o número de persistentes enormes páginas do tamanho padrão dentro do enorme pool de páginas do kernel (cujo tamanho é mostrado por HugePages_Total in /proc/meminfo ). nr_hugepages é uma configuração controlada pelo administrador, definida na inicialização usando o parâmetro hugepages kernel e / ou em tempo de execução gravando em nr_hugepages (desde que o sistema seja capaz de fornecer o número solicitado de páginas grandes).

O objetivo de nr_hugepages é disponibilizar páginas enormes para programas userspace , via hugetlbfs ou memória compartilhada ou mmap . O número de páginas alocadas via nr_hugepages constitui um conjunto de páginas grandes reservadas para esse uso; Se os recursos do sistema permitirem, mais páginas grandes podem estar disponíveis (até o limite definido por nr_overcommit_hugepages ), mas isso não é garantido. Está disponível em todas as plataformas que suportam páginas enormes. Essas páginas são úteis para programas que fazem grandes alocações de memória, mas introduzem restrições - em particular, elas não podem ser trocadas.

Como mencionado em o que significa, por hardware, os campos DirectMap4k, DirectMap2M no arquivo “/ proc / meminfo” do Linux? / a>, DirectMap é um detalhe de implementação específico do x86. Mede o uso de mapas de páginas para páginas de vários tamanhos, pelo kernel ; Isso mostra o quanto o kernel conseguiu mapear páginas como páginas enormes de vários tamanhos. Isso não é limitado por nr_hugepages : mesmo em um sistema sem páginas enormes no enorme pool de páginas (para espaço do usuário), o kernel tentará coalescer os mapeamentos de página para reduzir a carga de TLB (veja try_preserve_large_page em pageattr.c ).

    
por 08.07.2017 / 15:26