如何測量主機上虛擬機器的啟動時間?

如何測量主機上虛擬機器的啟動時間?

在來賓機和主機上,我都會使用烏班圖12.04。作為我正在使用的虛擬機器管理程序鍵盤虛擬機。我想做一些相關的實驗引導風暴我已經創建了所有其他腳本來建立虛擬機器、刪除虛擬機器和啟動虛擬機器。但我不知道如何測量每個虛擬機器的啟動時間。

雖然不是必需的,但如果啟動時間在某種意義上透過名稱或 MAC 位址等與 VM 一對一映射,那就太好了。

開機時間:我想從主機執行 ssh,當成功時,我將認為虛擬機器已成功啟動。

這個解決方案應該是可擴展的,因為我想對 100-150 個虛擬機器進行實驗。

問題:

1)如何從主機取得來賓VM的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 模擬的虛擬序列埠上輸出某些內容。

我個人更喜歡串行端口方法,因為它不需要網路(如果您的虛擬機器一開始就沒有網路),並且比使用網路堆疊更有效(我知道 CPU 需要幾毫秒)時間不會有任何區別,但無論如何)。

相關內容