호스트 시스템에서 VM의 부팅 시간을 측정하는 방법은 무엇입니까?

호스트 시스템에서 VM의 부팅 시간을 측정하는 방법은 무엇입니까?

게스트 컴퓨터와 호스트 컴퓨터 모두에서 다음을 사용하고 있습니다.우분투 12.04. 제가 사용하고 있는 하이퍼바이저로는KVM. 관련된 실험을 해보고 싶습니다.부트 스톰VM을 생성하고, VM을 삭제하고, VM을 시작하는 다른 모든 스크립트를 만들었습니다. 하지만 각 VM의 부팅 시간을 측정하는 방법을 모르겠습니다.

꼭 필요한 것은 아니지만 부팅 시간이 어떤 의미에서 이름이나 Mac 주소 등을 통해 VM에 일대일 매핑되는 경우 좋을 것입니다.

부팅 시간:호스트에서 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대체하여 이를 사용하도록 조정할 수 있습니다 .pingssh $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의 몇 밀리초를 알고 있습니다). 시간은 별 차이가 없지만 어쨌든).

관련 정보