仅使用一个 CPU 内核

pet*_*555 9 linux cpu parallelism

我需要为我的并发程序运行性能测试,我的要求是它应该只在一个CPU 内核上运行。(我不想合作线程 - 我希望总是有一个上下文切换)。

所以我有两个问题:

  1. 最佳解决方案 - 如何仅为我的程序签名和保留一个 CPU 内核(以强制操作系统不使用此 CPU 内核)。我想这是不可能的,但也许我错了......

  2. 如何设置 linux (Fedora 24) 只使用一个 CPU 核心?

ilk*_*chu 27

在 linux 上,为进程设置 CPU 亲和性的系统调用是 sched_setaffinity. 然后是在命令行上执行此操作的taskset工具

让那个程序只在一个 CPU 上运行,我想你会想要这样的

taskset -c 1 ./myprogram
Run Code Online (Sandbox Code Playgroud)

(将任何 CPU 编号设置为-c开关的参数。)

这应该足够接近单处理器系统,只要您的其他进程与您要测量的进程相比不会运行太多,或者它们被调度到其他 CPU 上。如果你想奉献一个CPU到单个进程,并阻止其他进程从CPU上运行,你需要建立自己的亲和力了。

那,我知道该怎么做。您需要init在启动过程的早期设置处理器关联,以确保它被系统上的所有进程继承。作为一种解决方法,您可以将taskset -c -p 0 $PID所有其他进程用于强制它们仅在 CPU #0 上运行。

systemd还具有CPUAffinity=控制在单元文件的亲和力,有一对夫妇问题,在这里设置上unix.SE默认的亲和力,但我没有找到任何一个好办法。

尽管@Kamil Maciorowski在 superuser.com 上 评论并回答了另一个问题isolcpus=1内核命令行上的设置应该“将该 CPU 与通用调度算法隔离”,这可能是您想要的。