Based on kernel version 2.6.34. Page generated on 2010-05-31 16:02 EST.
1 2 Export CPU topology info via sysfs. Items (attributes) are similar 3 to /proc/cpuinfo. 4 5 1) /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 11 2) /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 17 3) /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 22 4) /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 27 To implement it in an architecture-neutral way, a new source file, 28 drivers/base/topology.c, is to export the 4 attributes. 29 30 For an architecture to support this feature, it must define some of 31 these 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 37 The type of **_id is int. 38 The type of siblings is (const) struct cpumask *. 39 40 To be consistent on all architectures, include/linux/topology.h 41 provides default definitions for any of the above macros that are 42 not defined by include/asm-XXX/topology.h: 43 1) physical_package_id: -1 44 2) core_id: 0 45 3) thread_siblings: just the given CPU 46 4) core_siblings: just the given CPU 47 48 Additionally, CPU topology information is provided under 49 /sys/devices/system/cpu and includes these files. The internal 50 source 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 68 The format for the above output is compatible with cpulist_parse() 69 [see <linux/cpumask.h>]. Some examples follow. 70 71 In this example, there are 64 CPUs in the system but cpus 32-63 exceed 72 the kernel max which is limited to 0..31 by the NR_CPUS config option 73 being 32. Note also that CPUs 2 and 4-31 are not online but could be 74 brought 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 82 In this example, the NR_CPUS config option is 128, but the kernel was 83 started with possible_cpus=144. There are 4 CPUs in the system and cpu2 84 was manually taken offline (and is the only CPU that can be brought 85 online.) 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 93 See cpu-hotplug.txt for the possible_cpus=NUM kernel start parameter 94 as well as more information on the various cpumasks.