每次重新运行程序时,性能都会发生显着变化

时间:2015-12-14 06:28:49

标签: c performance hardware

我有一个类似硬件的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并启动它。

知道如何防止波动或发生了什么?请记住,它非常一致。没有其他程序在操作系统上运行。

1 个答案:

答案 0 :(得分:6)

您的临时波动可能与page cache有关。我不打扰(改变无关紧要)。另请参阅http://www.linuxatemyram.com/

您可以预填充页面缓存,例如在运行wc Main_Prog

之前运行一些./Main_Prog

你可能还有其他一些executable程序&您的Raspberry Pi上的processes(请与topps auxw联系)。我猜/sbin/init仍然在pid 1上运行。可能你的shell也在运行。

拥有一个只有一个进程的Linux系统是很不寻常的。为此,你应该用你的程序替换/sbin/init,我真的不建议这样做,特别是如果你不熟悉Linux的话。

由于您的框中正在运行多个进程,并且因为内核scheduler在任意时刻都是preempting个任务,因此其行为不完全可重现,并且这解释了观察到的波动。

还详细了解real-time schedulingsetpriority(2)sched_setscheduler(2)pthread_setschedparam(3)readahead(2)mlock(2)madvise(2),{ {3}}

如果您最感兴趣的是基准测试,那么明智的方法是多次重复相同的基准测试(例如4到15次),并采用最小值,最大值或平均值。