在客户机和主机上我都使用Ubuntu 12.04. 作为虚拟机管理程序,我正在使用虚拟机. 我想进行一些与启动风暴我已经创建了所有其他脚本来创建 VM、删除 VM 和启动 VM。但我不知道如何测量每个 VM 的启动时间。
虽然不是必需的,但是如果启动时在某种意义上通过名称或 MAC 地址等与 VM 进行一对一映射,那就太好了。
开机时间:我想从主机执行 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(并在请求数据中告知其主机名和其他内容,以便基准测试应用程序知道哪个 VM 是哪个),或者在 QEMU 模拟的虚拟串行端口上输出一些内容。
我个人更喜欢串行端口方法,因为它不需要网络(如果您的虚拟机一开始就没有任何网络)并且比使用网络堆栈更有效率(我知道几毫秒的 CPU 时间不会有任何区别但无论如何)。