Was bedeuten die Flags in / proc / cpuinfo?

212

Woran erkenne ich, ob mein Prozessor eine bestimmte Funktion hat? (64-Bit-Befehlssatz, hardwareunterstützte Virtualisierung, Kryptografiebeschleuniger usw.) Ich weiß, dass die Datei /proc/cpuinfodiese Informationen in der flagsZeile enthält, aber was bedeuten all diese kryptischen Abkürzungen?

/proc/cpuinfoBesitze 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
Gilles
quelle

Antworten:

275

x86

(32-Bit, auch bekannt als i386-i686 und 64-Bit, auch bekannt als amd64)

FAQ: Habe ich ...

  • 64-Bit (x86_64 / AMD64 / Intel64)? lm
  • Hardware-Virtualisierung (VMX / AMD-V)? vmx(Intel), svm(AMD)
  • Beschleunigtes AES (AES-NI)? aes
  • TXT (TPM)? smx
  • ein Hypervisor (als solcher angekündigt)? hypervisor

Die meisten anderen Funktionen sind nur für Compiler- oder Kernelautoren von Interesse.

Alle Fahnen

Die vollständige Liste befindet sich in der Kernelquelle in der Datei arch/x86/include/asm/cpufeatures.h.

Von Intel definierte CPU-Funktionen, CPUID-Ebene 0x00000001 (edx)

Siehe auch Wikipedia und Tabelle 2-27 in der Intel Advanced Vector Extensions-Programmierreferenz

AMD-definierte CPU-Funktionen, CPUID-Ebene 0x80000001

Siehe auch Wikipedia und Tabelle 2-23 in der Intel Advanced Vector Extensions-Programmierreferenz

Transmeta-definierte CPU-Funktionen, CPUID-Ebene 0x80860001

  • recovery: CPU im Wiederherstellungsmodus
  • longrun: Langzeit-Leistungsregelung
  • lrti: LongRun-Tabellenschnittstelle

Andere Funktionen, Linux-definierte Zuordnung

  • cxmmx: Cyrix MMX-Erweiterungen
  • k6_mtrr: AMD K6 nichtstandardisierte MTRRs
  • cyrix_arr: Cyrix ARRs (= MTRRs)
  • centaur_mcr: Centaur MCRs (= MTRRs)
  • constant_tsc: TSC tickt mit konstanter Geschwindigkeit
  • up: SMP-Kernel läuft auf UP
  • art: Immer laufender Timer
  • arch_perfmon: Intel Architectural PerfMon
  • pebs: Ereignisgenaues Sampling
  • bts: Filial-Trace-Speicher
  • rep_good: rep Mikrocode funktioniert gut
  • acc_power: AMD-Akkumulator
  • nopl: Die NOPL-Anweisungen (0F 1F)
  • xtopology: Erweiterungen der CPU-Topologie-Aufzählung
  • tsc_reliable: TSC ist als zuverlässig bekannt
  • nonstop_tsc: TSC hört in C-Zuständen nicht auf
  • cpuid: Die CPU hat selbst eine CPUID-Anweisung
  • extd_apicid: hat APICID erweitert (8 Bit)
  • amd_dcm: Multi-Node-Prozessor
  • aperfmperf: APERFMPERF
  • eagerfpu: Nicht faule FPU-Wiederherstellung
  • nonstop_tsc_s3: TSC stoppt nicht im S3-Status
  • tsc_known_freq: TSC hat bekannte Frequenz
  • mce_recovery: CPU hat wiederherstellbare Maschinenüberprüfungen

Intel-definierte CPU-Funktionen, CPUID-Ebene 0x00000001 (ecx)

Siehe auch Wikipedia und Tabelle 2-26 in der Intel Advanced Vector Extensions-Programmierreferenz

VIA / Cyrix / Centaur-definierte CPU-Funktionen, CPUID-Ebene 0xC0000001

  • rng: Zufallszahlengenerator vorhanden (xstore)
  • rng_en: Zufallszahlengenerator aktiviert
  • ace: CPU-Krypto (xcrypt)
  • ace_en: On-CPU-Krypto aktiviert
  • ace2: Erweiterte Kryptografie-Engine v2
  • ace2_en: ACE v2 aktiviert
  • phe: PadLock Hash Engine
  • phe_en: PHE aktiviert
  • pmm: Vorhängeschloss-Montgomery-Multiplikator
  • pmm_en: PMM aktiviert

