如何通过 sysfs 导出 CPU 拓扑信息¶
CPU 拓扑信息通过 sysfs 导出。 项目(属性)类似于某些架构的 /proc/cpuinfo 输出。 它们位于 /sys/devices/system/cpu/cpuX/topology/ 中。 请参考 ABI 文件: ABI file stable/sysfs-devices-system-cpu。
架构中立的 drivers/base/topology.c 导出这些属性。 但是,只有在架构提供如下所述的相关宏时,才会创建与 die、cluster、book 和 drawer 层次结构相关的 sysfs 文件。
为了让架构支持此功能,它必须在 include/asm-XXX/topology.h 中定义一些这些宏
#define topology_physical_package_id(cpu)
#define topology_die_id(cpu)
#define topology_cluster_id(cpu)
#define topology_core_id(cpu)
#define topology_book_id(cpu)
#define topology_drawer_id(cpu)
#define topology_sibling_cpumask(cpu)
#define topology_core_cpumask(cpu)
#define topology_cluster_cpumask(cpu)
#define topology_die_cpumask(cpu)
#define topology_book_cpumask(cpu)
#define topology_drawer_cpumask(cpu)
**_id macros
的类型是 int。 **_cpumask macros
的类型是 (const) struct cpumask *
。 后者与适当的 **_siblings
sysfs 属性相对应(topology_sibling_cpumask() 除外,它与 thread_siblings 相对应)。
为了在所有架构上保持一致,include/linux/topology.h 为 include/asm-XXX/topology.h 未定义的任何上述宏提供默认定义
topology_physical_package_id: -1
topology_die_id: -1
topology_cluster_id: -1
topology_core_id: 0
topology_book_id: -1
topology_drawer_id: -1
topology_sibling_cpumask: 仅给定的 CPU
topology_core_cpumask: 仅给定的 CPU
topology_cluster_cpumask: 仅给定的 CPU
topology_die_cpumask: 仅给定的 CPU
topology_book_cpumask: 仅给定的 CPU
topology_drawer_cpumask: 仅给定的 CPU
此外,CPU 拓扑信息在 /sys/devices/system/cpu 下提供,包括以下文件。 输出的内部源位于括号中(“[]”)。
kernel_max
内核配置允许的最大 CPU 索引。 [NR_CPUS-1]
offline
未在线的 CPU,因为它们已热插拔关闭或超出内核配置允许的 CPU 限制(上面的 kernel_max)。 [~cpu_online_mask + cpus >= NR_CPUS]
online
已在线并正在调度的 CPU [cpu_online_mask]
possible
已分配资源并且如果存在则可以上线的 CPU。 [cpu_possible_mask]
present
已识别为存在于系统中的 CPU。 [cpu_present_mask]
上述输出的格式与 cpulist_parse() 兼容 [参见 <linux/cpumask.h>]。 以下是一些示例。
在此示例中,系统中有 64 个 CPU,但 CPU 32-63 超过了内核最大值,该最大值受 NR_CPUS 配置选项为 32 限制为 0..31。 另请注意,CPU 2 和 4-31 未在线,但可以上线,因为它们既存在又有可能
kernel_max: 31
offline: 2,4-31,32-63
online: 0-1,3
possible: 0-31
present: 0-31
在此示例中,NR_CPUS 配置选项为 128,但内核以 possible_cpus=144 启动。 系统中有 4 个 CPU,cpu2 已手动脱机(并且是可以上线的唯一 CPU。)
kernel_max: 127
offline: 2,4-127,128-143
online: 0-1,3
possible: 0-127
present: 0-3
有关 possible_cpus=NUM 内核启动参数以及有关各种 cpumask 的更多信息,请参见 内核中的 CPU 热插拔。