cpuid-dump should iterate through all CPUs#350
Open
dlenski wants to merge 4 commits intopytorch:mainfrom
Open
Conversation
Per https://en.wikipedia.org/wiki/CPUID#EAX=4000'0000h-4FFFF'FFFh:_Reserved_for_Hypervisors: > CPUID leaves 40000000h to 4FFFFFFFh are not implemented in hardware, and > are reserved for use by hypervisors to provide hypervisor-specific > identification and feature information through this interception > mechanism. > > For leaf 40000000h, the hypervisor is expected to return the index of the > highest supported hypervisor CPUID leaf in EAX, and a 12-character > hypervisor ID string in EBX,ECX,EDX (in that order). For leaf 40000001h, > the hypervisor may return an interface identification signature in EAX - > e.g. hypervisors that wish to advertise that they are Hyper-V compatible > may return 0x31237648—"Hv#1" in EAX. For example, running with user-mode QEMU: ``` $ qemu-x86_64 cpuid-dump … CPUID 40000000: 40000001-54474354-43544743-47435447 [TCGTCGTCGTCG] CPUID 40000001: 00000000-00000000-00000000-00000000 … ``` Running under a recent version of WSL2 (Microsoft Hyper-V): ``` $ cpuid-dump … CPUID 40000000: 4000000B-7263694D-666F736F-76482074 [Microsoft Hv] CPUID 40000001: 31237648-00000000-00000000-00000000 [Hv#1] … CPUID 4000000B: 00000000-00000000-00000000-00000000 ```
Per Intel's April 2023 documentation (https://cdrdv2-public.intel.com/775917/intel-64-architecture-processor-topology-enumeration.pdf): > The extended topology enumeration leaf of CPUID (leaf 0BH) was introduced > in 2009 along with the x2APIC IDs. This leaf has been superseded by the > v2 extended topology enumeration leaf (CPUID leaf 1FH), which is the > preferred interface for system topology enumeration for current Intel 64 > processors
As Intel puts it: "CPUID, by design, returns different values depending on the core it is executed on" (see https://www.intel.com/content/www/us/en/developer/articles/guide/12th-gen-intel-core-processor-gamedev-guide.html#inpage-nav-1-5-2:~:text=CPUID%2C%20by%20design%2C%20returns%20different%20values%20depending%20on%20the%20core%20it%20is%20executed%20on) In particular, leaves 1, 4, 0x0b, 0x1a, and 0x1f are known to vary by core. Leaf 0x1a differentiates core types on hybrid CPUs. In order to aid in exploration of CPUID contents, `cpuid-dump` should dump CPUID results from *all* CPUs, rather than just one. This is currently implemented for Linux only, using the `sched_setaffinity(2)` system call.
Contributor
Author
|
The results can be easily deduplicated by piping through |
This topology enumeration process is very complex (https://web.archive.org/web/20160306203252/https://software.intel.com/en-us/articles/intel-64-architecture-processor-topology-enumeration) and easy to get wrong. We have to rely on the operating system to allow us to switch CPUs, so we may as well rely on it to *count* CPUs as well.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
(This PR also includes #349, but I can factor that out if preferred.)
As Intel puts it: "CPUID, by design, returns different values depending on the core it is executed on" (see https://www.intel.com/content/www/us/en/developer/articles/guide/12th-gen-intel-core-processor-gamedev-guide.html#inpage-nav-1-5-2:~:text=CPUID%2C%20by%20design%2C%20returns%20different%20values%20depending%20on%20the%20core%20it%20is%20executed%20on)
In particular, leaves 1, 4, 0x0b, 0x1a, and 0x1f are known to vary by core. Leaf 0x1a differentiates core types on hybrid CPUs
In order to aid in exploration of CPUID contents,
cpuid-dumpshould dump CPUID results from all CPUs, rather than just one. This is currently implemented for Linux only, using thesched_setaffinity(2)system call.