如何透過 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 未定義的任何上述宏提供預設定義

  1. topology_physical_package_id: -1

  2. topology_die_id: -1

  3. topology_cluster_id: -1

  4. topology_core_id: 0

  5. topology_book_id: -1

  6. topology_drawer_id: -1

  7. topology_sibling_cpumask: 僅給定的 CPU

  8. topology_core_cpumask: 僅給定的 CPU

  9. topology_cluster_cpumask: 僅給定的 CPU

  10. topology_die_cpumask: 僅給定的 CPU

  11. topology_book_cpumask: 僅給定的 CPU

  12. 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 熱插拔