Weitere erweiterte AMD-Flags: CPUID-Ebene 0x80000001, ecx

  • lahf_lm: Laden Sie AH von Flags (LAHF) und speichern Sie AH in Flags (SAHF) im Langmodus
  • cmp_legacy: Wenn ja, ist HyperThreading nicht gültig
  • svm: "Sichere virtuelle Maschine": AMD-V
  • extapic: Erweiterter APIC-Speicherplatz
  • cr8_legacy: CR8 im 32-Bit-Modus
  • abm: Erweiterte Bit-Manipulation
  • sse4a: SSE-4A
  • misalignsse: Gibt an, ob eine allgemeine Schutzausnahme (General Protection Exception, #GP) generiert wird, wenn einige ältere SSE-Befehle mit nicht ausgerichteten Daten ausgeführt werden. Hängt auch von CR0 und dem Alignment Checking-Bit ab
  • 3dnowprefetch: 3DNow Prefetch-Anweisungen
  • osvw: Gibt die sichtbare Problemumgehung für das Betriebssystem an, mit der das Betriebssystem Prozessorfehler umgehen kann.
  • ibs: Instruction Based Sampling
  • xop: Erweiterte AVX-Anweisungen
  • skinit: SKINIT / STGI Anweisungen
  • wdt: Watchdog-Timer
  • lwp: Leichte Profilierung
  • fma4: 4 Operanden MAC-Anweisungen
  • tce: Übersetzungs-Cache-Erweiterung
  • nodeid_msr: NodeId MSR
  • tbm: Trailing Bit Manipulation
  • topoext: Topologieerweiterungen CPUID leafs
  • perfctr_core: Core Performance Counter-Erweiterungen
  • perfctr_nb: NB Leistungsindikatorerweiterungen
  • bpext: Data Breakpoint Extension
  • ptsc: Leistungszeitzähler
  • perfctr_l2: L2-Leistungsindikatorerweiterungen
  • mwaitx: MWAITextension ( MONITORX/ MWAITX)

Hilfskennzeichen: Linux definiert - Für Funktionen, die auf verschiedenen CPUID-Ebenen verteilt sind

  • ring3mwait: Ring 3 MONITOR / MWAIT
  • cpuid_fault: Intel CPUID fehlerhaft
  • cpb: AMD Core-Leistungssteigerung
  • epb: IA32_ENERGY_PERF_BIAS-Unterstützung
  • cat_l3: Cache-Zuweisungstechnologie L3
  • cat_l2: Cache-Zuweisungstechnologie L2
  • cdp_l3: Code- und Datenpriorisierung L3
  • invpcid_single: effektiv invpcidundCR4.PCIDE=1
  • hw_pstate: AMD HW-PState
  • proc_feedback: AMD ProcFeedbackInterface
  • sme: AMD Secure Memory Encryption
  • pti: Kernel Page Table Isolation (Kaiser)
  • retpoline: Retpoline Mitigation für Spectre Variante 2 (indirekte Verzweigungen)
  • retpoline_amd: AMD Retpoline Minderung
  • intel_ppin: Intel-Prozessor-Inventarnummer
  • avx512_4vnniw: AVX-512 Neural Network Instructions
  • avx512_4fmaps: AVX-512 Multiply Accumulation Einzelgenauigkeit
  • mba: Zuweisung der Speicherbandbreite
  • rsb_ctxsw: RSB bei Kontextwechseln füllen

Virtualisierungsflags: Linux definiert

  • tpr_shadow: Intel TPR Shadow
  • vnmi: Intel Virtual NMI
  • flexpriority: Intel FlexPriority
  • ept: Intel Extended Page Table
  • vpid: Intel Virtual Processor ID
  • vmmcall: Lieber VMMCALLzuVMCALL

Intel-definierte CPU-Funktionen, CPUID-Ebene 0x00000007: 0 (ebx)

Erweiterte Statusfunktionen, CPUID-Ebene 0x0000000d: 1 (eax)

  • xsaveopt: Optimiert XSAVE
  • xsavec: XSAVEC
  • xgetbv1: XGETBVmit ECX = 1
  • xsaves: XSAVES/XRSTORS

Intel-definiertes CPU-QoS-Unterblatt, CPUID-Ebene 0x0000000F: 0 (edx)

  • cqm_llc: LLC QoS

Intel-definiertes CPU-QoS-Unterblatt, CPUID-Ebene 0x0000000F: 1 (edx)

  • cqm_occup_llc: LLC Belegungsüberwachung
  • cqm_mbm_total: LLC Gesamt MBM Überwachung
  • cqm_mbm_local: LLC lokale MBM-Überwachung

AMD-definierte CPU-Funktionen, CPUID-Ebene 0x80000008 (ebx)

  • clzero: CLZEROAnweisung
  • irperf: Anweisungen im Ruhestand Leistungsindikator
  • xsaveerptr: FP-Fehlerzeiger immer speichern / wiederherstellen

Blatt "Thermal and Power Management", CPUID-Ebene 0x00000006 (eax)

  • dtherm(früher dts): digitaler thermischer Sensor
  • ida: Intel Dynamic Acceleration
  • arat: APIC Timer wird immer ausgeführt
  • pln: Intel Power Limit Benachrichtigung
  • pts: Intel Package Thermal Status
  • hwp: Intel Hardware P-States
  • hwp_notify: HWP-Benachrichtigung
  • hwp_act_window: HWP-Aktivitätsfenster
  • hwp_epp: HWP Energy Performance Preference
  • hwp_pkg_req: Anforderung auf HWP-Paketebene

AMD SVM-Funktionsidentifikation, CPUID-Ebene 0x8000000a (edx)

  • npt: AMD Nested Page Table-Unterstützung
  • lbrv: Unterstützung für AMD LBR-Virtualisierung
  • svm_lock: AMD SVM sperrt MSR
  • nrip_save: AMD SVM next_rip speichern
  • tsc_scale: Unterstützung für AMD TSC-Skalierung
  • vmcb_clean: Unterstützung für AMD VMCB Clean Bits
  • flushbyasid: Unterstützung für AMD-Flush-by-ASID
  • decodeassists: Unterstützung für AMD Decode Assists
  • pausefilter: AMD-gefilterter Pausenabschnitt
  • pfthreshold: AMD-Pausenfilterschwelle
  • avic: Virtueller Interrupt-Controller
  • vmsave_vmload: Virtuelles VMSAVE VMLOAD
  • vgif: Virtuelles GIF

Von Intel definierte CPU-Funktionen, CPUID-Ebene 0x00000007: 0 (ecx)

  • avx512vbmi: AVX512 Vector Bit Manipulationsanweisungen
  • umip: Benutzermodus-Anweisungsschutz
  • pku: Schutzschlüssel für Userspace
  • ospke: OS-Schutzschlüssel aktivieren
  • avx512_vbmi2: Zusätzliche Anweisungen zur Bearbeitung von AVX512-Vektorbits
  • gfni: Galois Field Neue Anweisungen
  • vaes: Vektor AES
  • vpclmulqdq: Carry-Less Multiplication Double Quadword
  • avx512_vnni: Vector Neuronales Netzwerk Anweisungen
  • avx512_bitalg: Anweisungen VPOPCNT [B, W] und VPSHUF-BITQMB
  • avx512_vpopcntdq: POPCNT für Vektoren von DW / QW
  • la57: 5-Ebenen-Seitentabellen
  • rdpid: RDPID-Anweisung

AMD-definierte CPU-Funktionen, CPUID-Ebene 0x80000007 (ebx)

  • overflow_recov: Unterstützung für MCA-Überlaufwiederherstellung
  • succor: Eindämmung und Behebung nicht korrigierbarer Fehler
  • smca: Skalierbarer MCA

Erkannte CPU-Fehler (von Linux definiert)

  • f00f: Intel F00F
  • fdiv: CPU FDIV
  • coma: Cyrix 6x86 Koma
  • amd_tlb_mmatch: tlb_mmatchAMD Erratum 383
  • amd_apic_c1e: apic_c1eAMD Erratum 400
  • 11ap: Schlechter lokaler APIC aka 11AP
  • fxsave_leak: FXSAVE leckt FOP / FIP / FOP
  • clflush_monitor: AAI65, CLFLUSH vor MONITOR erforderlich
  • sysret_ss_attrs: SYSRET repariert keine SS-Attrs
  • espfix: "" Durch IRET auf 16-Bit-SS werden hohe ESP / RSP-Bits beschädigt
  • null_seg: Wenn Sie einen Selektor auf Null setzen, bleibt die Basis erhalten
  • swapgs_fence: SWAPGS ohne Eingabe abhängig von GS
  • monitor: IPI zum Aufwecken der Remote-CPU erforderlich
  • amd_e400: CPU gehört zu den von Erratum 400 betroffenen
  • cpu_meltdown: Die CPU ist von einem Meltdown-Angriff betroffen und muss von der Kernel-Seitentabelle isoliert werden
  • spectre_v1: Die CPU ist von einem Spectre- Variante-1-Angriff mit bedingten Verzweigungen betroffen
  • spectre_v2: Die CPU ist von einem Spectre- Variante-2-Angriff mit indirekten Verzweigungen betroffen
  • spec_store_bypass: Die CPU ist von der Sicherheitsanfälligkeit in Speculative Store Bypass (Spectre-Variante 4) betroffen .

PS Diese Auflistung wurde von arch/x86/include/asm/cpufeatures.hder Kernelquelle abgeleitet . Die Flags werden in derselben Reihenfolge wie der Quellcode aufgelistet. Bitte helfen Sie, indem Sie Links zu Beschreibungen fehlender Features hinzufügen, eine kurze Beschreibung von Features mit nicht aussagekräftigen Namen verfassen und die Liste für neue Kernelversionen aktualisieren. Die aktuelle Liste stammt aus Linux 4.15 und enthält einige spätere Ergänzungen.

Gilles
quelle
1
Vielen Dank an @Gilles und die Redaktion für eine informative Frage und ihre zusammengefasste und detaillierte Antwort. Nun, zu überprüfen , was CPU - Funktionen, verwende ich die von NixCraft im Anschluss, zB für Intel - CPUs: $ 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 .
Tuk0z
Hervorragende Sammlung von Erklärungen und Links; Vielen Dank an alle, die dazu beigetragen haben.
Paul Gear
Woher kommen die Fehlerdaten? Es scheint nicht in der Datei cpufeatures.h aufgeführt zu sein.
Drazisil
@Drazisil Soweit ich mich erinnere, stammen alle Einträge aus der angegebenen Version von cpufeatures.h. Die Beschreibungen werden so bearbeitet, dass sie verständlicher und informativer sind, wenn jemand die Mühe gemacht hat, dies zu tun.
Gilles
@ Gilles Das scheint bei allen außer den Bugs der Fall zu sein. Abgesehen davon, dass featuresdies nicht der Fall ist, werden sie in dieser Datei nicht angezeigt.
Drazisil
71

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 von HWCAP_xxxFlags ausgedrückt werden. Die entsprechenden Zeichenfolgen befinden sich in hwcap_strusw. insetup.c .

In der folgenden Liste führte ARMv6 SIMD-Anweisungen und -Datentypen ein. ARMv7 lieferte erweiterte SIMD-Anweisungen und -Datentypen. neonSignalisiert auf 32-Bit-ARM-Maschinen Advanced SIMD; while asimdsignalisiert Advanced SIMD auf 64-Bit-Arm-Rechnern.

Darüber hinaus gibt die Hardware:Zeile das Prozessormodell an. Je nach Modell befinden sich möglicherweise andere Informationen in anderen Dateien unter /procoder /sysoder in Kernel-Protokollmeldungen zur Startzeit. Leider verfügt jeder ARM-CPU-Hersteller über eine eigene Methode zur Meldung von Prozessorfunktionen, sofern vorhanden.

Gilles
quelle
11

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:

X*32 + Y

Z.B:

#define X86_FEATURE_FPU     ( 0*32+ 0) /* Onboard FPU */

Die aus der CPUID extrahierten Features-Flags sind in folgenden Verzeichnissen gespeichert:

  • __u32 x86_capability[NCAPINTS + NBUGINTS]; Feld
  • von struct cpuinfo_x86 boot_cpu_data
  • definiert bei x86/kernel/setup.c

die durch __initFunktionen initialisiert wird .

Woher jedes x86_capabilityArray-Element kommt:

| index | eax      | ecx | output | file        |
|-------|----------|-----|--------|-------------|
|     0 |        1 |   0 | edx    | common.c    |
|     1 | 80000001 |     | edx    | common.c    |
|     2 | 80860001 |     | edx    | transmeta.c |
|     3 |          |     |        |             |
|     4 |        1 |   0 | ecx    | common.c    |
|     5 | C0000001 |     | edx    | centaur.c   |
|     6 | 80000001 |     | ecx    | common.c    |
|     7 |          |     |        | scattered.c |
|     8 |          |     |        |             |
|     9 |        7 |   0 | ebx    | common.c    |
|    10 |        D |   1 | eax    | common.c    |
|    11 |        F |   0 | edx    | common.c    |
|    12 |        F |   1 | edx    | common.c    |

Anmerkungen:

Schlussfolgerungen:

  • Die meisten Einträge stammen direkt aus den CPUID-Ausgangsregistern und werden common.cdurch Folgendes festgelegt:

    c->x86_capability[0] = edx;
    

    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_XXXInneren arch/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.cmit dem Code gedruckt :

    seq_puts(m, "flags\t\t:");
    for (i = 0; i < 32*NCAPINTS; i++)
        if (cpu_has(c, i) && x86_cap_flags[i] != NULL)
            seq_printf(m, " %s", x86_cap_flags[i]);
    

    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 procSystem-Setup übergeben. Der Einstiegspunkt ist bei fs/proc/cpuinfo.c.

  • x86_cap_flagsZeichenketten werden erzeugt, indem man sie arch/x86/kernel/cpu/mkcapflags.hdirekt aus arch/x86/include/asm/cpufeature.h"parst" mit sed...

    Die Ausgabe erfolgt arch/x86/kernel/cpu/capflags.cim Erstellungsverzeichnis und das resultierende Array sieht folgendermaßen aus:

    const char * const x86_cap_flags[NCAPINTS*32] = {
        [X86_FEATURE_FPU]        = "fpu",
        [X86_FEATURE_VME]        = "vme",
    

    So X86_FEATURE_FPUentspricht zum Beispiel die Zeichenfolge "fpu"und so weiter.

  • cpu_has unterteilt sich in zwei Fälle mit Code:

    #define cpu_has(c, bit)                         \
        (__builtin_constant_p(bit) && REQUIRED_MASK_BIT_SET(bit) ? 1 :  \
        test_cpu_cap(c, bit))
    

    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:

      Define minimum CPUID feature set for kernel These bits are checked
      really early to actually display a visible error message before the
      kernel dies.  Make sure to assign features to the proper mask!
      

      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 bitsie zur Kompilierungszeit bekannt ist.

      Somit ist das __builtin_constant_p(bit)was prüft ob biteine Kompilierzeitkonstante ist.

    • test_cpu_cap: Dies verbraucht CPUIDDaten aus dem struct cpuinfo_x86 boot_cpu_dataglobalen

Ciro Santilli ist ein Schauspieler
quelle
3
Sie haben erklärt, wie man von der Abkürzung zu einem längeren Namen wechselt, aber oft ist dieser längere Name nicht viel verständlicher und cpuidmacht es auf eine bequemere Art und Weise. Ich habe diese Frage gestellt, um einen Ort zu finden, an dem die Namen dokumentiert sind.
Gilles
@ Gilles das ist vor allem für diejenigen, die die Tabellen machen wollen / ihre Funktion in der Tabelle nicht finden können, wie ich :-) Aber in den meisten Fällen ist die Zuordnung zu CPUID trotzdem, wenn Sie sich den richtigen Punkt der Quelle ansehen sofortig.
Ciro Santilli
10

Oder alternativ können Sie das cpuidProgramm 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.

Hurufu
quelle
cpuiderweitert die Abkürzungen. Ich würde nicht wirklich seine Ausgabe nennen Erklärungen . Zu wissen, dass htdies „Hyper-Threading“ bedeutet, erklärt dies bis zu einem gewissen Grad, aber zu wissen, dass mmxdies „MMX-Befehlssatz“ bedeutet, nicht so sehr, und dies mcabedeutet kaum „Machine-Check-Architektur“.
Gilles
6
@ Gilles ... und doch, "Machine Check Architecture" ist sicherlich besser Google-Abfrage als "MCA";)
Alois Mahdal