Armazenamento do Hyper-V: camadas de cache e implicações para consistência de dados

Este artigo fornece uma visão geral do cache na pilha de armazenamento virtual e fornece diretrizes aos desenvolvedores e administradores de software para garantir que os requisitos de consistência de dados desejados sejam atendidos.

Aplica-se a: Windows Server 2012 R2
Número de KB original: 2801713

Mais informações

No mínimo, as várias camadas de cache no sistema geralmente envolvem o seguinte:

  • Cache do sistema de arquivos. Por padrão, o Windows armazena em cache dados de arquivo que são lidos de discos e gravados em discos. Isso implica que as operações de leitura leem dados de arquivo de uma área na memória do sistema que é conhecida como o cache de arquivos do sistema em vez do disco físico. Correspondentemente, as operações de gravação gravam dados de arquivo no cache de arquivos do sistema em vez do disco e esse tipo de cache é conhecido como cache de writeback. Os aplicativos podem usar a semântica semântica de sistema de arquivos para garantir que as gravações não sejam armazenadas em cache no cache do sistema.
  • O cache de unidades de disco. As unidades de disco implementam o cache na camada de firmware para melhorar o desempenho das unidades de disco. Embora o cache na camada de firmware possa melhorar o desempenho, os dados no disco podem ser perdidos antes de serem gravados no disco no caso de uma falha de energia. As opções para controlar esse comportamento de cache fazem parte de interfaces de unidade padronizadas, como SCSI, SATA e ATA. Estas opções são as seguintes:
    1. Use o mecanismo de controle por E/S conhecido como FUA (Force Unit Access). Esse sinalizador especifica que a unidade deve gravar os dados no armazenamento de mídia estável antes que a sinalização seja concluída. Os aplicativos que precisam fazer isso garantem que os dados estejam estáveis no problema do disco FUA para garantir que os dados não sejam perdidos se ocorrer uma falha de energia.

      As unidades de disco da classe servidor (SCSI e Fibre Channel) geralmente dão suporte ao sinalizador FUA. Em unidades de commodities (ATA, SATA e USB), a FUA pode não ser honrada. Isso pode potencialmente deixar dados em um estado inconsistente, a menos que o cache de gravação da unidade esteja desabilitado. Verifique se o subsistema de disco manipula o FUA corretamente se você depender desse mecanismo.

    2. Forçar a liberação de cache de disco. Um aplicativo ou sistema que envia uma liberação para o disco forçará o subsistema de disco a gravar todos os dados em seu cache no disco. Emitir descargas com muita frequência terá consequências de desempenho, pois todas as informações no cache de disco terão que ser gravadas na mídia de disco antes que o flush retorne.

    3. Desabilitar o cache de disco. Você pode desabilitar o cache de gravação de um disco emitindo o código de controle IOCTL_DISK_SET_CACHE_INFORMATION para o disco. O estado do cache de gravação (ativado ou desativado) será preservado entre reinicializações do sistema. A emissão desse código de controle terá consequências de desempenho muito significativas para todos os mecanismos de E/S emitidos para esse disco. Essas consequências provavelmente incluirão uma diminuição perceptível no desempenho. Você deve considerar cuidadosamente o uso desse código de controle antes de implantá-lo.

      Observação

      Se não puder desabilitar o cache de disco, considere as opções 1 e 2.

Portanto, se o aplicativo ou a carga de trabalho estiver em execução dentro da máquina virtual (VM), as várias camadas de cache terão implicações de consistência de dados.

  • Cache do sistema de arquivos convidado. Essa camada pode ser ignorada usando o sistema de arquivos semântica não adiada, como foi mencionado anteriormente.

  • Cache de disco virtual convidado. O dispositivo IDE virtualizado (emulado ou sintético) ou SCSI relatará o estado do cache de gravação retornado pela pilha inferior. Os discos virtuais informarão que o cache de gravação está habilitado e se recusarão a permitir que o convidado desative o cache de gravação. Desabilitar o cache falhará e sempre responderá se o cache está habilitado. Esse comportamento é necessário para os seguintes motivos:

    • O Hyper-V não pode fazer uma suposição de que todas as VMs que estão em execução no mesmo disco terão que fazer com que as configurações de cache de disco sejam as mesmas.

    • O armazenamento subjacente pode ter um cache de gravação sempre ativado que não pode ser desativado. Isso é enfatizado pelo fato de que o disco virtual pode ser migrado para um disco diferente no mesmo host (migração de armazenamento ao vivo) ou para um host diferente (migração ao vivo).

      Como os aplicativos não poderão desativar o cache de disco, qualquer aplicativo no convidado que precise garantir a integridade dos dados em uma falha de energia terá que usar a opção 1 ou a opção 2 para garantir que as gravações ignorem o cache de disco.

  • Cache do sistema de arquivos host. A pilha de armazenamento do Hyper-V também usa gravações não inferidas para garantir que as gravações do convidado ignorem a pilha de sistemas de arquivos de host subjacente.

  • Cache de disco host. O FUA, se definido pelo convidado, é propagado para o host e para a pilha de armazenamento do host. O sistema de disco físico do host deve atender pelo menos um dos seguintes critérios para garantir a integridade dos dados de carga de trabalho virtualizada por meio de falhas de energia:

    • O sistema usa discos de classe de servidor (SCSI, Fibre Channel).
    • O sistema garante que os discos estejam conectados a um HBA (adaptador de barramento de host) com suporte à bateria.
    • O sistema usa um controlador de armazenamento (por exemplo, um sistema RAID) como o dispositivo de armazenamento.
    • O sistema garante que a energia do disco seja protegida por uma UPS (fonte de alimentação ininterrupta).
    • O sistema garante que o recurso de cache de gravação do disco esteja desabilitado.