【问题标题】:Outliers during Performance Evaluation绩效评估期间的异常值
【发布时间】:2010-01-24 11:52:11
【问题描述】:

我正在尝试使用 Intel 的 RDTSC 进行一些性能测量,结果相当 奇怪的是我在不同的测试运行中得到的变化。在大多数情况下,我的 C 基准测试 需要 3000000 个 Mio 周期,但是,在某些情况下,完全相同的执行可能需要 500万,几乎翻了一番。我试图让没有密集的工作负载并行运行 以便我获得良好的性能估计。任何人都知道这个巨大的时机 变异可以从何而来?我知道可能会发生中断和事情,但我没想到 时间变化如此之大!

PS.:我在奔腾处理器上运行它,上面运行着 Linux。

感谢您的反馈, 约翰

【问题讨论】:

    标签: linux performance process intel performancecounter


    【解决方案1】:

    我认为答案在:

    试过没有紧张的工作量 并行运行

    在现代操作系统中,您对此没有足够的控制权。

    【讨论】:

      【解决方案2】:

      根据this Wikipedia article,RDTSC(时间戳计数器)不能可靠地用于多核系统的基准测试。无法保证所有内核在时间戳寄存器中具有相同的值。

      在 Linux 上,最好使用 POSIX clock_gettime 函数。

      【讨论】:

        【解决方案3】:

        您必须考虑大多数现代处理器的缓存。在您测量长时间运行时间的情况下,也许另一个进程会驱逐您程序的缓存内容。 正如 Henk 指出的那样,现代操作系统中发生了很多你无法控制的事情。

        【讨论】: