Woran erkenne ich, ob mein Prozessor eine bestimmte Funktion hat? (64-Bit-Befehlssatz, hardwareunterstützte Virtualisierung, Kryptografiebeschleuniger usw.) Ich weiß, dass die Datei /proc/cpuinfo
diese Informationen in der flags
Zeile enthält, aber was bedeuten all diese kryptischen Abkürzungen?
/proc/cpuinfo
Besitze ich beispielsweise aus dem folgenden Auszug eine 64-Bit-CPU? Habe ich Hardware-Virtualisierung?
model name : Intel(R) Core(TM)2 Duo CPU E8400 @ 3.00GHz
…
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good aperfmperf pni dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm sse4_1 lahf_lm tpr_shadow vnmi flexpriority
$ egrep -wo ^flags|vmx|ept|vpid|npt|tpr_shadow|flexpriority|vnmi|lm|aes' /proc/cpuinfo --color | sort -u
. Und es gibt auch die CLI / GUI ausgezeichnete i-nex .cpufeatures.h
. Die Beschreibungen werden so bearbeitet, dass sie verständlicher und informativer sind, wenn jemand die Mühe gemacht hat, dies zu tun.features
dies nicht der Fall ist, werden sie in dieser Datei nicht angezeigt.ARM
Bei ARM-Prozessoren werden einige Funktionen in der
features:
Zeile erwähnt. Dort werden nur Features erwähnt, die in direktem Zusammenhang mit der ARM-Architektur stehen, keine spezifischen Features eines Siliziumherstellers oder System-on-Chip.Die Merkmale werden erhalten, indem die CPU-ID mit
read_cpuid()
und in den zur Kompilierungszeit bekannten Prozessortypdefinitionen nachgeschlagen wird, wobei die Merkmale als eine Maske vonHWCAP_xxx
Flags ausgedrückt werden. Die entsprechenden Zeichenfolgen befinden sich inhwcap_str
usw. insetup.c
.In der folgenden Liste führte ARMv6 SIMD-Anweisungen und -Datentypen ein. ARMv7 lieferte erweiterte SIMD-Anweisungen und -Datentypen.
neon
Signalisiert auf 32-Bit-ARM-Maschinen Advanced SIMD; whileasimd
signalisiert Advanced SIMD auf 64-Bit-Arm-Rechnern.swp
:SWP
Anweisung ( atomares Lesen, Ändern, Schreiben )half
: Laden und Speichern von Halbwörternthumb
: Thumb (16-Bit-Befehlssatz)26bit
: Modell "26 Bit" (Prozessorstatusregister in Programmzähler gefaltet)fastmult
: 32 × 32 → 64-Bit-Multiplikationfpa
: Gleitkommabeschleunigervfp
: VFP (frühe SIMD- Vektor-Gleitkomma-Anweisungen)edsp
: DSP-Erweiterungen (die 'e'-Variante der ARM9-CPUs und alle anderen oben genannten)java
: Jazelle (Java-Bytecode-Beschleuniger)iwmmxt
: SIMD- Anweisungen ähnlich wie bei Intel MMXcrunch
: MaverickCrunch Coprozessor (wenn Kernel-Unterstützung aktiviert ist)thumbee
: ThumbEEneon
: Advanced SIMD / NEON (asimd
auf älteren AArch64-Kerneln)vfpv3
: VFP Version 3vfpv3d16
: VFP Version 3 mit 16 D-Registerntls
: TLS- Registervfpv4
: VFP Version 4 mit schneller Kontextumschaltungidiva
:SDIV
undUDIV
Hardware-Aufteilung im ARM-Modusidivt
:SDIV
undUDIV
Hardware-Aufteilung im Thumb-Modusvfpd32
: VFP mit 32 D-Registernlpae
: Große physikalische Adresserweiterung (> 4 GB physischer Speicher auf 32-Bit-Architektur)evtstrm
: Kernel-Ereignis-Stream unter Verwendung eines generischen architektonischen Timersaes
: Hardware-beschleunigte AES (Secret-Key-Kryptographie)pmull{2}
: 64 × 64 → 128-Bit-F 2 m -Multiplikation - Beschleunigung für den GCM-Modus der authentifizierten Verschlüsselungsha1
: Hardware-beschleunigtes SHA-1sha2
: Hardware-beschleunigtes SHA-256crc32
: Hardware-beschleunigtes CRC-32Darüber hinaus gibt die
Hardware:
Zeile das Prozessormodell an. Je nach Modell befinden sich möglicherweise andere Informationen in anderen Dateien unter/proc
oder/sys
oder in Kernel-Protokollmeldungen zur Startzeit. Leider verfügt jeder ARM-CPU-Hersteller über eine eigene Methode zur Meldung von Prozessorfunktionen, sofern vorhanden.quelle
x86
Finden Sie es selbst in 4.1.3 x86 und im Intel-Handbuch
arch/x86/include/asm/cpufeature.h
enthält die vollständige Liste.Die definierten Werte sind vom Typ:
Z.B:
Die aus der CPUID extrahierten Features-Flags sind in folgenden Verzeichnissen gespeichert:
__u32 x86_capability[NCAPINTS + NBUGINTS];
Feldstruct cpuinfo_x86 boot_cpu_data
x86/kernel/setup.c
die durch
__init
Funktionen initialisiert wird .Woher jedes
x86_capability
Array-Element kommt:Anmerkungen:
index
: ist der Index vonx86_capability
zx86_capability[0]
eax
undexc
: sind die Eingabewerte für die CPUID in hex. Eingabenexc
, die weniger verwenden, nennen es das Unterblatt (eines Baums mit zwei Ebeneneax
an der Wurzel).output
: ist das Register, aus dem die CPUID-Ausgabe stammtfile
: ist die Datei, in der diese Felder definiert sind. Pfade sind relativ zuarch/x86/kernel/cpu/
.transmeta
: war der Name eines CPU-Anbieters https://en.wikipedia.org/wiki/Transmeta , der von Novafora https://www.crunchbase.com/organization/novafora erworben wurdecentaur
: war der Name eines CPU-Anbieters https://en.wikipedia.org/wiki/Centaur_Technology , der von VIA https://en.wikipedia.org/wiki/VIA_Technologies erworben wurde . Cyrix ist ein anderer.Schlussfolgerungen:
Die meisten Einträge stammen direkt aus den CPUID-Ausgangsregistern und werden
common.c
durch Folgendes festgelegt:Diese finden Sie im Intel-Handbuch für CPUID.
Die anderen sind über die gesamte Quelle verteilt und werden nach und nach mit eingestellt
set_cpu_cap
.Um sie zu finden, benutze es im
git grep X86_FEATURE_XXX
Innerenarch/x86
.Sie können normalerweise aus dem umgebenden Code ableiten, welchem CPUID-Bit sie entsprechen.
Andere lustige Fakten
Die Flaggen werden tatsächlich
arch/x86/kernel/cpu/proc.c
mit dem Code gedruckt :Wo:
cpu_has
führt die Hauptprüfung für die Funktion durch.x86_cap_flags[i]
enthält Zeichenfolgen, die den einzelnen Flags entsprechen.Dies wird als Rückruf an das
proc
System-Setup übergeben. Der Einstiegspunkt ist beifs/proc/cpuinfo.c
.x86_cap_flags
Zeichenketten werden erzeugt, indem man siearch/x86/kernel/cpu/mkcapflags.h
direkt ausarch/x86/include/asm/cpufeature.h
"parst" mitsed
...Die Ausgabe erfolgt
arch/x86/kernel/cpu/capflags.c
im Erstellungsverzeichnis und das resultierende Array sieht folgendermaßen aus:So
X86_FEATURE_FPU
entspricht zum Beispiel die Zeichenfolge"fpu"
und so weiter.cpu_has
unterteilt sich in zwei Fälle mit Code:Sie sind:
__builtin_constant_p(bit) && REQUIRED_MASK_BIT_SET(bit)
: Das Flag ist erforderlich, damit der Kernel ausgeführt werden kann.Dies wird durch Daten im Inneren bestimmt
required-features.h
, die kommentieren:Da diese zur Kompilierungszeit bekannt sind (Kernel-Anforderungen) und bereits beim Start geprüft wurden, kann die Prüfung zur Kompilierungszeit aufgelöst werden, wenn
bit
sie zur Kompilierungszeit bekannt ist.Somit ist das
__builtin_constant_p(bit)
was prüft obbit
eine Kompilierzeitkonstante ist.test_cpu_cap
: Dies verbrauchtCPUID
Daten aus demstruct cpuinfo_x86 boot_cpu_data
globalenquelle
cpuid
macht es auf eine bequemere Art und Weise. Ich habe diese Frage gestellt, um einen Ort zu finden, an dem die Namen dokumentiert sind.Oder alternativ können Sie das
cpuid
Programm verwenden, es muss sich im Debian-Repository befinden. Es gibt jede mögliche Information über Ihre CPU mit einigen Erklärungen aus, so dass Sie diese undurchsichtigen Flags nicht bekommen.quelle
cpuid
erweitert die Abkürzungen. Ich würde nicht wirklich seine Ausgabe nennen Erklärungen . Zu wissen, dassht
dies „Hyper-Threading“ bedeutet, erklärt dies bis zu einem gewissen Grad, aber zu wissen, dassmmx
dies „MMX-Befehlssatz“ bedeutet, nicht so sehr, und diesmca
bedeutet kaum „Machine-Check-Architektur“.