게스트 컴퓨터와 호스트 컴퓨터 모두에서 다음을 사용하고 있습니다.우분투 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
대체하여 이를 사용하도록 조정할 수 있습니다 .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의 몇 밀리초를 알고 있습니다). 시간은 별 차이가 없지만 어쨌든).