【问题标题】:Move all threads to use other CPU core so one thread can use other CPU core?移动所有线程以使用其他 CPU 核心,以便一个线程可以使用其他 CPU 核心?
【发布时间】:2014-04-01 01:40:24
【问题描述】:

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

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

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

但是我怎样才能将所有其他线程推送到 CPU1 上呢?有没有相对简单的方法来做到这一点?

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

【问题讨论】:

  • nice -n -20 <command> 也许?
  • 答案很可能是cgroups,虽然我不知道更多关于他们的信息来进一步帮助你!
  • 我的意思是 C/C++ 答案:)

标签: c linux performance cpu affinity


【解决方案1】:

您这样做的想法似乎是正确的。不过我想提几点,应该仔细理解。

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

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

【讨论】:

    猜你喜欢
    • 2011-12-24
    • 1970-01-01
    • 1970-01-01
    • 2012-10-04
    • 1970-01-01
    • 2017-07-27
    • 1970-01-01
    • 2012-09-08
    相关资源
    最近更新 更多