Erro 0x800705AA ao iniciar uma máquina virtual no Hyper-V
Ao tentar iniciar uma VM , você poderá receber a seguinte mensagem:
Hyper-V Manager
An error occurred while attempting to change the state of virtual machine <virtual machine name>
<virtual machine name> failed to initialize.
Unable to allocate 4096 Mb of RAM: Insufficient system resources exist to complete the requested service. (0x800705AA)
Ao ler a mensagem percebemos algo de inconsistente , pois indica que a operação falhou por falta de recursos no sistema , onde não pode alocar 4069 MB de memória RAM.
Mais abaixo , ainda explica que não pode alocar os 4096MB , pois a memória disponível é 7226MB !?
Com certeza temos memória disponível o suficiente para completar a operação, pelo menos nesta situação.
Esse comportamento pode se manifestar em servidores que possuem a arquitetura NUMA (Non Uniform Memory Access) e foi corrigido com o seguinte hotfix KB953585.
953585 Error message when you try to start a Hyper-V virtual machine on a Windows Server 2008-based or Windows Vista-based computer that uses the NUMA architecture: "An error occurred while attempting to change the state of virtual machine VMNAME"
Basicamente, o erro acontece por uma falha de alocação de memória na arquitetura NUMA , que introduz conceitos diferentes do modelo padrão de suporte SMP.
No modelo padrão SMP (Symmetric Multi Processor), cada processador possui acesso igual a memória e I/O. Todavia com o número elevado de processadores no hardware atual , isso causa uma limitação / bottleneck de performance no bus , o qual concorre com I/O e troca de dados entre os processadores , já que todos compartilham o mesmo bus , com o aumento do número de processadores aumenta a latência no acesso a memória e requisições de I/O.
Para a arquitetura NUMA (Non Uniform Memory Access), cada processador (por consequência os cores associados ao processador)roda em ambiente chamado NUMA Node. Cada NUMA Node compartilha seu próprio memory controller , o que podemos chamar de “memória local” ao NUMA Node , enquanto o resto da memória do sistema , pode ser considerada “Non-Local Memory”.
Esse conceito determina que a velocidade de acesso a memória não seja uniforme entre os processadores , pois o tempo necessário ao acessar uma página de memória “local” será consideravelmente menor do que ao acessar um dado que está localizado em “Non-Local Memory”.
Por isso o sistema operacional tentará alocar memória local para cada processo rodando em um NUMA node, para que ocorra o máximo de eficiência no acesso a memória e que o system bus fique mais liberado para I/O.
Após essa breve introdução , como sabemos se o nosso hardware suporta NUMA? Normalmente o fornecedor de hardware é que deve indicar isso. Todavia , servidores com processadores AMD são baseados normalmente na arquitetura NUMA. Servidores com processadores INTEL , podem apresentar SMP padrão ou NUMA e a maior probabilidade será em servidores com múltiplos sockets.
Para servidores com Hyper-V instalado podemos determinar isso facilmente ao observar o contador de performance chamado “Hyper-V VM Vid NUMA Node” , ele irá reportar uma instância para cada NUMA Node , ou apenas uma se o servidor possuir um único NUMA Node.
Neste exemplo o servidor não possue NUMA habilitado, já que não há instâncias habilitadas.
Voltando ao erro de iniciar a máquina virtual , basicamente há um erro quando o processo do Hyper-V tenta alocar memória. Esse comportamento é apresentado com mais frequência quando utilizamos a parent partition ( Windows 2008 host) , para fazer operações que possam causar que o System File Cache aumente ( cópia de arquivos muito grandes , por exemplo). Pois quando iniciamos a VM , irá ocorrer um flush do System File Cache se por acaso o sistema necessitar de memória para alocar para a VM. As "pages" do System File Cache irão mover-se para a StandBy List , para que mais tarde sejam liberadas ( freed ). O problema nesse caso , é que antes do hotfix , o Windows Server 2008 barra alocações NUMA contra a Stand By List. Fazendo que o sistema esteja com um consumo baixo de memória , mas a maioria da memória esta como "Cached" , que é composto por (System File Cache , Modified Pages e Standby Pages).
Este é um snapshot de um servidor apresentando o problema , verifiquem que temos o Total de Physical Memory em 8GB , mas praticamente toda a memória está em Cached , e o Memory está em 1.23 GB.
Esse blog foi baseado nas informações contidas no blog a seguir:
Bem , parece que tenho assunto para um outro blog .
Aqui estão alguns links para passar o ano novo.
Obrigado e Feliz 2009
Alessandro