Desativar o cache de disco no Windows XP usando a linha de comando?

1

Eu sempre quis criar uma instalação realmente enxuta e otimizada do Windows XP para usar com o VMware, desabilitando tudo o que é inútil para o caso de uso.

Eu usei alguns dias com o nLite e tenho uma instalação realmente enxuta - não muito agressiva (cara, há algumas ressalvas em ajustes e remoção de coisas com o nLite!). O ISO é realmente incrível.

Agora, no espírito do momento, estou tentando montar um script em lote pós-instalação que irá aplicar o último punhado de ajustes que eu não posso fazer com o nLite, mas eu ainda gostaria de automatizar.

Um desses ajustes é desabilitar o cache de disco, já que já está ocorrendo o armazenamento em cache no meu SO host, então prefiro que o Windows não use nada de sua preciosa (e escassa) memória no cache de disco.

É fácil fazer o uso da GUI assim que tudo estiver configurado, mas seria muito legal se eu pudesse fazer isso no meu script em lote. Especificamente para desativar o cache de disco em cada unidade (tenho duas unidades na minha configuração, uma delas é persistente para arquivos temporários e de permuta, para que eles não percam espaço em snapshots) ou talvez haja um serviço do sistema ou semelhante que possa ser desativado, desativando o cache em todo o sistema de uma só vez?

Agradeço antecipadamente quaisquer ideias :)

Daniel

EDIT: Apenas para evitar o debate "desativando gravação em cache é ruim" (eu realmente só gostaria respostas para minha pergunta :) Obrigado).

Benchmarks ATTO para nenhum cache de gravação (à esquerda) e cache de gravação (à direita):

ATTO benchmarks for no write caching (left) and write caching (right)

EDIT 2: Como por inspiração por @ techie007, eu tentei determinar os benefícios de memória de desligar o cache em primeiro lugar. Como você pode ver por essas capturas de tela, nada é realmente obtido desativando o cache, pelo menos no que diz respeito à memória. Qualquer alteração aqui seria inteiramente dentro da incerteza estatística.

Para o registro, eu não sabia exatamente a melhor maneira de fazer isso, então, para ambas as execuções, reiniciei a máquina, deixei-a descansar um pouco, depois executei o ATTO e monitorei o uso da mem durante e após uma corrida.

Os dois primeiros estão com o cache de gravação ativado (durante o ATTO, depois depois):

enter image description here

enter image description here

Os próximos dois são o mesmo cenário, mas com o cache de gravação desativado:

enter image description here

enter image description here

DanielSmedegaardBuus
fonte
Os benchmarks da ATTO são interessantes, com certeza. Você tem algum benchmark mostrando os benefícios que a desativação do cache de gravação oferece? Há menos uso de memória mensurável? Menos uso da CPU? Menos processos em execução?
Ƭᴇcʜιᴇ007
@ techie007 - Essa é uma boa pergunta. Eu estou apenas supondo que o efeito seria menos consumo de memória. Vou fazer alguns testes e reportar de volta.
DanielSmedegaardBuus
@ techie007 - Como você pode ver na minha edição, não há nenhum benefício real! Obrigado por me fazer testar isso :)
DanielSmedegaardBuus
Venha para pensar sobre isso, este tipo de otimização parece ser um acéfalo para implementar no VMware Tools em primeiro lugar, então isso é provavelmente o que já está acontecendo.
DanielSmedegaardBuus

Respostas:

1

Não é possível. O Windows realmente não tem um cache de disco, ele tem um cache de páginas e todo o subsistema de gerenciamento de memória é construído em torno dele. Até mesmo coisas como rastrear qual memória está ativa e qual memória está inativa são gerenciadas através da proteção de página no cache de páginas.

Se o convidado não controlar o armazenamento em cache, isso significa que o convidado terá que passar todos os acessos ao disco para o host, para que ele saiba o que manter na memória. Os programas rodariam a uma velocidade microscópica, uma vez que uma falha suave até o host seria causada por cada código de tempo percorrido um limite de página. Esse é apenas o problema mais óbvio, há muito mais que seria horrível.

Seria como construir um carro todos os dias para ir ao trabalho.

