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

2

Na máquina do convidado e na máquina host, estou usando o Ubuntu 12.04 . Como hipervisor, estou usando o KVM . Quero realizar alguns experimentos relacionados a boot-storm e criei todos os outros scripts para criar a VM, excluir a VM e iniciar a VM. Mas eu não sei como medir o tempo de inicialização para cada VM.

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

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

A solução deve ser escalonável, pois quero realizar uma experiência de 100-150 VMs.

Problemas:

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

2) Mapeamento de nome de domínio- > IP

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

    
por Ankit 01.03.2015 / 11:16

2 respostas

0

Aqui está um exemplo de como você pode testar se uma máquina está on-line 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 para usar ssh substituindo a linha ping por algo como ssh $1 "echo" , supondo que você possa se conectar à máquina sem uma senha.

Usando o script acima (vamos chamá-lo test-online.sh ), você pode iniciar a máquina e 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.52 , o que significa que sua máquina demorou 1 minuto e 23 segundos para inicializar.

Se você quiser medir o tempo de inicialização de muitas máquinas, basta chamar start-and-time.sh para 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 exemplificativa:

machine1 1:53.23
machine2 2:42.42
machine3 0:42.42
    
por 01.03.2015 / 12:01
0

Você pode criar um pequeno serviço para instalar em todas as VMs e configurá-las para executar esse serviço no momento em que considerar que o processo de inicialização está completo.

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

Eu preferiria pessoalmente a abordagem da porta serial, já que ela não requer rede (no caso de suas VMs não terem nenhuma para começar) e é um pouco mais eficiente do que usar a pilha de rede (eu conheço algumas Milissegundos de tempo de CPU não farão qualquer diferença, mas seja o que for).

    
por 12.03.2015 / 21:37