仅为一个进程保留一个处理器(已经具有最高优先级)

时间:2013-05-23 10:27:11

标签: linux scheduled-tasks

我已经使用这段代码尝试在执行程序时设置-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)

1 个答案:

答案 0 :(得分:2)

为了尝试减少抖动,您可以做的一些事情是:

  • 确保您已关闭CPU缩放。
  • 将该计划的日程安排策略设置为SCHED_FIFO
  • 如果您有多个处理器,请尝试将您的流程固定到一个处理器上。
  • 在您测量计划时,尝试同时运行少量其他流程。
  • 不要触发时间相关的非确定性来源(例如磁盘I / O)。

浏览How to build a Linux RT application可能很有用,因为准确的测量属于同一个域 - 但它可能更加极端:

现代桌面/服务器处理器非常复杂,以至于难以精确测量单个程序的低差异执行时间。像各种缓存和管道启动状态之类的东西会以任何方式扰乱执行时间,因此总会有限制。