На гостевой и хостовой машинах я используюУбунту 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.
Лично я бы предпочел подход с последовательным портом, так как он не требует наличия сети (на случай, если у ваших виртуальных машин ее изначально нет) и является немного более эффективным, чем использование сетевого стека (я знаю, что несколько миллисекунд процессорного времени не будут иметь никакого значения, но неважно).