2

我使用这段代码尝试在执行程序时设置 -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只运行一个特定的程序吗?

提前致谢 !

PS我还没有找到可以回答我的问题的线程......

最相关的是:): Linux为一组进程(动态)保留一个处理器

4

1 回答 1

2

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

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

浏览一下如何构建 Linux RT 应用程序可能很有用,因为准确的测量是同一个领域——尽管可能更极端:

现代桌面/服务器处理器非常复杂,试图以低方差精确测量单个程序的执行时间非常困难。诸如各种缓存和管道启动状态之类的事情可能会以多种方式扰乱执行时间,因此总会有限制。

于 2015-12-29T07:54:06.423 回答