![防止调度程序在 FreeBSD 上使用某些内核](https://linux22.com/image/110630/%E9%98%B2%E6%AD%A2%E8%B0%83%E5%BA%A6%E7%A8%8B%E5%BA%8F%E5%9C%A8%20FreeBSD%20%E4%B8%8A%E4%BD%BF%E7%94%A8%E6%9F%90%E4%BA%9B%E5%86%85%E6%A0%B8.png)
似乎可以通过该cpuset(1)
实用程序将进程固定到特定的核心。是否可以告诉调度程序避免使用所有其他进程(当前和未来的进程)的特定核心?
答案1
您可以阅读老的调度程序在FreeBSD 操作系统中的进程管理
新的”ULE调度器在 FreeBSD 5 中引入,但直到 7.1 才默认启用。你可以找到一篇描述它的论文这里。这将使您更好地理解调度程序的工作原理。
提示:在研究 CPU 关联性时,最好了解 CPU 拓扑:
$ sysctl kern.sched.topology_spec
提示: 程序统计使用 -S 标志也有助于概述所使用的 cpuset:
$ procstat -a -S
是的 - 您可以告诉调度程序通过管理“cpusets”来“避免”核心。查看手册页中的示例中央处理器组(1)。 CPUset 1 是默认设置。您只需修改该集合即可。
来自男人页:
修改默认情况下所有线程所在的 cpuset 仅包含前 4 个 CPU,其余空闲:
cpuset -l 0-3 -s 1
如果我们想象我们有 8 个 CPU,我们现在已将默认 cpuset 中的所有线程移至前 4 个。当我们修改默认集(默认进程在集 1 中启动)时,这将避免剩余的核心处于空闲状态。
您可以为剩余的 CPU 创建一个新的 cpuset(即编号 2),然后在需要使用它们时进行分配。