2011-03-27 2 views
14

나는 다음과 같은 구성으로, QEMU와 QEMU-KVM 스위치에서 다음 벤치 마크를 실시 : QEMU에서 실행할 때QEMU : 일부 성능 측정

CPU: AMD 4400 process dual core with svm enabled, 2G RAM 
Host OS: OpenSUSE 11.3 with latest Patch, running with kde4 
Guest OS: FreeDos 
Emulated Memory: 256M 
Network: Nil 
Language: Turbo C 2.0 
Benchmark Program: Count from 0000000 to 9999999. Display the counter on the screen 
    by direct accessing the screen memory (i.e. 0xb800:xxxx) 

그것은 단지 6 초 걸립니다.

qemu-kvm에서 실행될 때 89 초가 걸립니다.

벤치 마크를 하나씩 실행했는데 병렬로 실행하지 않았습니다.

나는 밤새 내 머리에 상처를 입었지만, 왜 이런 일이 일어 났는지는 아직도 모른다. 누군가 나에게 힌트를 주겠습니까?

+0

이것은 내 생각에 게스트 OS는 FreeDos입니다. 이론에 따르면 qemu는 게스트 OS에 주어진 모든 명령어를 TCG를 사용하여 호스트 OS가 이해하는 명령어로 변환합니다. 반면에 kvm을 가진 qemu는 호스트 OS에 직접 명령을 보내고 이론적으로 kem을 가진 qemu가 더 빨라야합니다. 그러나 나는 그것이 또한 사용되고있는 게스트 OS에 달려 있다고 생각한다. kvm이 명령을 호스트 OS에 직접 전송하려고 시도하고 있지만 실행 중이 아니며 계획된 qemu 명령 인 것처럼 TCG 경로를 통과 할 수도 있습니다. pls 업데이트 –

답변

0

귀하의 벤치 마크는 IO 중심 벤치 마크이며 모든 io 디바이스는 실제로 qemu 및 qemu-kvm에서 동일합니다. qemu의 소스 코드에서 이것은 hw/*에서 찾을 수 있습니다.

이것은 qemu-kvm이 qemu에 비해 매우 빠르지 않아야 함을 설명합니다. 그러나, 나는 감속에 대한 특별한 대답이 없습니다. 나는 이것에 대해 다음과 같은 설명을하고 있으며, 나는 그 정도가 정확하다고 생각한다.

"qemu-kvm 모듈은 리눅스 커널에서 kvm 커널 모듈을 사용합니다. 이것은 모든 권한있는 명령어에 트랩을 발생시키는 x86 게스트 모드에서 게스트를 실행합니다. 반대로, qemu는 명령어를 번역하는 매우 효율적인 TCG를 사용합니다 그것은 처음에 본다. 은 트랩의 높은 비용이 벤치 마크에 나타나 있다고 생각한다. " 이것은 모든 io-devices에 대해서는 사실이 아닙니다. 아파치 벤치 마크는 qemu-kvm에서 더 잘 실행 될 것입니다. 왜냐하면 라이브러리가 버퍼링을 수행하고 가장 적은 수의 권한 명령어를 사용하여 IO를 수행하기 때문입니다.

11

KVM은 그의 장치 시뮬레이터로 qemu를 사용하며 모든 장치 작동은 사용자 공간 QEMU 프로그램에 의해 시뮬레이션됩니다. 0xB8000에 쓸 때 게스트 모드에서 CPU`vmexit '을 수행하고 KVM 모듈로 돌아가고 KVM 모듈로 돌아가고 KVM 모듈은 다시 사용자 공간 QEMU 백엔드에 장치 시뮬레이션 요청을 보내는 그래픽 디스플레이가 작동합니다.

반면 KVM이없는 QEMU는 일반적인 시스템 호출을 제외하고 모든 작업을 통합 프로세스로 처리하므로 CPU 컨텍스트 전환이 줄어 듭니다. 한편, 벤치 마크 코드는 code block translation 만 필요한 간단한 루프입니다. 이는 vmexit과 KVM 케이스의 모든 반복에 대한 커널 사용자 통신에 비해 비용이 들지 않습니다.

가장 많은 원인이 될 수 있습니다.

0

이유가 너무 많아서 VMEXIT이 발생합니다.