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