Reduzindo o desperdício de cache nas VMs de Windwows

1

Em Existe uma maneira de redefinir o cache de arquivos do Windows? aprendemos como usar o RamMap para liberar o cache de arquivos do Windows, o que foi legal.

Eu sou a única pessoa a pensar que reduzir os tamanhos de cache nas VMs do Windows é uma vitória óbvia? A maioria dos cache de convidados é um recurso desperdiçado. Se você pudesse colocar o cache em uma dieta, você poderia reduzir as alocações de memória do convidado sem aumentar a troca.

Portanto, a questão é: como você obtém o equivalente a algo como o RAMMap Empty Standby List sendo executado como um processo agendado? O RamMap não aceita argumentos além do log. Uma tarefa agendada para liberar o cache seria tosca, mas melhor do que ter que acomodar um algoritmo de cache que nunca foi projetado e que a MS parece não ter se incomodado em se adaptar, para virtualização.

Outras sugestões são bem-vindas.

    
por antevansi 03.04.2013 / 13:36

2 respostas

0

Depois de experimentar um pouco, estou obtendo os melhores resultados para 1. ingerir os convidados de RAM e 2. fazer o cache da E / S de convidados no host.

Por exemplo, em vez de executar o Win 7 64 com 2.5GB de RAM e fazer com que ele faça seu próprio cache, dê a ele 1GB, mais pelo menos 1GB de espaço de troca e ative o cache para o controlador de disco virtual relevante. Por acaso estou usando o VirtualBox, o que torna isso fácil.

Isso parece ineficiente, mas parece forçar um regime de alocação de memória mais conservador pelo hóspede, o que leva a menos desperdício (visível). Há mais troca, mas a troca é armazenada em cache, portanto, seu efeito é diminuído. Alguns dados serão armazenados em cache duas vezes, mas o valor é proporcionalmente menor por causa do cache de guest menor (algumas centenas de MB em vez de algo próximo de 1 GB).

No geral, esta parece ser uma estratégia de otimização melhor. Quando há menos convidados, eles obtêm o benefício de um cache de host maior. Quando há mais, eles são alocados mais recursos (cache) de acordo com a necessidade, não de acordo com uma alocação de memória fixa e pessimista.

Conclusão geral: o modelo de memória virtual é mal adaptado à virtualização de hardware, e não houve muito esforço para torná-lo ajustável ou adaptável à execução em uma VM, pelo menos pela MSFT.

    
por 02.10.2013 / 11:09
0

Alguns pontos a considerar:

O cache de arquivos do Windows (reativo, aquele que usa o mapeamento de arquivos, está lá desde o NT 3.1) não está na lista de páginas em espera. Costumava estar no "conjunto de trabalho do sistema" catch-all. A partir do Windows 7, o conjunto de trabalho foi dividido em quatro e o cache de arquivos agora está em um conjunto de trabalho próprio. No PerfMon, são os "Bytes residentes do cache do sistema" e também "Bytes do cache", ambos no objeto Memória. Na aba "Use Counts" do RAMmap, isso faz parte do que está na interseção de "active", "Mapped file". O recurso "Conjunto de trabalho do sistema vazio" no RAMmap libera esse conjunto de trabalho (mas ele geralmente não fica descarregado por muito tempo).

O cache de arquivos do Windows normalmente é envolvido apenas para arquivos pequenos (em um MB ou mais). A maioria dos programas usa o mapeamento de arquivos para acessar arquivos grandes, e o mapeamento de arquivos não passa pelo cache de arquivos do Windows (mesmo que o cache use o mapeamento de arquivos nos arquivos com os quais ele lida).

O superfetch usa a lista de páginas em espera, mas não remove nada nem adiciona nada à lista de páginas em espera. Apenas reaproveita essas páginas. Então, se livrar do Superfetch (facilmente feito desabilitando seu serviço) não vai mudar o tamanho da sua lista de páginas em standby. Significa apenas que as páginas de baixa prioridade nessa lista não serão reaproveitadas para o Superfetch. Eles permanecerão em uso como um cache de páginas recentemente retiradas dos conjuntos de trabalho durante a substituição do conjunto de trabalho.

    
por 12.08.2014 / 04:06