Linux X86中使用taskset在独立CPU上运行进程的不同行为

Linux X86中使用taskset在独立CPU上运行进程的不同行为,linux,linux-kernel,scheduler,Linux,Linux Kernel,Scheduler,我正在运行一个性能测试,将一组进程/线程放入Linux中的一组独立CPU中。 让我以/usr/bin/stress为例来说明Linux 4.18.20中的不同行为。 系统中有16个CPU,CPU 2-13与ISOLCPU=2-13隔离。 测试1,任务集-C2-13/usr/bin/stress-C12。目标是在CPU 2-13中运行12个压力实例。但事实上,所有的压力实例都放在CPU2中,而不是放在其他CPU上 测试2,任务集-C2-13 chrt-F1/usr/bin/stress-C12。这

我正在运行一个性能测试,将一组进程/线程放入Linux中的一组独立CPU中。
让我以/usr/bin/stress为例来说明Linux 4.18.20中的不同行为。
系统中有16个CPU,CPU 2-13与ISOLCPU=2-13隔离。
测试1,任务集-C2-13/usr/bin/stress-C12。目标是在CPU 2-13中运行12个压力实例。但事实上,所有的压力实例都放在CPU2中,而不是放在其他CPU上

测试2,任务集-C2-13 chrt-F1/usr/bin/stress-C12。这一次,12个实例被放入12个CPU中,每个实例都在一个特定的CPU上


所以问题是为什么测试1和测试2有不同的行为,内核的哪个部分导致了这种差异?

哪个CPU运行任务是由调度程序决定的。@斯塔克不一定,你可以使用它强制某个CPU(或一组CPU),这就是
任务集
命令的作用。是的,sched_setaffinity可以将一个进程分配给一组要运行的CPU。但是回到我的具体情况,我不知道内核代码的哪一部分起作用。测试1使用CFS调度,测试2使用RT调度。但我需要找出根本原因的细节。