比较物理硬件和基于kvm的VM的经验奇怪的rdtsc行为

时间:2014-09-10 13:44:55

标签: linux performance benchmarking kvm rdtsc

我有以下问题。我在Linux机器上运行了几次压力测试

$ uname -a
Linux debian 3.14-2-686-pae #1 SMP Debian 3.14.15-2 (2014-08-09) i686 GNU/Linux

它是Intel i5 Intel(R)Core(TM)i5-2400 CPU @ 3.10GHz,8 G RAM,300 G HDD。

这些测试不是I / O密集型的,我主要通过以下方式计算双重算术:

start = rdtsc();
do_arithmetic();
stop = rdtsc();
diff = stop - start;

我多次重复这些测试,在物理机器或基于KVM的VM上运行我的基准测试应用程序:

qemu-system-i386 disk.img -m 2000 -device virtio-net-pci,netdev=net1,mac=52:54:00:12:34:03 -netdev type=tap,id=net1,ifname=tap0,script=no,downscript=no -cpu host,+vmx -enable-kvm -nographichere

我为许多试验收集数据统计数据(即差异)。对于物理机器(未加载),我得到的处理延迟的数据分布通常可能是非常窄的对数正态分布。

当我在虚拟机上重复实验(物理和虚拟机没有加载)时,对数正态分布仍然存在(形状稍微宽一些),但是,我收集了几个点,完成时间要短得多(比物理机器收集的绝对最小值大约两倍! (请注意,物理机器上的完成时间分布非常窄,接近最小值)。还有一些点的完成时间比硬件机器上的平均完成时间长得多。

我猜我的rdtsc基准测试方法对于VM环境来说不是很准确。您能否建议一种方法来改进我的基准测试系统,该系统可以在物理和基于kvm的虚拟环境之间提供可靠的(可比较的)统计数据?至少有些东西不会让我觉得在很少的情况下VM比硬件PC快2倍。

提前感谢您对此主题的任何建议或意见。

祝你好运

2 个答案:

答案 0 :(得分:0)

也许您可以尝试clock_gettime(CLOCK_THREAD_CPUTIME_ID,&ts),有关详细信息,请参阅man clock_gettime

答案 1 :(得分:0)

似乎这根本不是rdtsc的问题。我通过带有用户空间调控器的acpi_cpufreq驱动程序使用具有固定有限频率的i5 Intel内核。即使CPU速度固定在2.4G(3.3G之外),也有一些计算以3.3G的最高速度进行。粗略地说,我在物理机器上遇到了极少数此类情况〜每千人1个。在kvm上,这种行为的频率更高,让我们说几个百分点。我会进一步研究这个问题。