Назад | Перейти на главную страницу

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

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

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

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

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

Проблемы:

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

2) Отображение имени домена-> IP

3) Отображение IP -> Время загрузки

Вот пример того, как вы можете проверить, находится ли машина в сети, используя 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

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

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

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