移动所有线程以使用其他CPU内核,以便一个线程可以使用其他CPU内核?

时间:2014-04-01 01:40:24

标签: c linux performance cpu affinity

Linux有许多线程和进程在CPU内核之间执行(比如2个)。我希望我的单线程C / C ++应用程序成为CPU0上唯一的线程。如何“移动”所有其他线程以使用CPU1?

我知道我可以使用Linux CPU调度功能来设置线程的亲和性:

int sched_setaffinity(pid_t pid,size_t cpusetsize,cpu_set_t *mask);

但是如何将所有其他线程推送到CPU1?有一个相对简单的方法吗?

我是否必须获取所有pid的列表,迭代将它们全部设置为CPU1然后将我的应用程序线程设置为CPU0?

1 个答案:

答案 0 :(得分:0)

你这样做的想法似乎是正确的。但是,我想提一些关于这一点的问题,应该仔细理解。

1.sched_setaffinity()是对内核/调度程序(而不是命令)的一种请求,用于选择允许哪个进程/线程执行的CPU。流程的实际调度确实取决于许多其他复杂因素。

2.你提到你可以遍历所有的PID。这不是一个好主意,因为通过这样做,您可能会尝试更改内核服务和init进程的调度。在所有情况下,程序都没有足够的权限为这些进程执行此操作,但我们仍然不应该尝试更改这些进程的属性,因为我们不知道其影响。