Wie misst man die Startzeit einer VM vom Hostcomputer?

Wie misst man die Startzeit einer VM vom Hostcomputer?

Auf dem Gast- und Hostcomputer verwende ichUbuntu 12.04Als Hypervisor verwende ichKVMIch möchte einige Experimente durchführen, die sich aufStiefelsturmund ich habe alle anderen Skripte zum Erstellen, Löschen und Starten der VM erstellt. Aber ich weiß nicht, wie ich die Startzeit für jede VM messen soll.

Es ist zwar nicht notwendig, aber es wäre gut, wenn beim Booten in gewisser Weise eine Eins-zu-eins-Zuordnung zur VM erfolgte, per Name oder Mac-Adresse usw.

Startzeit:Ich möchte vom Host aus eine SSH-Verbindung herstellen und wenn dies erfolgreich ist, gehe ich davon aus, dass die VM erfolgreich hochgefahren wurde.

Die Lösung sollte skalierbar sein, da ich das Experiment für 100–150 VMs durchführen möchte.

Symptome:

1) Wie erhalte ich die IP-Adresse einer Gast-VM vom Host-Rechner?

2) Zuordnung von Domänenname-> IP

3) Zuordnung von IP -> Bootzeit

Antwort1

Hier ist ein Beispiel, wie Sie testen können, ob eine Maschine online ist ping:

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

Sie können dies anpassen, sshindem Sie die pingZeile durch etwas wie ersetzen ssh $1 "echo", vorausgesetzt, Sie können ohne Kennwort eine Verbindung zum Computer herstellen.

Mit dem obigen Skript (nennen wir es test-online.sh) können Sie die Maschine starten und dann die Zeit mit folgendem Befehl messen GNU time(das erste Argument dieses Skripts ist der Maschinenname):

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

Die Ausgabe wird in etwa so aussehen: 1:23.52Das bedeutet, dass Ihr Computer 1 Minute und 23 Sekunden zum Booten benötigt hat.

Wenn Sie die Startzeit vieler Maschinen messen möchten, können Sie einfach start-and-time.shfür jede Maschine Folgendes aufrufen:

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

Dies führt zu der folgenden beispielhaften Ausgabe:

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

Antwort2

Sie können einen kleinen Dienst erstellen, der auf allen VMs installiert wird, und diese so konfigurieren, dass dieser Dienst zu dem Zeitpunkt ausgeführt wird, zu dem Sie den Startvorgang für abgeschlossen halten.

Dieser Dienst kann entweder eine HTTP-URL aufrufen, die von Ihrer Benchmarking-App gehostet wird (und deren Hostnamen und andere Dinge in den Anforderungsdaten angeben, damit die Bench-App weiß, welche VM welche ist) oder etwas auf einem von QEMU emulierten virtuellen seriellen Port ausgeben.

Ich persönlich würde den Ansatz über die serielle Schnittstelle bevorzugen, da dafür kein Netzwerk erforderlich ist (falls Ihre VMs überhaupt keines haben) und er ein klein wenig effizienter ist als die Verwendung des Netzwerkstapels (ich weiß, dass ein paar Millisekunden CPU-Zeit keinen Unterschied machen, aber egal).

verwandte Informationen