Memória virtual e taxa de commit

1

Eu li muito sobre cometer cobrança e algo ainda está me incomodando. No meu mac (e provavelmente no linux também), qual é a relação entre o tamanho da VM e a memória Commit (windows). Eu acho que entendo completamente commit após alguns testes, mas no windows não parece que a quantidade de memória virtual exceda o espaço de swap + ram. IN OSX (e linux) o tamanho da VM parece quase exceder o tamanho do meu disco rígido! Eu estou supondo que inclui memória compartilhada mais de uma vez, ou inclui alocado, mas intocado ou gravado na memória. Digamos que eu faça um malloc (2gb) (obviamente não é assim), é diferente de realmente escrever para esse 2gb inteiro.

Então, isso me leva à minha pergunta, o que é exatamente o tamanho da VM medindo no OSX e no Linux. É um total de todas as chamadas malloc, por exemplo (ou VM total possível, por exemplo, incluindo praticamente 4GB para cada processo em uma máquina de 64 bits) e como isso se compara ao Commit (limite, pico, uso) nas janelas? As janelas não permitem que você aloque mais do que o seu limite de troca + ram, como o OSX e o Linux fazem e por quê?

Nas imagens abaixo você pode ver que no windows swap + ram é igual a commit (2gb). No OSX, meu tamanho de VM é superior a 200 GB em um disco rígido de cerca de 200 GB.

    
por rubixibuc 14.02.2012 / 23:05

1 resposta

2

O tamanho da VM é a quantidade total de espaço de endereço usado pelo processo. Nenhum sistema operacional permite que você exceda a RAM + troca disponível com a VM suportada , mas você pode usar a VM sem lances. Essencialmente, o tamanho da VM (especialmente em sistemas operacionais de 64 bits) é uma medida sem sentido. A memória virtual não-revertida (memória virtual que não pode, e não pode, requer RAM ou troca) é essencialmente gratuita, então não há razão para se preocupar com o quanto ela está sendo usada.

Em um sistema operacional de 64 bits, você pode abrir um arquivo de 2 GB somente leitura e mapear todo o arquivo para o espaço de endereço do processo. Isso "consome" 2 GB de VM, mas na verdade não requer recursos significativos. E como é um mapeamento somente de leitura, ele nunca pode exigir troca.

Confirme as medidas que suportam a memória virtual, ou seja, memória virtual que poderia resultar no consumo de memória física ou espaço de paginação / troca. O sistema operacional não tem idéia de quanto dessa memória será necessária, então geralmente não permitirá mais do que RAM + swap ser alocado. (Até onde sei, nem o Windows nem o OSX permitem o comprometimento excessivo da memória virtual suportada. O Linux o faz.)

    
por 14.02.2012 / 23:32