【发布时间】:2013-01-23 03:39:59
【问题描述】:
我了解进程(父) 可以使用sched_setaffinity 固定到核心,然后分叉的进程继承亲和性,并且也将固定在相同的核心。但是,我不想让它们永远固定在同一个核心上。理想情况下,我希望他们在同一个 CPU 上保持在一起,即如果操作系统调度程序迁移父级,则子级应该跟随父级并迁移到与父级相同的 CPU。 p>
一种可能的方法是使用shared variable,其中父级会定期更新其当前 CPU。然后子进程可以定期查找这个变量并sched_setaffinity 迁移到与父进程相同的 CPU。但是,这看起来有点 hacky,并且可能涉及它们在单独的 CPU 上运行的时间段。有没有更好的方法来实现这一点?
【问题讨论】:
-
我认为这是实现定义的,因操作系统而异。请添加更多信息。
-
我认为你不能在 Linux 上做到这一点。但是这里的“在同一个核心上运行”是什么意思? “在同一个核心上运行”在观察上不等同于“从不同时运行”吗?
-
tmyklebu:首先,是的,我的目标是 Linux(并且不关心可移植性)。现在,应用程序是这样的,父级向执行 foo(buffer) 的子级发送一个缓冲区。因此,它们从来没有真正“同时运行”,但是,如果它们在不同的内核上运行,那么开销就会显着增加(可能是由于 L2/L3 没有在内核之间共享)。因此,我希望它们始终在同一个 CPU 上。
-
迄今为止最简单和最有效的方法是使用单个进程。你能重组你的代码来做到这一点吗?
标签: c linux performance fork scheduling