The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/Documentation/cputopology.txt

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

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

Cache object: da8bed1ac62087f5c0e7cb6ddd91574f


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.