No modo de write-back, o QEMU / KVM escreve através do pagecache do host, basicamente como qualquer outro programa do userspace. Para obter informações sobre o conteúdo e a atividade do pagecache, você pode emitir:
[user@localhost ~]$ grep -i "^cache\|dirty\|writeback:" /proc/meminfo
Cached: 84548 kB
Dirty: 0 kB
Writeback: 0 kB
Examinando a saída, podemos ver:
-
Em cache: é a quantidade de memória usada para o cache de leitura. Se você ler algo no guest, ele terminará both no cache de memória do host e na pagecache do convidado. Alguém vê esse cache duplo como um desperdício de recursos; na realidade, o cache somente leitura pode ser imediatamente descartado se estiver sob pressão de memória. Por outro lado, o cache do host geralmente é muito maior que o do convidado, portanto, um incremento de desempenho líquido pode ser obtido ativando o cache de write-back do QEMU (vs acesso direto);
-
Dirty: representa a quantidade de memória a ser escrita (ou seja, alterada). Para recuperar essa memória, o sistema deve gravar as alterações nos discos. Isso significa que, dependendo do subsistema IO subjacente, a recuperação de página suja pode ser lenta;
-
Writeback: é a quantidade de memória que o sistema está atualmente gravando nos discos, ambos devido à pressão da memória (e recuperação de página suja) e tempo (depois de, no máximo, 30s, as páginas sujas são gravadas no disco).
Para resumir, a maravilha do pagecache é que ele é automaticamente gerenciado pelo sistema host em resposta à pressão da memória e outros fatores (por exemplo: várias entradas sysctl
). Como geralmente causa um incremento de desempenho líquido no sistema convidado, eu configuro a maioria das minhas máquinas virtuais com cache de write-back.
Mais algumas informações podem ser encontradas aqui