blob: b90dafcc8237cc8be9c3fa51aa2e12fd47cb56b7 [file] [log] [blame]
Mauro Carvalho Chehabe8cb6f12017-05-14 09:52:01 -03001===========================================
2How CPU topology info is exported via sysfs
3===========================================
Zhang, Yanmin69dcc992006-02-03 03:04:36 -08004
Alex Chiang663fb2f2009-10-21 21:45:31 -06005Export CPU topology info via sysfs. Items (attributes) are similar
Len Brown3a1c7792019-02-26 01:20:00 -05006to /proc/cpuinfo output of some architectures. They reside in
7/sys/devices/system/cpu/cpuX/topology/:
Zhang, Yanmin69dcc992006-02-03 03:04:36 -08008
Len Brown3a1c7792019-02-26 01:20:00 -05009physical_package_id:
Alex Chiang663fb2f2009-10-21 21:45:31 -060010
11 physical package id of cpuX. Typically corresponds to a physical
12 socket number, but the actual value is architecture and platform
13 dependent.
14
Len Brown0e344d82019-05-13 13:58:47 -040015die_id:
16
17 the CPU die ID of cpuX. Typically it is the hardware platform's
18 identifier (rather than the kernel's). The actual value is
19 architecture and platform dependent.
20
Len Brown3a1c7792019-02-26 01:20:00 -050021core_id:
Alex Chiang663fb2f2009-10-21 21:45:31 -060022
23 the CPU core ID of cpuX. Typically it is the hardware platform's
24 identifier (rather than the kernel's). The actual value is
25 architecture and platform dependent.
26
Len Brown3a1c7792019-02-26 01:20:00 -050027book_id:
Heiko Carstensb40d8ed2010-08-31 10:28:17 +020028
29 the book ID of cpuX. Typically it is the hardware platform's
30 identifier (rather than the kernel's). The actual value is
31 architecture and platform dependent.
32
Len Brown3a1c7792019-02-26 01:20:00 -050033drawer_id:
Heiko Carstensa62247e2016-05-21 11:10:13 +020034
35 the drawer ID of cpuX. Typically it is the hardware platform's
36 identifier (rather than the kernel's). The actual value is
37 architecture and platform dependent.
38
Len Brown2e4c54d2019-05-13 13:58:56 -040039core_cpus:
Alex Chiang663fb2f2009-10-21 21:45:31 -060040
Len Brown2e4c54d2019-05-13 13:58:56 -040041 internal kernel map of CPUs within the same core.
42 (deprecated name: "thread_siblings")
Alex Chiang663fb2f2009-10-21 21:45:31 -060043
Len Brown2e4c54d2019-05-13 13:58:56 -040044core_cpus_list:
Bartosz Golaszewski54a53692015-05-26 15:11:29 +020045
Len Brown2e4c54d2019-05-13 13:58:56 -040046 human-readable list of CPUs within the same core.
47 (deprecated name: "thread_siblings_list");
Bartosz Golaszewski54a53692015-05-26 15:11:29 +020048
Len Brownb73ed8d2019-05-13 13:58:55 -040049package_cpus:
Alex Chiang663fb2f2009-10-21 21:45:31 -060050
Len Brownb73ed8d2019-05-13 13:58:55 -040051 internal kernel map of the CPUs sharing the same physical_package_id.
52 (deprecated name: "core_siblings")
Zhang, Yanmin69dcc992006-02-03 03:04:36 -080053
Len Brownb73ed8d2019-05-13 13:58:55 -040054package_cpus_list:
Bartosz Golaszewski54a53692015-05-26 15:11:29 +020055
Len Brownb73ed8d2019-05-13 13:58:55 -040056 human-readable list of CPUs sharing the same physical_package_id.
57 (deprecated name: "core_siblings_list")
Bartosz Golaszewski54a53692015-05-26 15:11:29 +020058
Len Brown2e4c54d2019-05-13 13:58:56 -040059die_cpus:
60
61 internal kernel map of CPUs within the same die.
62
63die_cpus_list:
64
65 human-readable list of CPUs within the same die.
66
Len Brown3a1c7792019-02-26 01:20:00 -050067book_siblings:
Heiko Carstensb40d8ed2010-08-31 10:28:17 +020068
69 internal kernel map of cpuX's hardware threads within the same
70 book_id.
71
Len Brown3a1c7792019-02-26 01:20:00 -050072book_siblings_list:
Bartosz Golaszewski54a53692015-05-26 15:11:29 +020073
74 human-readable list of cpuX's hardware threads within the same
75 book_id.
76
Len Brown3a1c7792019-02-26 01:20:00 -050077drawer_siblings:
Heiko Carstensa62247e2016-05-21 11:10:13 +020078
79 internal kernel map of cpuX's hardware threads within the same
80 drawer_id.
81
Len Brown3a1c7792019-02-26 01:20:00 -050082drawer_siblings_list:
Heiko Carstensa62247e2016-05-21 11:10:13 +020083
84 human-readable list of cpuX's hardware threads within the same
85 drawer_id.
86
Len Brown3a1c7792019-02-26 01:20:00 -050087Architecture-neutral, drivers/base/topology.c, exports these attributes.
88However, the book and drawer related sysfs files will only be created if
89CONFIG_SCHED_BOOK and CONFIG_SCHED_DRAWER are selected, respectively.
Heiko Carstensa62247e2016-05-21 11:10:13 +020090
Len Brown3a1c7792019-02-26 01:20:00 -050091CONFIG_SCHED_BOOK and CONFIG_SCHED_DRAWER are currently only used on s390,
92where they reflect the cpu and cache hierarchy.
Zhang, Yanmin69dcc992006-02-03 03:04:36 -080093
Ben Hutchingsc50cbb02008-06-04 21:47:29 -070094For an architecture to support this feature, it must define some of
Mauro Carvalho Chehabe8cb6f12017-05-14 09:52:01 -030095these macros in include/asm-XXX/topology.h::
Zhang, Yanmin69dcc992006-02-03 03:04:36 -080096
Mauro Carvalho Chehabe8cb6f12017-05-14 09:52:01 -030097 #define topology_physical_package_id(cpu)
Len Brown0e344d82019-05-13 13:58:47 -040098 #define topology_die_id(cpu)
Mauro Carvalho Chehabe8cb6f12017-05-14 09:52:01 -030099 #define topology_core_id(cpu)
100 #define topology_book_id(cpu)
101 #define topology_drawer_id(cpu)
102 #define topology_sibling_cpumask(cpu)
103 #define topology_core_cpumask(cpu)
Len Brown2e4c54d2019-05-13 13:58:56 -0400104 #define topology_die_cpumask(cpu)
Mauro Carvalho Chehabe8cb6f12017-05-14 09:52:01 -0300105 #define topology_book_cpumask(cpu)
106 #define topology_drawer_cpumask(cpu)
107
108The type of ``**_id macros`` is int.
109The type of ``**_cpumask macros`` is ``(const) struct cpumask *``. The latter
110correspond with appropriate ``**_siblings`` sysfs attributes (except for
Bartosz Golaszewski54a53692015-05-26 15:11:29 +0200111topology_sibling_cpumask() which corresponds with thread_siblings).
Zhang, Yanmin69dcc992006-02-03 03:04:36 -0800112
Ben Hutchingsc50cbb02008-06-04 21:47:29 -0700113To be consistent on all architectures, include/linux/topology.h
114provides default definitions for any of the above macros that are
115not defined by include/asm-XXX/topology.h:
Mauro Carvalho Chehabe8cb6f12017-05-14 09:52:01 -0300116
Len Brown3a1c7792019-02-26 01:20:00 -05001171) topology_physical_package_id: -1
Len Brown0e344d82019-05-13 13:58:47 -04001182) topology_die_id: -1
1193) topology_core_id: 0
1204) topology_sibling_cpumask: just the given CPU
1215) topology_core_cpumask: just the given CPU
1226) topology_die_cpumask: just the given CPU
Mike Travisd62720a2008-12-17 14:14:30 -0800123
Heiko Carstensb40d8ed2010-08-31 10:28:17 +0200124For architectures that don't support books (CONFIG_SCHED_BOOK) there are no
125default definitions for topology_book_id() and topology_book_cpumask().
Stan Drozd9bb0e9c2017-04-21 13:16:03 +0200126For architectures that don't support drawers (CONFIG_SCHED_DRAWER) there are
Heiko Carstensa62247e2016-05-21 11:10:13 +0200127no default definitions for topology_drawer_id() and topology_drawer_cpumask().
Heiko Carstensb40d8ed2010-08-31 10:28:17 +0200128
Alex Chiang663fb2f2009-10-21 21:45:31 -0600129Additionally, CPU topology information is provided under
Mike Travisd62720a2008-12-17 14:14:30 -0800130/sys/devices/system/cpu and includes these files. The internal
131source for the output is in brackets ("[]").
132
Mauro Carvalho Chehabe8cb6f12017-05-14 09:52:01 -0300133 =========== ==========================================================
Alex Chiang663fb2f2009-10-21 21:45:31 -0600134 kernel_max: the maximum CPU index allowed by the kernel configuration.
Mike Travisd62720a2008-12-17 14:14:30 -0800135 [NR_CPUS-1]
136
Alex Chiang663fb2f2009-10-21 21:45:31 -0600137 offline: CPUs that are not online because they have been
Mike Travisd62720a2008-12-17 14:14:30 -0800138 HOTPLUGGED off (see cpu-hotplug.txt) or exceed the limit
Alex Chiang663fb2f2009-10-21 21:45:31 -0600139 of CPUs allowed by the kernel configuration (kernel_max
Mike Travisd62720a2008-12-17 14:14:30 -0800140 above). [~cpu_online_mask + cpus >= NR_CPUS]
141
Alex Chiang663fb2f2009-10-21 21:45:31 -0600142 online: CPUs that are online and being scheduled [cpu_online_mask]
Mike Travisd62720a2008-12-17 14:14:30 -0800143
Alex Chiang663fb2f2009-10-21 21:45:31 -0600144 possible: CPUs that have been allocated resources and can be
Mike Travisd62720a2008-12-17 14:14:30 -0800145 brought online if they are present. [cpu_possible_mask]
146
Alex Chiang663fb2f2009-10-21 21:45:31 -0600147 present: CPUs that have been identified as being present in the
Mike Travisd62720a2008-12-17 14:14:30 -0800148 system. [cpu_present_mask]
Mauro Carvalho Chehabe8cb6f12017-05-14 09:52:01 -0300149 =========== ==========================================================
Mike Travisd62720a2008-12-17 14:14:30 -0800150
151The format for the above output is compatible with cpulist_parse()
152[see <linux/cpumask.h>]. Some examples follow.
153
Alex Chiang663fb2f2009-10-21 21:45:31 -0600154In this example, there are 64 CPUs in the system but cpus 32-63 exceed
Mike Travisd62720a2008-12-17 14:14:30 -0800155the kernel max which is limited to 0..31 by the NR_CPUS config option
Alex Chiang663fb2f2009-10-21 21:45:31 -0600156being 32. Note also that CPUs 2 and 4-31 are not online but could be
Mauro Carvalho Chehabe8cb6f12017-05-14 09:52:01 -0300157brought online as they are both present and possible::
Mike Travisd62720a2008-12-17 14:14:30 -0800158
159 kernel_max: 31
160 offline: 2,4-31,32-63
161 online: 0-1,3
162 possible: 0-31
163 present: 0-31
164
165In this example, the NR_CPUS config option is 128, but the kernel was
Alex Chiang663fb2f2009-10-21 21:45:31 -0600166started with possible_cpus=144. There are 4 CPUs in the system and cpu2
167was manually taken offline (and is the only CPU that can be brought
Mauro Carvalho Chehabe8cb6f12017-05-14 09:52:01 -0300168online.)::
Mike Travisd62720a2008-12-17 14:14:30 -0800169
170 kernel_max: 127
171 offline: 2,4-127,128-143
172 online: 0-1,3
173 possible: 0-127
174 present: 0-3
175
176See cpu-hotplug.txt for the possible_cpus=NUM kernel start parameter
Alex Chiang663fb2f2009-10-21 21:45:31 -0600177as well as more information on the various cpumasks.