Как измерить время загрузки виртуальной машины с хост-машины?

Как измерить время загрузки виртуальной машины с хост-машины?

На гостевой и хостовой машинах я используюУбунту 12.04. В качестве гипервизора я используюКВМЯ хочу провести несколько экспериментов, связанных сботинок-шторми я создал все остальные скрипты для создания VM, удаления VM и запуска VM. Но я не знаю, как измерить время загрузки для каждой VM.

Хоть это и не обязательно, но было бы неплохо, если бы время загрузки имело однозначное соответствие виртуальной машине в некотором смысле, по имени или по MAC-адресу и т. д.

Время загрузки:Я хочу подключиться по ssh с хоста, и если подключение будет успешным, я буду считать, что виртуальная машина успешно загружена.

Решение должно быть масштабируемым, поскольку я хочу провести эксперимент на 100–150 виртуальных машинах.

Проблемы:

1) Как получить IP-адрес гостевой виртуальной машины с хост-машины?

2) Сопоставление доменного имени->IP

3) Сопоставление IP -> Время загрузки

решение1

Вот пример того, как можно проверить, подключен ли компьютер к сети, используя ping:

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

Вы можете адаптировать это для использования, sshзаменив pingстроку на что-то вроде ssh $1 "echo", предполагая, что вы можете подключиться к машине без пароля.

Используя приведенный выше скрипт (назовем его test-online.sh), вы можете запустить машину, а затем измерить время с помощью GNU time(первый аргумент этого скрипта — имя машины):

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

Вывод будет примерно таким: 1:23.52это означает, что загрузка вашего компьютера заняла 1 минуту 23 секунды.

Если вы хотите измерить время загрузки нескольких машин, вы можете просто вызвать start-and-time.shдля каждой машины:

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

что даст следующий примерный результат:

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

решение2

Вы можете создать небольшую службу для установки на всех виртуальных машинах и настроить их на запуск этой службы в любой момент, когда вы считаете процесс загрузки завершенным.

Эта служба может либо обратиться к HTTP-URL, размещенному вашим приложением для бенчмаркинга (и сообщить свое имя хоста и другие данные в данных запроса, чтобы приложение для бенчмаркинга знало, какая виртуальная машина какая), либо выдать что-то на виртуальный последовательный порт, эмулируемый QEMU.

Лично я бы предпочел подход с последовательным портом, так как он не требует наличия сети (на случай, если у ваших виртуальных машин ее изначально нет) и является немного более эффективным, чем использование сетевого стека (я знаю, что несколько миллисекунд процессорного времени не будут иметь никакого значения, но неважно).

Связанный контент