我需要为我的并发程序运行性能测试,我的要求是它应该运行在只有一个CPU 核心。(我不想要协作线程 - 我希望总是有上下文切换)。
所以我有两个问题:
最佳解决方案 - 如何仅为我的程序签名和保留一个 CPU 核心(以强制操作系统不使用该 CPU 核心)。我想这是不可能的,但也许我错了......
如何设置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 与通用调度算法隔离”,这可能是您想要的。