我已经使用这段代码尝试在执行程序时设置-same-高优先级:
CPU_SET(CPU_NUM, &cmask);
if (pthread_setaffinity_np(pid, sizeof(cmask), &cmask) < 0) {
LOG_ERROR("Could not set cpu affinity to core %d", CPU_NUM); goto exit_err;
}
errno = 0;
setpriority(PRIO_PROCESS, 0, -19);
程序的目的是对输入的常量束(每80个字节)执行一次计算。
但是在执行程序时,此计算所用的时间从30%到150%不等。
当绘制计算时间值时,我正在等待一个平滑的图表,偏差是10%-15%,但是超过40%!
所以我想问一下,如果CPU干扰了程序与其他程序的执行,如果是这样,我是否可以强制CPU只运行一个特定的程序?
提前致谢!
P.S。我还没有找到一个可以回答我的问题的帖子......
最相关的是:): Linux reserve a processor for a group of processes (dynamically)
答案 0 :(得分:2)
为了尝试减少抖动,您可以做的一些事情是:
SCHED_FIFO
。浏览How to build a Linux RT application可能很有用,因为准确的测量属于同一个域 - 但它可能更加极端:
现代桌面/服务器处理器非常复杂,以至于难以精确测量单个程序的低差异执行时间。像各种缓存和管道启动状态之类的东西会以任何方式扰乱执行时间,因此总会有限制。