linux 内核如何知道特定硬件平台上存在多少 threads/cpu

How does the linux kernel know how many threads/cpu exists on a particular HW platform

我有一个简单的问题。 Linux 内核如何知道一个平台有多少线程,以及 VM 如何将其抽象为 vCPU?我想修改一些内核代码来显示之后有N个线程。

在 x86 系统中,超线程数由 BIOS 在 ACPI tables 中报告。特别是在 APIC table 中。每个超线程有一个本地 APIC,APIC table 列出了每个本地 APIC 的 APIC ID。内核使用 APIC table 中的 APIC ID 向每个线程发送消息以将其唤醒。内核不探测硬件本身。

在虚拟平台中,ACPItable由VMM构建,APICtable报告为VM配置的VCPU数量。