我正在测试一个用Java编写的代理/守护进程的CPU消耗。为了避免垃圾收集造成的偏差,我一直在尝试更长的时间来运行每个分析。一开始我尝试了15分钟,后来达到了2小时。然而我刚刚发现,即使运行2小时,我也会得到非常不一致的结果。-一次运行2小时给了我6%的CPU,另外两个小时给了我12%的cpu。对于获得一致的结果有何建议?
bis0qfac1#
你是否在控制CPU频率?如果没有太多的工作要做,操作系统(或CPU本身)可能会降低时钟频率以保存电力。通过积极的电力管理策略,CPU在运行时将始终以最大值运行,因此查看CPU%可能是有意义的。在Skylake或更高版本CPU上的Linux上,您可以将每个内核的EPP设置为performance,以使其在运行时以最大速度运行。
performance
sudo sh -c 'for i in /sys/devices/system/cpu/cpufreq/policy[0-9]*/energy_performance_preference;do echo performance > "$i";done'
否则,可以用核心时钟周期(如Linux perf stat java ...)而不是CPU %来衡量,或者至少看看它运行时的平均时钟速度。(相对于DRAM而言,较低的时钟速度可能会使事情发生偏差,因为缓存未命中会延迟较少的周期。)
perf stat java ...
1条答案
按热度按时间bis0qfac1#
你是否在控制CPU频率?如果没有太多的工作要做,操作系统(或CPU本身)可能会降低时钟频率以保存电力。通过积极的电力管理策略,CPU在运行时将始终以最大值运行,因此查看CPU%可能是有意义的。
在Skylake或更高版本CPU上的Linux上,您可以将每个内核的EPP设置为
performance
,以使其在运行时以最大速度运行。否则,可以用核心时钟周期(如Linux
perf stat java ...
)而不是CPU %来衡量,或者至少看看它运行时的平均时钟速度。(相对于DRAM而言,较低的时钟速度可能会使事情发生偏差,因为缓存未命中会延迟较少的周期。)