1

我有以下问题。我在 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 倍。

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

此致

4

2 回答 2

0

看来根本不是rdtsc的问题。我正在通过带有用户空间调控器的 acpi_cpufreq 驱动程序使用具有固定有限频率的 i5 Intel 内核。虽然CPU速度是固定的,比如说2.4G(共3.3G),但也有一些计算是在最高速度3.3G的情况下进行的。粗略的说,我在物理机上也遇到过极少数这样的情况~ 1 每 10000 个。在 kvm 上,这种行为的频率更高,比如说大约百分之几。我会进一步调查这个问题。

于 2014-09-12T11:53:13.230 回答
0

也许你可以试试看clock_gettime(CLOCK_THREAD_CPUTIME_ID,&ts)man clock_gettime更多信息

于 2014-09-11T01:43:30.820 回答