我有一个类似硬件的Rasberry PI,它有一个基本的linux操作系统,只有一个程序运行叫做#34; Main_Prog"。
每次我再次进行性能测试时,Main_Prog的性能波动不到1%。这是完全可以接受的。
当我使用kill命令终止Main_Prog并重新启动Main_Prog时,性能最高可达8%。在这种波动的情况下,进一步的性能测试将变化不到1%。
例如,如果Main_Prog最初以 100个呼叫/秒运行,并且在 99-101个呼叫/秒之间变化。
然后我做了一个" kill"命令针对Main_Prog并使用" ./ Main_Prog&"重新启动。然后我进行了性能测试,现在Main_Prog以 104-106次呼叫/秒波动运行 105次呼叫/秒。它将继续以 104-106次调用/秒运行,直到我终止Main_Prog并启动它。知道如何防止波动或发生了什么?请记住,它非常一致。没有其他程序在操作系统上运行。
答案 0 :(得分:6)
您的临时波动可能与page cache有关。我不打扰(改变无关紧要)。另请参阅http://www.linuxatemyram.com/
您可以预填充页面缓存,例如在运行wc Main_Prog
./Main_Prog
你可能还有其他一些executable程序&您的Raspberry Pi上的processes(请与top
或ps auxw
联系)。我猜/sbin/init
仍然在pid 1上运行。可能你的shell也在运行。
拥有一个只有一个进程的Linux系统是很不寻常的。为此,你应该用你的程序替换/sbin/init
,我真的不建议这样做,特别是如果你不熟悉Linux的话。
由于您的框中正在运行多个进程,并且因为内核scheduler在任意时刻都是preempting个任务,因此其行为不完全可重现,并且这解释了观察到的波动。
还详细了解real-time scheduling,setpriority(2),sched_setscheduler(2),pthread_setschedparam(3),readahead(2),mlock(2),madvise(2),{ {3}}
如果您最感兴趣的是基准测试,那么明智的方法是多次重复相同的基准测试(例如4到15次),并采用最小值,最大值或平均值。