2Export cpu topology info via sysfs. Items (attributes) are similar
   3to /proc/cpuinfo.
   51) /sys/devices/system/cpu/cpuX/topology/physical_package_id:
   6represent the physical package id of  cpu X;
   72) /sys/devices/system/cpu/cpuX/topology/core_id:
   8represent the cpu core id to cpu X;
   93) /sys/devices/system/cpu/cpuX/topology/thread_siblings:
  10represent the thread siblings to cpu X in the same core;
  114) /sys/devices/system/cpu/cpuX/topology/core_siblings:
  12represent the thread siblings to cpu X in the same physical package;
  14To implement it in an architecture-neutral way, a new source file,
  15drivers/base/topology.c, is to export the 4 attributes.
  17For an architecture to support this feature, it must define some of
  18these macros in include/asm-XXX/topology.h:
  19#define topology_physical_package_id(cpu)
  20#define topology_core_id(cpu)
  21#define topology_thread_cpumask(cpu)
  22#define topology_core_cpumask(cpu)
  24The type of **_id is int.
  25The type of siblings is (const) struct cpumask *.
  27To be consistent on all architectures, include/linux/topology.h
  28provides default definitions for any of the above macros that are
  29not defined by include/asm-XXX/topology.h:
  301) physical_package_id: -1
  312) core_id: 0
  323) thread_siblings: just the given CPU
  334) core_siblings: just the given CPU
  35Additionally, cpu topology information is provided under
  36/sys/devices/system/cpu and includes these files.  The internal
  37source for the output is in brackets ("[]").
  39    kernel_max: the maximum cpu index allowed by the kernel configuration.
  40                [NR_CPUS-1]
  42    offline:    cpus that are not online because they have been
  43                HOTPLUGGED off (see cpu-hotplug.txt) or exceed the limit
  44                of cpus allowed by the kernel configuration (kernel_max
  45                above). [~cpu_online_mask + cpus >= NR_CPUS]
  47    online:     cpus that are online and being scheduled [cpu_online_mask]
  49    possible:   cpus that have been allocated resources and can be
  50                brought online if they are present. [cpu_possible_mask]
  52    present:    cpus that have been identified as being present in the
  53                system. [cpu_present_mask]
  55The format for the above output is compatible with cpulist_parse()
  56[see <linux/cpumask.h>].  Some examples follow.
  58In this example, there are 64 cpus in the system but cpus 32-63 exceed
  59the kernel max which is limited to 0..31 by the NR_CPUS config option
  60being 32.  Note also that cpus 2 and 4-31 are not online but could be
  61brought online as they are both present and possible.
  63     kernel_max: 31
  64        offline: 2,4-31,32-63
  65         online: 0-1,3
  66       possible: 0-31
  67        present: 0-31
  69In this example, the NR_CPUS config option is 128, but the kernel was
  70started with possible_cpus=144.  There are 4 cpus in the system and cpu2
  71was manually taken offline (and is the only cpu that can be brought
  74     kernel_max: 127
  75        offline: 2,4-127,128-143
  76         online: 0-1,3
  77       possible: 0-127
  78        present: 0-3
  80See cpu-hotplug.txt for the possible_cpus=NUM kernel start parameter
  81as well as more information on the various cpumask's.
  82 kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.