¿Cómo medir el tiempo de arranque de una VM desde la máquina host?

¿Cómo medir el tiempo de arranque de una VM desde la máquina host?

Tanto en la máquina invitada como en la máquina host, estoy usandoubuntu 12.04. Como hipervisor estoy usandoKVM. Quiero realizar algunos experimentos relacionados contormenta de botasy he creado todos los demás scripts para crear VM, eliminar VM e iniciar VM. Pero no sé cómo medir el tiempo de arranque de cada VM.

Aunque no es necesario, será bueno si el tiempo de arranque tiene una asignación uno a uno a la VM en algún sentido, por nombre o por dirección mac, etc.

Tiempo de arranque:Quiero hacer ssh desde el host y cuando sea exitoso, consideraré que la VM se inició exitosamente.

La solución debe ser escalable ya que quiero realizar un experimento para 100-150 máquinas virtuales.

Problemas:

1) ¿Cómo obtener la dirección IP de una máquina virtual invitada desde la máquina host?

2) Mapeo de nombre de dominio-> IP

3) Mapeo de IP -> Tiempo de arranque

Respuesta1

A continuación se muestra un ejemplo de cómo puede probar si una máquina está en línea usando ping:

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

Puede adaptar esto para su uso sshreemplazando la pinglínea con algo como ssh $1 "echo", suponiendo que pueda conectarse a la máquina sin contraseña.

Usando el script anterior (llamémoslo test-online.sh), puede iniciar la máquina y luego medir el tiempo usando GNU time(el primer argumento de este script es el nombre de la máquina):

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

El resultado será algo así como 1:23.52lo que significa que su máquina tardó 1 minuto y 23 segundos en arrancar.

Si desea medir el tiempo de arranque de muchas máquinas, puede simplemente llamar start-and-time.sha cada máquina:

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

que dará el siguiente resultado ejemplar:

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

Respuesta2

Puede crear un pequeño servicio para instalar en todas las máquinas virtuales y configurarlas para ejecutar ese servicio en cualquier momento que considere que su proceso de arranque está completo.

Ese servicio puede acceder a una URL HTTP alojada por su aplicación de evaluación comparativa (e indicar su nombre de host y otras cosas en los datos de la solicitud para que la aplicación de banco sepa qué VM es cuál) o escupir algo en un puerto serie virtual emulado por QEMU.

Personalmente, preferiría el enfoque del puerto serie, ya que no requiere conexión en red (en caso de que sus máquinas virtuales no tengan ninguna) y es un poquito más eficiente que usar la pila de red (conozco unos pocos milisegundos de CPU). el tiempo no hará ninguna diferencia pero da igual).

información relacionada