HomeFreeBSD

new x86 smp topology detection code

Description

new x86 smp topology detection code

Previously, the code determined a topology of processing units
(hardware threads, cores, packages) and then deduced a cache topology
using certain assumptions. The new code builds a topology that
includes both processing units and caches using the information
provided by the hardware.

At the moment, the discovered full topology is used only to creeate
a scheduling topology for SCHED_ULE.
There is no KPI for other kernel uses.

Summary:

  • based on APIC ID derivation rules for Intel and AMD CPUs
  • can handle non-uniform topologies
  • requires homogeneous APIC ID assignment (same bit widths for ID components)
  • topology for dual-node AMD CPUs may not be optimal
  • topology for latest AMD CPU models may not be optimal as the code is several years old
  • supports only thread/package/core/cache nodes

Todo:

  • AMD dual-node processors
  • latest AMD processors
  • NUMA nodes
  • checking for homogeneity of the APIC ID assignment across packages
  • more flexible cache placement within topology
  • expose topology to userland, e.g., via sysctl nodes

Long term todo:

  • KPI for CPU sharing and affinity with respect to various resources (e.g., two logical processors may share the same FPU, etc)

Reviewed by: mav
Tested by: mav
MFC after: 1 month
Differential Revision: https://reviews.freebsd.org/D2728

Details

Provenance
avgAuthored on
Reviewer
mav
Differential Revision
D2728: new x86 smp topology detection code
Parents
rS297557: SJIS encoding don't have single byte characters >= 224
Branches
Unknown
Tags
Unknown