Comportamento de sincronização de dados para sistemas de arquivos no Windows

4

No Linux, a montagem suporta a opção commit , que é descrita na página man do mount (8) como:

commit=nrsec
       Sync all data and metadata every nrsec seconds. The default
       value is 5 seconds. Zero means default.

No Windows, o cache de write-back pode funcionar somente se você tiver Removal policy definido como Better performance no Policies do armazenamento. Vamos supor que está ativado.

Existe alguma maneira de ajustar de forma semelhante o comportamento do cache de gravação no Windows, como pode ser feito no Linux?

No Linux ao lado da opção commit , que deve ser suportado pelo tipo de sistema de arquivos montado para entrar em vigor, há também algumas configurações importantes da VM que criam restrições adicionais em relação ao comportamento do cache de write-back e podem ser alteradas valores para arquivos específicos no diretório /proc/sys/vm/ , descrito em Documentação para / proc / sys / vm / * como:

  • dirty_background_bytes

    Contém a quantidade de memória suja em que o writeback em segundo plano pdflush o daemon iniciará o write-back.

    Observação: dirty_background_bytes é a contrapartida de dirty_background_ratio . Somente um deles pode ser especificado por vez. Quando um sysctl é escrito, é imediatamente levado em conta para avaliar os limites de memória sujos ea outro aparece como 0 quando lido.

  • dirty_background_ratio

    Contém, como uma porcentagem da memória total do sistema, o número de páginas nas quais o daemon de write-back em plano pdflush começará a escrever dados sujos.

  • dirty_bytes

    Contém a quantidade de memória suja na qual um processo que gera gravações em disco irá iniciar writeback.

    Observação: dirty_bytes é a contrapartida de dirty_ratio . Apenas um deles pode ser especificado por vez. Quando um sysctl é escrito, é imediatamente levado em consideração conta para avaliar os limites de memória sujos e o outro aparece como 0 quando leia.

    Nota: o valor mínimo permitido para dirty_bytes é de duas páginas (em bytes); qualquer valor inferior a este limite será ignorado e a configuração antiga será retido.

  • dirty_expire_centisecs

    Esse ajuste é usado para definir quando os dados sujos têm idade suficiente para serem qualificados para writeout pelos daemons pdflush . É expresso em 100'és de segundo. Os dados que ficaram sujos na memória por mais tempo que este intervalo serão escrito na próxima vez que um daemon pdflush for ativado.

  • dirty_ratio

    Contém, como uma porcentagem da memória total do sistema, o número de páginas nas quais um processo que está gerando gravações em disco por si só vai começar a escrever sujo dados.

  • dirty_writeback_centisecs

    Os daemons de write-back pdflush periodicamente vão acordar e gravar dados "antigos" para o disco. Este sintonizável expressa o intervalo entre esses acordes, em 100's de segundo.

    Definir isso como zero desativa totalmente o writeback periódico.

(Na verdade, os tópicos pdflush não estão mais disponíveis no Linux, pois foram substituídos por alguns tópicos atrás, mas é sutil. Você pode ler mais sobre isso em LWN .net article Liberando o pdflush se você estiver interessado.

Por questões de completude, os padrões atuais no kernel Linux v3.2 são (verificados no debian wheezy):

/proc/sys/vm/dirty_background_bytes:0
/proc/sys/vm/dirty_background_ratio:10
/proc/sys/vm/dirty_bytes:0
/proc/sys/vm/dirty_expire_centisecs:3000
/proc/sys/vm/dirty_ratio:20
/proc/sys/vm/dirty_writeback_centisecs:500

O Windows expõe configurações semelhantes para seu subsistema de VM ou talvez por unidade / partição?

    
por przemoc 19.05.2013 / 14:57

1 resposta

4

Eu posso dizer logo de cara que você não conseguirá configurar o driver de armazenamento padrão da Microsoft com essa granularidade.

Esta é uma pergunta difícil, porque o Gerenciador de Memória e o Gerenciador de Cache e o sistema de disco no Windows estão em constante evolução. O conselho que você obtém para o Windows 2000 pode ser irrelevante para o Windows 2003, que pode ser irrelevante para o Windows 2008, etc. Além disso, você também tem aplicativos como o SQL Server com gerenciadores de cache abrangentes que podem ser totalmente afetados ou não. reagir de maneira imprevisível a qualquer alteração feita no cache do sistema de arquivos do sistema operacional. Além disso, esse é o tipo de funcionalidade que seria assumida por um driver de armazenamento de terceiros se você usasse um. Você pode supor que o fornecido pela Microsoft é mais genérico e, portanto, menos configurável do que um driver que você pode obter da Intel ou da HP, especializado em seu hardware. Muitos drivers de fornecedores exigem que o cache de gravação do Windows seja desativado para ativar seu próprio cache de gravação, etc.

Tudo o que disse, posso ajudá-lo. Desde que você não especificou qual versão do Windows, e como eu disse, coisas como caminhos de registro e valores e funções podem e mudam totalmente entre as versões do Windows, eu só vou assumir 2008R2 / Win7.

Deste artigo da MS :

By default, Windows caches file data that is read from disks and written to disks. This implies that read operations read file data from an area in system memory known as the system file cache, rather than from the physical disk. Correspondingly, write operations write file data to the system file cache rather than to the disk, and this type of cache is referred to as a write-back cache. Caching is managed per file object.

Caching occurs under the direction of the cache manager, which operates continuously while Windows is running.

Quando altero essas caixas de seleção no Gerenciador de dispositivos do Windows para "Ativar gravação em cache no dispositivo" e "Desativar liberação de buffer do cache de gravação do Windows", essas alterações são refletidas nos valores do registro em HKLM\SYSTEM\CurrentControlSet\Enum\<IDE>\<DiskName>\<Serial Number>\Device Parameters\Disk\CacheIsPowerProtected = 1 etc. valores colocados entre parênteses são variáveis.

Mas eu discordo. Você quer alterar o comportamento do cache de arquivos. Como fazer com que ele flush mais ou menos frequentemente.

Você disse que estava interessado em chamadas de API, o que é bom, porque acho que você está interessado em Serviço de Cache Dinâmico do Microsoft Windows . Acho que foi escrito por esse cara . O código fonte da amostra está incluído.

Uma advertência para o Win7 / 2008R2:

The memory management algorithms in Windows 7 and Windows Server 2008 R2 operating systems were updated to address many file caching problems found in previous versions of Windows. There are only certain unique situations when you need to implement this service on computers that are running Windows 7 or Windows Server 2008 R2.

Essencialmente, você usará a função de API do Win32 SetSystemFileCacheSize () . Confira isso:

MinimumFileCacheSize [in]

The minimum size of the file cache, in bytes. The virtual memory manager attempts to keep at least this much memory resident in the system file cache.

To flush the cache, specify (SIZE_T) -1.

Isso implica que você pode liberar o cache à vontade, em qualquer horário que lhe agrade.

Boa sorte!

    
por 02.07.2013 / 16:16