如何测量从主机启动虚拟机的时间?

如何测量从主机启动虚拟机的时间?

在客户机和主机上我都使用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 时间不会有任何区别但无论如何)。

相关内容