11.3. 隔离单个 CPU 以运行高利用率任务
使用 cpusets
机制,您可以为 SCHED_DEADLINE
任务分配一组 CPU 和内存节点。在使用任务具有高和低 CPU 的任务集合中,隔离 CPU 以在不同的 CPU 上运行高利用率任务和将小利用率任务调度到不同的 CPU 集合中,使所有任务能够满足所分配的 运行时
。您必须手动为 'cpusets' 添加配置
先决条件
- 您在系统上具有 root 权限。
流程
创建两个名为 cluster 和 partition 的控制组:
cd /sys/fs/cgroup echo +cpuset > cgroup.subtree_control mkdir cluster mkdir partition echo +cpuset | tee cluster/cgroup.subtree_control partition/cgroup.subtree_control
# cd /sys/fs/cgroup # echo +cpuset > cgroup.subtree_control # mkdir cluster # mkdir partition # echo +cpuset | tee cluster/cgroup.subtree_control partition/cgroup.subtree_control
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在集群控制组群中,将低利用率任务调度到 CPU 1 到 7。验证内存大小,并将控制组命名为 exclusive :
cd cluster echo 1-7 | tee cpuset.cpus cpuset.cpus.exclusive echo root > cpuset.cpus.partition
# cd cluster # echo 1-7 | tee cpuset.cpus cpuset.cpus.exclusive # echo root > cpuset.cpus.partition
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将所有低利用率任务移到集群控制组群中:
ps -eLo lwp | while read thread; do echo $thread > cgroup.procs ; done
# ps -eLo lwp | while read thread; do echo $thread > cgroup.procs ; done
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
分区
控制组群中,分配高利用率任务:echo 0 | tee cpuset.cpus cpuset.cpus.exclusive echo isolated > cpuset.cpus.partition
# echo 0 | tee cpuset.cpus cpuset.cpus.exclusive # echo isolated > cpuset.cpus.partition
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 shell 添加到分区控制组中并启动:
echo $$ > cgroup.procs
# echo $$ > cgroup.procs
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在这个版本中,
在分区
控制组群中隔离的任务不会影响集群
控制组群中的任务。这可让所有实时任务满足调度程序期限。如果您使用截止时间调度程序,则在没有此更改的情况下通常会满足截止时间。请注意,其他任务都有自己的期限。
如果应用程序已准备好使用正确的固定,可以通过调整 cgroups 来进一步减少对 分区
cgroup 的 cpus,并为它分配所有实时任务:
cd .. echo 4-7 | tee cluster/{cpuset.cpus,cpuset.cpus.exclusive} echo 0-3 | tee partition/{cpuset.cpus,cpuset.cpus.exclusive}
# cd ..
# echo 4-7 | tee cluster/{cpuset.cpus,cpuset.cpus.exclusive}
# echo 0-3 | tee partition/{cpuset.cpus,cpuset.cpus.exclusive}