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

在来宾机和主机上,我使用的是Ubuntu 12.04 。 作为一个pipe理程序,我正在使用KVM 。 我想执行一些与boot-storm相关的实验,并且创build了所有其他脚本来创build虚拟机,删除虚拟机和启动虚拟机。 但我不知道如何衡量每个虚拟机的启动时间。

尽pipe没有必要,但是如果启动时间在某种意义上,按名称或通过MAC地址等,有一对一的映射到虚拟机将是很好的。

启动时间:我想从主机做ssh,当它成功时,我会认为VM已经启动成功。

解决scheme应该是可扩展的,因为我想为100-150个虚拟机执行实验。

问题:

1)如何从主机获取访客虚拟机的IP地址?

2)域名 – > IP的映射

3)IP映射 – >启动时间

下面是一个例子,您可以使用pingtesting一台机器是否在线:

 #!/bin/bash # test-online.sh ret=1 while [ $ret != 0 ] do ping -c 1 $1 2>/dev/null ret=$? done exit 0 

假设你可以连接到没有密码的机器上,你可以通过用ssh $1 "echo"来代替ping线来使用ssh

使用上面的脚本(我们称之为test-online.sh ),你可以启动机器,然后使用GNU time来测量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 

您可以创build一个小型服务来安装在所有虚拟机上,并将其configuration为在您认为引导过程完成的任何时刻执行该服务。

该服务可以访问基准应用程序托pipe的HTTP URL(并在请求数据中告诉其主机名和其他内容,以便工作台应用程序知道哪个VM是哪个VM),或者在由QEMU模拟的虚拟串行端口上吐出一些东西。

我个人比较喜欢串口方式,因为它不需要networking(如果你的虚拟机没有任何开始的话),比使用networking堆栈更有效率(我知道几个毫秒的CPU时间不会有任何区别,但无论如何)。