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/thread_siblings: 24 25 internal kernel map of cpuX's hardware threads within the same 26 core as cpuX. 27 285) /sys/devices/system/cpu/cpuX/topology/thread_siblings_list: 29 30 human-readable list of cpuX's hardware threads within the same 31 core as cpuX. 32 336) /sys/devices/system/cpu/cpuX/topology/core_siblings: 34 35 internal kernel map of cpuX's hardware threads within the same 36 physical_package_id. 37 387) /sys/devices/system/cpu/cpuX/topology/core_siblings_list: 39 40 human-readable list of cpuX's hardware threads within the same 41 physical_package_id. 42 438) /sys/devices/system/cpu/cpuX/topology/book_siblings: 44 45 internal kernel map of cpuX's hardware threads within the same 46 book_id. 47 489) /sys/devices/system/cpu/cpuX/topology/book_siblings_list: 49 50 human-readable list of cpuX's hardware threads within the same 51 book_id. 52 53To implement it in an architecture-neutral way, a new source file, 54drivers/base/topology.c, is to export the 6 or 9 attributes. The three book 55related sysfs files will only be created if CONFIG_SCHED_BOOK is selected. 56 57For an architecture to support this feature, it must define some of 58these macros in include/asm-XXX/topology.h: 59#define topology_physical_package_id(cpu) 60#define topology_core_id(cpu) 61#define topology_book_id(cpu) 62#define topology_sibling_cpumask(cpu) 63#define topology_core_cpumask(cpu) 64#define topology_book_cpumask(cpu) 65 66The type of **_id macros is int. 67The type of **_cpumask macros is (const) struct cpumask *. The latter 68correspond with appropriate **_siblings sysfs attributes (except for 69topology_sibling_cpumask() which corresponds with thread_siblings). 70 71To be consistent on all architectures, include/linux/topology.h 72provides default definitions for any of the above macros that are 73not defined by include/asm-XXX/topology.h: 741) physical_package_id: -1 752) core_id: 0 763) sibling_cpumask: just the given CPU 774) core_cpumask: just the given CPU 78 79For architectures that don't support books (CONFIG_SCHED_BOOK) there are no 80default definitions for topology_book_id() and topology_book_cpumask(). 81 82Additionally, CPU topology information is provided under 83/sys/devices/system/cpu and includes these files. The internal 84source for the output is in brackets ("[]"). 85 86 kernel_max: the maximum CPU index allowed by the kernel configuration. 87 [NR_CPUS-1] 88 89 offline: CPUs that are not online because they have been 90 HOTPLUGGED off (see cpu-hotplug.txt) or exceed the limit 91 of CPUs allowed by the kernel configuration (kernel_max 92 above). [~cpu_online_mask + cpus >= NR_CPUS] 93 94 online: CPUs that are online and being scheduled [cpu_online_mask] 95 96 possible: CPUs that have been allocated resources and can be 97 brought online if they are present. [cpu_possible_mask] 98 99 present: CPUs that have been identified as being present in the 100 system. [cpu_present_mask] 101 102The format for the above output is compatible with cpulist_parse() 103[see <linux/cpumask.h>]. Some examples follow. 104 105In this example, there are 64 CPUs in the system but cpus 32-63 exceed 106the kernel max which is limited to 0..31 by the NR_CPUS config option 107being 32. Note also that CPUs 2 and 4-31 are not online but could be 108brought online as they are both present and possible. 109 110 kernel_max: 31 111 offline: 2,4-31,32-63 112 online: 0-1,3 113 possible: 0-31 114 present: 0-31 115 116In this example, the NR_CPUS config option is 128, but the kernel was 117started with possible_cpus=144. There are 4 CPUs in the system and cpu2 118was manually taken offline (and is the only CPU that can be brought 119online.) 120 121 kernel_max: 127 122 offline: 2,4-127,128-143 123 online: 0-1,3 124 possible: 0-127 125 present: 0-3 126 127See cpu-hotplug.txt for the possible_cpus=NUM kernel start parameter 128as well as more information on the various cpumasks. 129