David Schwartz
fonte
Oi David :) Obrigado por responder! Eu acho que posso ter me expressado mal ... Você pode estar certo sobre o cache de leitura, mas pelo menos temos uma opção para desativar o cache de gravação (que é desativado por padrão para pendrives, por exemplo). Isso é facilmente desabilitado via GUI, mas eu gostaria de fazê-lo a partir da linha de comando. E se for possível (o que você sugere não), o mesmo vale para o cache de leitura. Felicidades :)
DanielSmedegaardBuus
@DanielSmedegaardBuus Isso não proporcionará nenhum benefício. Por que você acha que terá algum benefício ao desativar o cache de gravação?
David Schwartz
Bem, porque eu já tenho cache de gravação no meu host. Portanto, qualquer operação de gravação já retornaria praticamente imediatamente, mesmo quando sincronizada, já que o sistema operacional hospedeiro recebe a solicitação de gravação, lança-a no cache e retorna. Além disso, estou em um Air 2013 com mais de 700 MB / s de leituras e gravações. Além disso, a maior parte do que eu estaria escrevendo seria para pastas compartilhadas no host via vmhgfs.
DanielSmedegaardBuus
@DanielSmedegaardBuus Ter que passar o pedido através do convidado para o host seria tudo menos imediato. Eu acho que você está perdendo que o ponto principal do cache de gravação é agregar muitas pequenas gravações em algumas grandes.
David Schwartz
Passar o pedido através de? O que você quer dizer? O pedido de gravação? Como isso não seria passado de qualquer forma? A única diferença que posso ver é se as gravações são enfileiradas na RAM de convidado e depois liberadas intermitentemente para o host (cache), ou se as gravações são enfileiradas no cache do host e liberadas intermitentemente no disco. Como meu benchmark ATTO exibe, o desempenho de E / S é o mesmo. O que você quer dizer sobre eu perder o ponto do cache de gravação? Meu ponto é que já existe um cache de gravação no host, então outro no guest não vai ajudar muito com o desempenho.
DanielSmedegaardBuus
1

E a resposta final será que sim, você pode fazer da maneira (feia) que eu descrevi antes, mas não há nenhum benefício em fazê-lo (pelo menos com o XP).

O uso da memória é praticamente o mesmo, assim como o desempenho.

Então, no geral, isso é uma boa notícia, já que implementá-lo no meu script estava sendo muito difícil!

Obrigado a todos por cutucando para mim;)

DanielSmedegaardBuus
fonte
0

Bem, fazer esse benchmarking na verdade acabou sendo uma experiência de ducking de borracha :)

Esta não é uma resposta realmente boa, a menos que você saiba que está em um caso de uso realmente específico, como o meu com o VMware. Porque você pode fazer isso através de chaves de registro, mas somente se você souber o caminho para as chaves.

Aqui estão os comandos no meu caso:

reg add "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\IDE\DiskVMware_Virtual_IDE_Hard_Drive___________00000001\3030303030303030303030303030303030303130\Device Parameters\Disk" /v UserWriteCacheSetting /t REG_DWORD /d 00000000 /f
reg add "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\IDE\DiskVMware_Virtual_IDE_Hard_Drive___________00000001\3130303030303030303030303030303030303130\Device Parameters\Disk" /v UserWriteCacheSetting /t REG_DWORD /d 00000000 /f

reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\IDE\DiskVMware_Virtual_IDE_Hard_Drive___________00000001\3030303030303030303030303030303030303130\Device Parameters\Disk" /v UserWriteCacheSetting /t REG_DWORD /d 00000000 /f
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\IDE\DiskVMware_Virtual_IDE_Hard_Drive___________00000001\3130303030303030303030303030303030303130\Device Parameters\Disk" /v UserWriteCacheSetting /t REG_DWORD /d 00000000 /f

Isso é para as duas unidades no adaptador virtual ide0 - o primário e o escravo. Pelo menos no Fusion 6.

Eu preferiria muito mais fazer uma pesquisa por UserWriteCacheSetting e depois desabilitar cada um deles, mas não sei como faria isso na linha de comando. Se eu descobrir, atualizarei :)

DanielSmedegaardBuus
fonte