Ken*_*nny 4 linux performance benchmarking
我正在尝试对在基于Linux的Intel Pentium上运行的软件进行基准测试。问题是,当使用RDTSC指令时,我在连续的测试运行期间会出现相当大的性能差异。完全相同的软件运行时间在500万到1000万个时钟周期之间变化,因此在最坏的情况下,我的开销为100%。我知道缓存争用会导致性能变化,但是,是否有办法消除其他潜在问题,例如中断,其他进程等?
非常感谢您如何正确执行此操作的任何有用提示。
非常感谢,肯尼
此一般领域中的常见问题是:
解决方案:
如果要在多CPU /多核系统上运行单线程进程,请使用CPU关联性将进程锁定到特定的内核。(从命令行使用任务集,或从代码内调用sched_setaffinity()。)
确保没有其他占用CPU时间的进程,禁用屏幕保护程序或其他桌面动画,并确保代码运行时没有屏幕更新。另外,在代码计时期间,请勿将printf用于GUI控制台窗口-保存所有结果输出,直到收集完最后一个时间戳为止。(如果可能,您甚至可以考虑完全杀死GUI。)
使用比RDTSC更可靠的计时方法(我通常在Linux上使用clock_gettime(CLOCK_PROCESS_CPUTIME_ID,...)。
禁用自动时钟频率缩放(例如,Linux:cpufreq-set)
循环运行您的代码,例如重复N次,最好对任何大型数据结构重新使用相同的内存分配(以摆脱VM页面错误等的影响)。忽略第一个测量并平均其余N-1个测量。