O método mais confiável de manter o tempo em um ambiente de domínio virtualizado é manter seu PDC físico, aumentar a tolerância de desvio e frequência de sincronização em todos os membros do DC e do domínio virtualizados e desabilitar a sincronização do convidado / host para todas as VMs em questão .
Aqui está uma pseudo-explicação do problema (faz muito tempo desde que eu olhei para isso):
Quando uma máquina (estação de trabalho, servidor, VM) é inicializada, ela lê a hora do RTC (chip de clock suportado por bateria na placa-mãe / BIOS) e calcula a duração de cada escala da CPU. O sistema operacional então conta o número de pulsos de clock que ocorreram desde que a leitura inicial foi feita , e acrescenta o tempo daquele tempo à leitura original do tempo tirada na inicialização. Isso te dá a hora atual.
O problema é que os hosts ocultam os verdadeiros ciclos de clock que ocorrem nas VMs. Uma VM pode ter visto 100 ciclos de clock quando ocorreram 500 ciclos de clock no host. Então, esse método de calcular o tempo se desintegra e o tempo se esvai na VM.
A sincronização de tempo do Host-Guest por meio dos pacotes de ferramentas / aprimoramentos vm instalados no vSphere e Hyper-V acelera isso, mas eles não são perfeitos (em algumas configurações eles podem encaminhar uma VM se ela estiver atrasada em tempo real) , mas eles não avançam para uma VM se ela estiver à frente do tempo real).
Isso é ainda mais complicado pela maneira como os ciclos de clock são contados em configurações multi-core (o contador de temporização é essencialmente emulado em cada núcleo) e em configurações que podem mudar as velocidades de clock rapidamente (não tenho ideia de como isso é mantido ). Fator na ideia de que uma máquina virtual pode executar um ciclo de clock em um núcleo e, em seguida, pular para um núcleo diferente em uma CPU diferente para o próximo ciclo, e isso fica realmente horrível.
Então, voltando ao ponto original: a hora do domínio, por padrão, começa no PDC, depois passa para os outros DCs, depois para os servidores membros e estações de trabalho de lá. Portanto, se você garantir que seu PDC seja uma fonte de tempo realmente confiável (mantendo-o físico) e desabilite a sincronização host-guest em todos os outros membros do domínio, você garantirá uma infraestrutura de tempo estável e relativamente precisa.
Observe que executar o PDC como um servidor físico, em seguida, habilitar o Hyper-V nesse servidor e adicionar alguns convidados a ele provavelmente não é uma correção adequada, pois acredito que, quando você ativa o Hyper-V, o sistema operacional 'base' é realmente torna-se um sistema operacional virtualizado também (silenciosamente). Portanto, mantenha um servidor físico como um PDC e mantenha o Hyper-V fora da caixa.
Interessante ponto a observar: a posição oficial da Microsoft no Windows Time Synchronization, mesmo usando o serviço NTP compatível que vem embutido no Windows desde o XP / 2003, é de 15 segundos. Na prática, você pode baixar para menos de 100 ms, mas tudo o que eles suportam é a sincronização para dentro de 15 segundos. Meio que faz sentido, o único componente chave sensível ao tempo no núcleo da maioria dos ambientes MS é o Kerberos e, por padrão, ele funcionará de maneira feliz, contanto que você esteja dentro de uma tolerância de 5 minutos.