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.