Onde fica a memória restante de vm.overcommit_ratio?

7

Se eu desabilitar o overcommit de memória definindo vm.overcommit_memory para 2 , por padrão, o sistema permitirá alocar a memória até a dimensão swap + 50% da memória física, conforme explicado here .

Eu posso alterar a taxa modificando o parâmetro vm.overcommit_ratio . Digamos que eu configurei para 80%, então 80% da memória física pode ser usada.

Minha pergunta é:

  • o que o sistema fará com os 20% restantes?
  • por que esse parâmetro é necessário em primeiro lugar?
  • por que eu não deveria sempre configurá-lo para 100%?
por Dan Tumaykin 06.07.2016 / 11:15

2 respostas

4

What the system will do with the remaining 20%?

O kernel usará a memória física restante para seus próprios propósitos (estruturas internas, tabelas, buffers, caches, o que for). A configuração de supercomprometimento de memória manipula reservas de memória virtual do aplicativo userland, o kernel não usa memória virtual, mas físico.

Why is this parameter required in first place?

O parâmetro overcommit_ratio é uma opção de implementação projetada para impedir que os aplicativos reservem mais memória virtual do que o que estará razoavelmente disponível para eles no futuro, ou seja, quando eles realmente acessam a memória (ou pelo menos tentam).

A configuração de overcommit_ratio para 50% foi considerada um valor padrão razoável pelos desenvolvedores do kernel do Linux. Ele supõe que o kernel nunca precisará usar mais de 50% da RAM física. Sua milhagem pode variar, a razão pela qual é um ajuste.

Why I should not always set it to 100%?

Configurar para 100% (ou qualquer valor "muito alto") não desabilita o supercomprometimento de forma confiável porque você não pode assumir que o kernel usará 0% (ou muito pouco) de RAM.

Ele não impedirá que os aplicativos travem, já que o kernel pode se apropriar de qualquer maneira de toda a memória física que ele exige.

    
por 08.07.2016 / 14:36
1

Configurar a proporção para 100% não reserva espaço para páginas lastreadas em arquivos ou alocações no kernel, como código do kernel, buffers de rede, etc.

As estruturas do kernel serão alocadas independentemente, causando supercomprometimento. Eles geralmente são limitados individualmente (por exemplo, há uma configuração para buffers de rede). Eu não acho que haja um limite geral de 50%, embora um limite geral seja algo que foi trabalhado com a finalidade de hospedar contêineres.

O principal uso de páginas lastreadas em arquivos é executar o código do espaço do usuário, então você também precisa de espaço para isso.

    
por 09.07.2016 / 19:30