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