Como medir o tempo de inicialização de uma VM da máquina host?

Como medir o tempo de inicialização de uma VM da máquina host?

Tanto na máquina Guest quanto na máquina Host, estou usandoUbuntu 12.04. Como hipervisor estou usandoKVM. Quero realizar alguns experimentos relacionados atempestade de botase criei todos os outros scripts para criar VM, excluir VM e iniciar VM. Mas não sei como medir o tempo de inicialização de cada VM.

Embora não seja necessário, será bom se o tempo de inicialização tiver um mapeamento individual para VM em algum sentido, por nome ou endereço MAC, etc.

Tempo de inicialização:Quero fazer o ssh do host e, quando for bem-sucedido, considerarei que a VM foi inicializada com sucesso.

A solução deve ser escalonável, pois desejo realizar experimentos para 100-150 VMs.

Problemas:

1) Como obter o endereço IP de uma VM convidada da máquina Host?

2) Mapeamento de Nome de Domínio-> IP

3) Mapeamento de IP -> Tempo de inicialização

Responder1

Aqui está um exemplo de como você pode testar se uma máquina está online usando ping:

#!/bin/bash
# test-online.sh
ret=1
while [ $ret != 0 ]
do
  ping -c 1 $1 2>/dev/null
  ret=$?
done
exit 0

Você pode adaptar isso sshsubstituindo a pinglinha por algo como ssh $1 "echo", assumindo que você pode se conectar à máquina sem uma senha.

Usando o script acima (vamos chamá-lo de test-online.sh), você pode iniciar a máquina e então medir o tempo usando GNU time(o primeiro argumento deste script é o nome da máquina):

#!/bin/bash
# start-and-time.sh
start-vm $1
/usr/bin/time -f "%E" ./test-online.sh $1

A saída será algo como 1:23.52o que significa que sua máquina levou 1 minuto e 23 segundos para inicializar.

Se você quiser medir o tempo de inicialização de muitas máquinas, basta ligar start-and-time.shpara cada máquina:

#!/bin/bash
mymachines=(machine1 machine2 machine3)
for machine in "${machines[@]}"
do
  echo -n "$machine "
  ./start-and-time.sh $machine &
done

que fornecerá a seguinte saída exemplar:

machine1 1:53.23
machine2 2:42.42
machine3 0:42.42

Responder2

Você pode criar um pequeno serviço para instalar em todas as VMs e configurá-las para executar esse serviço a qualquer momento que você considerar que seu processo de inicialização foi concluído.

Esse serviço pode acessar uma URL HTTP hospedada por seu aplicativo de benchmarking (e informar seu nome de host e outras coisas nos dados de solicitação para que o aplicativo de bancada saiba qual VM é qual) ou cuspir algo em uma porta serial virtual emulada pelo QEMU.

Pessoalmente, eu preferiria a abordagem de porta serial, pois não requer rede (caso suas VMs não tenham nenhuma) e é um pouco mais eficiente do que usar a pilha de rede (conheço alguns milissegundos de CPU o tempo não fará nenhuma diferença, mas tanto faz).

informação relacionada