1 2Export CPU topology info via sysfs. Items (attributes) are similar 3to /proc/cpuinfo. 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/thread_siblings: 18 19 internel kernel map of cpuX's hardware threads within the same 20 core as cpuX 21 224) /sys/devices/system/cpu/cpuX/topology/core_siblings: 23 24 internal kernel map of cpuX's hardware threads within the same 25 physical_package_id. 26 27To implement it in an architecture-neutral way, a new source file, 28drivers/base/topology.c, is to export the 4 attributes. 29 30For an architecture to support this feature, it must define some of 31these macros in include/asm-XXX/topology.h: 32#define topology_physical_package_id(cpu) 33#define topology_core_id(cpu) 34#define topology_thread_cpumask(cpu) 35#define topology_core_cpumask(cpu) 36 37The type of **_id is int. 38The type of siblings is (const) struct cpumask *. 39 40To be consistent on all architectures, include/linux/topology.h 41provides default definitions for any of the above macros that are 42not defined by include/asm-XXX/topology.h: 431) physical_package_id: -1 442) core_id: 0 453) thread_siblings: just the given CPU 464) core_siblings: just the given CPU 47 48Additionally, CPU topology information is provided under 49/sys/devices/system/cpu and includes these files. The internal 50source for the output is in brackets ("[]"). 51 52 kernel_max: the maximum CPU index allowed by the kernel configuration. 53 [NR_CPUS-1] 54 55 offline: CPUs that are not online because they have been 56 HOTPLUGGED off (see cpu-hotplug.txt) or exceed the limit 57 of CPUs allowed by the kernel configuration (kernel_max 58 above). [~cpu_online_mask + cpus >= NR_CPUS] 59 60 online: CPUs that are online and being scheduled [cpu_online_mask] 61 62 possible: CPUs that have been allocated resources and can be 63 brought online if they are present. [cpu_possible_mask] 64 65 present: CPUs that have been identified as being present in the 66 system. [cpu_present_mask] 67 68The format for the above output is compatible with cpulist_parse() 69[see <linux/cpumask.h>]. Some examples follow. 70 71In this example, there are 64 CPUs in the system but cpus 32-63 exceed 72the kernel max which is limited to 0..31 by the NR_CPUS config option 73being 32. Note also that CPUs 2 and 4-31 are not online but could be 74brought online as they are both present and possible. 75 76 kernel_max: 31 77 offline: 2,4-31,32-63 78 online: 0-1,3 79 possible: 0-31 80 present: 0-31 81 82In this example, the NR_CPUS config option is 128, but the kernel was 83started with possible_cpus=144. There are 4 CPUs in the system and cpu2 84was manually taken offline (and is the only CPU that can be brought 85online.) 86 87 kernel_max: 127 88 offline: 2,4-127,128-143 89 online: 0-1,3 90 possible: 0-127 91 present: 0-3 92 93See cpu-hotplug.txt for the possible_cpus=NUM kernel start parameter 94as well as more information on the various cpumasks. 95