1*06500926STang Yizhou.. SPDX-License-Identifier: GPL-2.0
2*06500926STang Yizhou.. include:: ../disclaimer-zh_CN.rst
3*06500926STang Yizhou
4*06500926STang Yizhou:Original: Documentation/admin-guide/cputopology.rst
5*06500926STang Yizhou
6*06500926STang Yizhou:翻译:
7*06500926STang Yizhou
8*06500926STang Yizhou  唐艺舟 Tang Yizhou <tangyeechou@gmail.com>
9*06500926STang Yizhou
10*06500926STang Yizhou==========================
11*06500926STang Yizhou如何通过sysfs将CPU拓扑导出
12*06500926STang Yizhou==========================
13*06500926STang Yizhou
14*06500926STang YizhouCPU拓扑信息通过sysfs导出。显示的项(属性)和某些架构的/proc/cpuinfo输出相似。它们位于
15*06500926STang Yizhou/sys/devices/system/cpu/cpuX/topology/。请阅读ABI文件:
16*06500926STang YizhouDocumentation/ABI/stable/sysfs-devices-system-cpu17*06500926STang Yizhou
18*06500926STang Yizhoudrivers/base/topology.c是体系结构中性的,它导出了这些属性。然而,die、cluster、book、
19*06500926STang Yizhoudraw这些层次结构相关的文件仅在体系结构提供了下文描述的宏的条件下被创建。
20*06500926STang Yizhou
21*06500926STang Yizhou对于支持这个特性的体系结构,它必须在include/asm-XXX/topology.h中定义这些宏中的一部分::
22*06500926STang Yizhou
23*06500926STang Yizhou	#define topology_physical_package_id(cpu)
24*06500926STang Yizhou	#define topology_die_id(cpu)
25*06500926STang Yizhou	#define topology_cluster_id(cpu)
26*06500926STang Yizhou	#define topology_core_id(cpu)
27*06500926STang Yizhou	#define topology_book_id(cpu)
28*06500926STang Yizhou	#define topology_drawer_id(cpu)
29*06500926STang Yizhou	#define topology_sibling_cpumask(cpu)
30*06500926STang Yizhou	#define topology_core_cpumask(cpu)
31*06500926STang Yizhou	#define topology_cluster_cpumask(cpu)
32*06500926STang Yizhou	#define topology_die_cpumask(cpu)
33*06500926STang Yizhou	#define topology_book_cpumask(cpu)
34*06500926STang Yizhou	#define topology_drawer_cpumask(cpu)
35*06500926STang Yizhou
36*06500926STang Yizhou``**_id macros`` 的类型是int。
37*06500926STang Yizhou``**_cpumask macros`` 的类型是 ``(const) struct cpumask *`` 。后者和恰当的
38*06500926STang Yizhou``**_siblings`` sysfs属性对应(除了topology_sibling_cpumask(),它和thread_siblings
39*06500926STang Yizhou对应)。
40*06500926STang Yizhou
41*06500926STang Yizhou为了在所有体系结构上保持一致,include/linux/topology.h提供了上述所有宏的默认定义,以防
42*06500926STang Yizhou它们未在include/asm-XXX/topology.h中定义:
43*06500926STang Yizhou
44*06500926STang Yizhou1) topology_physical_package_id: -1
45*06500926STang Yizhou2) topology_die_id: -1
46*06500926STang Yizhou3) topology_cluster_id: -1
47*06500926STang Yizhou4) topology_core_id: 0
48*06500926STang Yizhou5) topology_book_id: -1
49*06500926STang Yizhou6) topology_drawer_id: -1
50*06500926STang Yizhou7) topology_sibling_cpumask: 仅入参CPU
51*06500926STang Yizhou8) topology_core_cpumask: 仅入参CPU
52*06500926STang Yizhou9) topology_cluster_cpumask: 仅入参CPU
53*06500926STang Yizhou10) topology_die_cpumask: 仅入参CPU
54*06500926STang Yizhou11) topology_book_cpumask:  仅入参CPU
55*06500926STang Yizhou12) topology_drawer_cpumask: 仅入参CPU
56*06500926STang Yizhou
57*06500926STang Yizhou此外,CPU拓扑信息由/sys/devices/system/cpu提供,包含下述文件。输出对应的内部数据源放在
58*06500926STang Yizhou方括号("[]")中。
59*06500926STang Yizhou
60*06500926STang Yizhou    =========== ==================================================================
61*06500926STang Yizhou    kernel_max: 内核配置允许的最大CPU下标值。[NR_CPUS-1]
62*06500926STang Yizhou
63*06500926STang Yizhou    offline:    由于热插拔移除或者超过内核允许的CPU上限(上文描述的kernel_max)
64*06500926STang Yizhou                导致未上线的CPU。[~cpu_online_mask + cpus >= NR_CPUS]
65*06500926STang Yizhou
66*06500926STang Yizhou    online:     在线的CPU,可供调度使用。[cpu_online_mask]
67*06500926STang Yizhou
68*06500926STang Yizhou    possible:   已被分配资源的CPU,如果它们CPU实际存在,可以上线。
69*06500926STang Yizhou                [cpu_possible_mask]
70*06500926STang Yizhou
71*06500926STang Yizhou    present:    被系统识别实际存在的CPU。[cpu_present_mask]
72*06500926STang Yizhou    =========== ==================================================================
73*06500926STang Yizhou
74*06500926STang Yizhou上述输出的格式和cpulist_parse()兼容[参见 <linux/cpumask.h>]。下面给些例子。
75*06500926STang Yizhou
76*06500926STang Yizhou在本例中,系统中有64个CPU,但是CPU 32-63超过了kernel_max值,因为NR_CPUS配置项是32,
77*06500926STang Yizhou取值范围被限制为0..31。此外注意CPU2和4-31未上线,但是可以上线,因为它们同时存在于
78*06500926STang Yizhoupresent和possible::
79*06500926STang Yizhou
80*06500926STang Yizhou     kernel_max: 31
81*06500926STang Yizhou        offline: 2,4-31,32-63
82*06500926STang Yizhou         online: 0-1,3
83*06500926STang Yizhou       possible: 0-31
84*06500926STang Yizhou        present: 0-31
85*06500926STang Yizhou
86*06500926STang Yizhou在本例中,NR_CPUS配置项是128,但内核启动时设置possible_cpus=144。系统中有4个CPU,
87*06500926STang YizhouCPU2被手动设置下线(也是唯一一个可以上线的CPU)::
88*06500926STang Yizhou
89*06500926STang Yizhou     kernel_max: 127
90*06500926STang Yizhou        offline: 2,4-127,128-143
91*06500926STang Yizhou         online: 0-1,3
92*06500926STang Yizhou       possible: 0-127
93*06500926STang Yizhou        present: 0-3
94*06500926STang Yizhou
95*06500926STang Yizhou阅读Documentation/core-api/cpu_hotplug.rst可了解开机参数possible_cpus=NUM,同时还
96*06500926STang Yizhou可以了解各种cpumask的信息。
97