仅使用一个CPU核心

仅使用一个CPU核心

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

所以我有两个问题:

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

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

答案1

在 Linux 上,设置进程的 CPU 关联性的系统调用是 sched_setaffinity。然后就是taskset工具在命令行上执行此操作。

要让单个程序仅在一个 CPU 上运行,我认为您需要类似的东西

taskset -c 1 ./myprogram

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

这应该足够接近单处理器系统,只要您的其他进程与您想要测量的进程相比没有运行太多,或者它们被调度到其他 CPU 上。如果您想将一个 CPU 专用于该单个进程仅有的,并防止其他如果进程不在该 CPU 上运行,您还需要设置它们的关联性。

知道如何正确做。您需要init在启动过程的早期设置处理器关联性,以确保它继承到系统上的所有进程。作为解决方法,您可以taskset -c -p 0 $PID对所有其他进程使用强制它们仅在 CPU #0 上运行。

systemd 也有CPUAffinity=控制单元文件中的亲和力,并且有一对夫妇问题关于在 unix.SE 上设置默认亲和力,但我没有找到任何好的解决方案。

虽然作为@卡米尔·马乔罗夫斯基 评论并回答了 superuser.com 上的另一个问题,设置isolcpus=1内核命令行应该“将该 CPU 与通用调度算法隔离”,这可能是您想要的。

相关内容