CPUID
Als CPUID wird häufig die eigentliche Processor Signature, die einen Prozessortyp identifiziert, bezeichnet. Der CPUID Opcode selbst ist eine "Processor supplementary capability'" (Prozessorergänzungsanweisung) für die x86-Architektur, die es Software ermöglicht, Details des Prozessors zu erkennen. Durch die Verwendung des CPUID Opcodes kann die Software den Prozessortyp (Processor Signature) und das Vorhandensein von Funktionen (wie MMX/SSE) bestimmen. Für Anwender und Administratoren ist vor allem die auch als CPUID oder Processor Signature bezeichnete Prozessorkennung relevant wenn es darum geht die aktuellste Microcode Version für die verwendete CPU zu finden.
CPUID Opcode
Der CPUID Opcode ist 0Fh, A2h (als zwei Bytes oder A20Fh als ein einzelnes Wort). Der Wert im EAX-Register, und in einigen Fällen das ECX-Register, gibt an, welche Informationen zurückgegeben werden sollen. Einige Beispiele dazu:
- EAX-Register = 0x00 -> CPUID Kommando gibt Vendor ID in EBX/ECD/EDX Register zurück
- EAX-Register = 0x01 -> CPUID Kommando gibt Processor Signature im EAX-Register zurück
Vendor ID
Zur Identifikation eines Prozessortyps ist neben der unten folgenden Processor Signature auch die Vendor ID erforderlich. Die Vendor IDs lauten beispielsweise:[1]
- "AuthenticAMD" (AMD)
- "GenuineIntel" (Intel)
In virtuellen Maschinen mit virtualisierter Hardware sind folgende Vendor IDs verbreitet:
- "KVMKVMKVM" (KVM)
- "Microsoft Hv" (Microsoft Hyper-V)
- "VMwareVMware" (VMware)
- "XenVMMXenVMM" (Xen HVM)
Processor Signature
Die Processor Signature enthält folgende Informationen:
- Type (0)
- Extended Family, Family
- Extended Model, Model
- Stepping
Die Informationen sind dabei folgendermaßen im EAX Register codiert:[2]
Bit | 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
EAX Bezeichnungen Intel | (reserved) | Extended Family | Ext. Model | (res.) | Type | Family | Model | Stepping | ||||||||||||||||||||||||
EAX Bezeichnungen AMD | (reserved) | ExtFamily | ExtModel | (reserved) | BaseFamily | BaseModel | Stepping | |||||||||||||||||||||||||
Beispiel Intel Xeon E3-1220 v6 | 0 | 0 | 0 | 9 | 0 | 6 | e | 9 | ||||||||||||||||||||||||
Beispiel AMD EPYC 7251 8-Core | 0 | 0 | 8 | 0 | 0 | f | 1 | 2 |
Zur Anzeige von Family / Model / Stepping für Benutzer (z.B. /proc/cpuinfo unter Linux) werden die Informationen folgendermaßen zusammengesetzt:
/proc/cpuinfo Ausgabe
(Dezimal nicht Hex) | |||
---|---|---|---|
Family | Model | Stepping | |
Regelformulierung Intel[2] | IF Family_ID ≠ 0FH
THEN DisplayFamily = Family_ID; ELSE DisplayFamily = Extended_Family_ID + Family_ID; |
IF (Family_ID = 06H or Family_ID = 0FH)
THEN DisplayModel = (Extended_Model_ID « 4) + Model_ID; ELSE DisplayModel = Model_ID; |
|
Beispiel Intel Xeon E3-1220 v6 | Ext. Family = 00h
Family = 06h Display Family = 06h = 6 (dezimal) Anzeige Family (dezimal): 6 |
Ext. Model = 09h
Model = 0eh Display Model = 9eh (hex) = 158 (dezimal) Anzeige Model (dezimal): 158 |
9 |
Regelformulierung AMD[3] | Family[7:0]=({0000b,BaseFamily[3:0]}+ExtendedFamily[7:0]) | Model[7:0]={ExtendedModel[3:0],BaseModel[3:0]} | |
Beispiel AMD EPYC 7251 8-Core | ExtFamily = 08h = 8 (dezimal)
BaseFamily = 0fh = 15 (dezimal) Family = 8 + 15 = 23 (dezimal) Anzeige Family (dezimal): 23 |
ExtModel = 00h
BaseModel = 01h (hex) Model = 01h (hex) = 1 (dezimal) Anzeige Model (dezimal): 1 |
2 |
Abfragen der Prozessor Signature
Microcode Updates beziehen sich immer auf einen bestimmten Prozessortyp (Prozessor Signature). Die Prozessor Signature können Sie auf folgende Art unter den jeweiligen Betriebssystemen auslesen:
- Linux: Berechnung aus Family/Model/Stepping (siehe dazu Intel Microcode unter Linux aktualisieren), oder x86info -a
- Windows: Berechnung aus Family/Model/Stepping (siehe dazu Intel Microcode unter Windows aktualisieren)
- VMware: vsish -e cat /hardware/cpu/cpuList/0 (siehe Intel Microcode unter VMware aktualisieren#Aktuelle Microcode Version auslesen)
- FreeBSD: x86info -a (siehe FreeBSD Hardwareinformationen abfragen#x86info)
Einzelnachweise
- ↑ CPUID (en.wikipedia.org)
- ↑ 2,0 2,1 Intel 64 and IA-32 Architectures Developer's Manual: Vol. 2A (www.intel.com) Seiten 3-190, 3-204, 3-205 (292, 306, 307 in PDF)
- ↑ Processor Programming Reference (PPR) for AMD Family 17h Model 01h, Revision B1 Processors Chapter 2.1.11.1 CPUID Instruction Function, Page 56
Weitere Informationen
- x86 architecture CPUID (www.sandpile.org)
- https://linux.die.net/man/1/cpuid
- Intel Architecture and Processor Identification With CPUID Model and Family Numbers (software.intel.com, 15.06.2012)
- Developer Guides, Manuals & ISA Documents (developer.amd.com)
- x86 Families and Models List (a4lg.com)
Autor: Werner Fischer Werner Fischer arbeitet im Product Management Team von Thomas-Krenn. Er evaluiert dabei neueste Technologien und teilt sein Wissen in Fachartikeln, bei Konferenzen und im Thomas-Krenn Wiki. Bereits 2005 - ein Jahr nach seinem Abschluss des Studiums zu Computer- und Mediensicherheit an der FH Hagenberg - heuerte er beim bayerischen Server-Hersteller an. Als Öffi-Fan nutzt er gerne Bus & Bahn und genießt seinen morgendlichen Spaziergang ins Büro.
|