Как на гостевой, так и на главной машине я использую 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 время не будет иметь никакого значения, но неважно).