每次重新运行程序时性能都会发生显着变化
Performance changes significantly every time I rerun program
我有一个类似 Rasberry PI 的硬件,它有一个基本的 linux 操作系统和一个名为 运行ning 的程序 "Main_Prog"。
每次我 运行 再次进行性能测试时 Main_Prog 我得到的性能波动小于 1%。这是完全可以接受的。
当我使用 kill 命令杀死 Main_Prog 并重新启动 Main_Prog 时,性能变化高达 8%。进一步的性能测试将围绕此波动变化小于 1%。
例子
例如,如果 Main_Prog 首先 运行 在 100 calls/sec 之间变化 99-101 calls/sec.
然后我对 Main_Prog 执行了 "kill" 命令并使用“./Main_Prog &”重新启动。然后我 运行 进行了性能测试,现在 Main_Prog 是 运行ning 105 calls/sec 和 104-106 calls/sec波动。它将继续 运行 104-106 calls/sec 直到我杀死 Main_Prog 并启动它。
知道如何防止波动或发生了什么吗?请记住,它是非常一致的。操作系统上没有其他程序 运行ning。
您的临时波动可能与page cache. I would not bother (the change is insignificant). See also http://www.linuxatemyram.com/
有关
您可以预先填充页面缓存,例如通过 运行 一些 wc Main_Prog
在 运行 ./Main_Prog
之前
而且您的 Raspberry Pi 上可能还有一些其他 executable programs & processes(检查 top
或 ps auxw
)。我猜 /sbin/init
在 pid 1 仍然是 运行。可能你的 shell 也是 运行。
只有一个进程的 Linux 系统是很不寻常的。为此,您应该将 /sbin/init
替换为您的程序,我真的不建议这样做,尤其是当您不太了解 Linux 时。
由于您的盒子中有多个进程 运行,并且由于内核 scheduler is preempting 在任意时刻执行任务,因此其行为无法完全重现,这解释了观察到的波动。
另请阅读有关 real-time scheduling, setpriority(2), sched_setscheduler(2), pthread_setschedparam(3), readahead(2), mlock(2), madvise(2), posix_fadvise(2)
的更多信息
如果您最感兴趣的是基准测试,明智的方法是多次重复相同的基准测试(例如 4 到 15 次),然后取最小值、最大值或平均值。
我有一个类似 Rasberry PI 的硬件,它有一个基本的 linux 操作系统和一个名为 运行ning 的程序 "Main_Prog"。
每次我 运行 再次进行性能测试时 Main_Prog 我得到的性能波动小于 1%。这是完全可以接受的。
当我使用 kill 命令杀死 Main_Prog 并重新启动 Main_Prog 时,性能变化高达 8%。进一步的性能测试将围绕此波动变化小于 1%。
例子
例如,如果 Main_Prog 首先 运行 在 100 calls/sec 之间变化 99-101 calls/sec.
然后我对 Main_Prog 执行了 "kill" 命令并使用“./Main_Prog &”重新启动。然后我 运行 进行了性能测试,现在 Main_Prog 是 运行ning 105 calls/sec 和 104-106 calls/sec波动。它将继续 运行 104-106 calls/sec 直到我杀死 Main_Prog 并启动它。
知道如何防止波动或发生了什么吗?请记住,它是非常一致的。操作系统上没有其他程序 运行ning。
您的临时波动可能与page cache. I would not bother (the change is insignificant). See also http://www.linuxatemyram.com/
有关您可以预先填充页面缓存,例如通过 运行 一些 wc Main_Prog
在 运行 ./Main_Prog
而且您的 Raspberry Pi 上可能还有一些其他 executable programs & processes(检查 top
或 ps auxw
)。我猜 /sbin/init
在 pid 1 仍然是 运行。可能你的 shell 也是 运行。
只有一个进程的 Linux 系统是很不寻常的。为此,您应该将 /sbin/init
替换为您的程序,我真的不建议这样做,尤其是当您不太了解 Linux 时。
由于您的盒子中有多个进程 运行,并且由于内核 scheduler is preempting 在任意时刻执行任务,因此其行为无法完全重现,这解释了观察到的波动。
另请阅读有关 real-time scheduling, setpriority(2), sched_setscheduler(2), pthread_setschedparam(3), readahead(2), mlock(2), madvise(2), posix_fadvise(2)
的更多信息如果您最感兴趣的是基准测试,明智的方法是多次重复相同的基准测试(例如 4 到 15 次),然后取最小值、最大值或平均值。