1 .. SPDX-License-Identifier: GPL-2.0 2 .. include:: ../disclaimer-zh_CN.rst 3 4 :Original: Documentation/scheduler/sched-domai 5 6 :翻译: 7 8 唐艺舟 Tang Yizhou <tangyeechou@gmail.com> 9 10 :校译: 11 12 司延腾 Yanteng Si <siyanteng@loongson.cn> 13 14 ====== 15 调度域 16 ====== 17 18 每个CPU有一个“基”调度域(struct 19 通过->parent指针自下而上遍历。->par 20 因为它们无锁更新。 21 22 每个调度域管辖数个CPU(存储在->sp 23 超集(如有需求出现,这个限制可 24 顶层调度域通常将会管辖系统中的 25 CPU出现永远不会被指定任务运行的 26 着“在这些CPU中做进程负载均衡” 27 28 每个调度域必须具有一个或多个CPU 29 组织,存储在->groups指针中。这些 30 指针指向的这些组包含的CPU,必须 31 CPU共享。任意两个组的CPU掩码的交 32 标志位被设置,它管辖的调度组可 33 34 调度域中的负载均衡发生在调度组 35 管辖的每个CPU的负载之和。仅当组 36 37 在kernel/sched/core.c中,sched_balance_trig 38 周期执行。在当前运行队列下一个 39 的工作由sched_balance_softirq()->sched_bal 40 (SCHED_SOFTIRQ)。 41 42 后一个函数有两个入参:当前CPU的 43 当前CPU所在的基调度域开始迭代执 44 过程中,函数会检查当前调度域是 45 sched_balance_rq()。接下来它检查父调 46 47 起初,sched_balance_rq()查找当前调度 48 的运行队列中找出最繁忙的运行队 49 队列均加锁,并把任务从最繁忙队 50 中计算出的该调度域的调度组的不 51 52 实现调度域 53 ========== 54 55 基调度域会管辖CPU层次结构中的第 56 CPU的全部虚拟CPU,每个虚拟CPU对应 57 58 在SMP中,基调度域的父调度域将会 59 接下来,如果是非统一内存访问(N 60 CPU掩码对应一个调度组。亦或,你 61 调度域来覆盖它的一个NUMA层级。 62 63 实现者需要阅读include/linux/sched/sd_fl 64 SD标志位调节了哪些东西。 65 66 体系结构可以把指定的拓扑层级的 67 sched_domain_topology_level数组,并以该 68 69 调度域调试基础设施可以通过CONFIG_ 70 “sched_verbose”。如果你忘记调整开 71 /sys/kernel/debug/sched/verbose开关。这将 72 描述过的)绝大多数错误,同时以
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.