Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v4.9-rc2 152 lines 5.4 kB view raw
1 2Export CPU topology info via sysfs. Items (attributes) are similar 3to /proc/cpuinfo output of some architectures: 4 51) /sys/devices/system/cpu/cpuX/topology/physical_package_id: 6 7 physical package id of cpuX. Typically corresponds to a physical 8 socket number, but the actual value is architecture and platform 9 dependent. 10 112) /sys/devices/system/cpu/cpuX/topology/core_id: 12 13 the CPU core ID of cpuX. Typically it is the hardware platform's 14 identifier (rather than the kernel's). The actual value is 15 architecture and platform dependent. 16 173) /sys/devices/system/cpu/cpuX/topology/book_id: 18 19 the book ID of cpuX. Typically it is the hardware platform's 20 identifier (rather than the kernel's). The actual value is 21 architecture and platform dependent. 22 234) /sys/devices/system/cpu/cpuX/topology/drawer_id: 24 25 the drawer ID of cpuX. Typically it is the hardware platform's 26 identifier (rather than the kernel's). The actual value is 27 architecture and platform dependent. 28 295) /sys/devices/system/cpu/cpuX/topology/thread_siblings: 30 31 internal kernel map of cpuX's hardware threads within the same 32 core as cpuX. 33 346) /sys/devices/system/cpu/cpuX/topology/thread_siblings_list: 35 36 human-readable list of cpuX's hardware threads within the same 37 core as cpuX. 38 397) /sys/devices/system/cpu/cpuX/topology/core_siblings: 40 41 internal kernel map of cpuX's hardware threads within the same 42 physical_package_id. 43 448) /sys/devices/system/cpu/cpuX/topology/core_siblings_list: 45 46 human-readable list of cpuX's hardware threads within the same 47 physical_package_id. 48 499) /sys/devices/system/cpu/cpuX/topology/book_siblings: 50 51 internal kernel map of cpuX's hardware threads within the same 52 book_id. 53 5410) /sys/devices/system/cpu/cpuX/topology/book_siblings_list: 55 56 human-readable list of cpuX's hardware threads within the same 57 book_id. 58 5911) /sys/devices/system/cpu/cpuX/topology/drawer_siblings: 60 61 internal kernel map of cpuX's hardware threads within the same 62 drawer_id. 63 6412) /sys/devices/system/cpu/cpuX/topology/drawer_siblings_list: 65 66 human-readable list of cpuX's hardware threads within the same 67 drawer_id. 68 69To implement it in an architecture-neutral way, a new source file, 70drivers/base/topology.c, is to export the 6 to 12 attributes. The book 71and drawer related sysfs files will only be created if CONFIG_SCHED_BOOK 72and CONFIG_SCHED_DRAWER are selected. 73 74CONFIG_SCHED_BOOK and CONFIG_DRAWER are currently only used on s390, where 75they reflect the cpu and cache hierarchy. 76 77For an architecture to support this feature, it must define some of 78these macros in include/asm-XXX/topology.h: 79#define topology_physical_package_id(cpu) 80#define topology_core_id(cpu) 81#define topology_book_id(cpu) 82#define topology_drawer_id(cpu) 83#define topology_sibling_cpumask(cpu) 84#define topology_core_cpumask(cpu) 85#define topology_book_cpumask(cpu) 86#define topology_drawer_cpumask(cpu) 87 88The type of **_id macros is int. 89The type of **_cpumask macros is (const) struct cpumask *. The latter 90correspond with appropriate **_siblings sysfs attributes (except for 91topology_sibling_cpumask() which corresponds with thread_siblings). 92 93To be consistent on all architectures, include/linux/topology.h 94provides default definitions for any of the above macros that are 95not defined by include/asm-XXX/topology.h: 961) physical_package_id: -1 972) core_id: 0 983) sibling_cpumask: just the given CPU 994) core_cpumask: just the given CPU 100 101For architectures that don't support books (CONFIG_SCHED_BOOK) there are no 102default definitions for topology_book_id() and topology_book_cpumask(). 103For architectures that don't support drawes (CONFIG_SCHED_DRAWER) there are 104no default definitions for topology_drawer_id() and topology_drawer_cpumask(). 105 106Additionally, CPU topology information is provided under 107/sys/devices/system/cpu and includes these files. The internal 108source for the output is in brackets ("[]"). 109 110 kernel_max: the maximum CPU index allowed by the kernel configuration. 111 [NR_CPUS-1] 112 113 offline: CPUs that are not online because they have been 114 HOTPLUGGED off (see cpu-hotplug.txt) or exceed the limit 115 of CPUs allowed by the kernel configuration (kernel_max 116 above). [~cpu_online_mask + cpus >= NR_CPUS] 117 118 online: CPUs that are online and being scheduled [cpu_online_mask] 119 120 possible: CPUs that have been allocated resources and can be 121 brought online if they are present. [cpu_possible_mask] 122 123 present: CPUs that have been identified as being present in the 124 system. [cpu_present_mask] 125 126The format for the above output is compatible with cpulist_parse() 127[see <linux/cpumask.h>]. Some examples follow. 128 129In this example, there are 64 CPUs in the system but cpus 32-63 exceed 130the kernel max which is limited to 0..31 by the NR_CPUS config option 131being 32. Note also that CPUs 2 and 4-31 are not online but could be 132brought online as they are both present and possible. 133 134 kernel_max: 31 135 offline: 2,4-31,32-63 136 online: 0-1,3 137 possible: 0-31 138 present: 0-31 139 140In this example, the NR_CPUS config option is 128, but the kernel was 141started with possible_cpus=144. There are 4 CPUs in the system and cpu2 142was manually taken offline (and is the only CPU that can be brought 143online.) 144 145 kernel_max: 127 146 offline: 2,4-127,128-143 147 online: 0-1,3 148 possible: 0-127 149 present: 0-3 150 151See cpu-hotplug.txt for the possible_cpus=NUM kernel start parameter 152as well as more information on the various cpumasks.