ゲストマシンとホストマシンの両方で、私はウブントゥ 12.04ハイパーバイザーとして使用している仮想化関連する実験をいくつか行いたいブートストームVM の作成、VM の削除、VM の起動を行うための他のすべてのスクリプトも作成しました。ただし、各 VM の起動時間を測定する方法がわかりません。
必須ではありませんが、起動時に名前や MAC アドレスなどで VM に 1 対 1 でマッピングされると便利です。
起動時間:ホストから ssh を実行し、成功したら VM が正常に起動したと見なします。
100〜150 台の VM で実験を実行したいので、ソリューションはスケーラブルである必要があります。
問題点:
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
すべての VM にインストールする小さなサービスを作成し、ブート プロセスが完了したと判断された時点でそのサービスを実行するように構成できます。
このサービスは、ベンチマーク アプリによってホストされている HTTP URL にアクセスするか (そして、ベンチ アプリがどの VM がどれであるかを認識できるように、要求データでホスト名やその他の情報を伝える)、QEMU によってエミュレートされた仮想シリアル ポートに何かを出力します。
個人的にはシリアル ポート アプローチの方が好みです。ネットワークが不要で (VM に最初からネットワークがない場合)、ネットワーク スタックを使用するよりも少し効率的です (CPU 時間が数ミリ秒長くなっても違いは出ないことはわかっていますが、それはそれで構いません)。