Co oznaczają flagi w / proc / cpuinfo?


212

Jak mogę sprawdzić, czy mój procesor ma określoną funkcję? (64-bitowy zestaw instrukcji, wirtualizacja wspomagana sprzętowo, akceleratory kryptograficzne itp.) Wiem, że plik /proc/cpuinfozawiera te informacje w flagslinii, ale co oznaczają te wszystkie tajemnicze skróty?

Na przykład, biorąc pod uwagę następujący fragment /proc/cpuinfo, czy mam 64-bitowy procesor? Czy mam wirtualizację sprzętu?

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

Odpowiedzi:


275

x86

(32-bitowy lub i386 – i686 i 64-bitowy lub też amd64. Innymi słowy, twoja stacja robocza, laptop lub serwer.)

FAQ: Czy mam ...

  • 64-bitowy (x86_64 / AMD64 / Intel64)? lm
  • Wirtualizacja sprzętu (VMX / AMD-V)? vmx(Intel), svm(AMD)
  • Przyspieszone AES (AES-NI)? aes
  • TXT (TPM)? smx
  • hiperwizor (ogłoszony jako taki)? hypervisor

Większość innych funkcji jest interesująca tylko dla autorów kompilatorów lub jądra.

Wszystkie flagi

Pełna lista znajduje się w źródle jądra, w pliku arch/x86/include/asm/cpufeatures.h.

Funkcje procesora zdefiniowane przez Intel, poziom CPUID 0x00000001 (edx)

Zobacz także Wikipedię i tabelę 2-27 w Intel Advanced Vector Extensions Programming Reference

Funkcje procesora zdefiniowane przez AMD, poziom CPUID 0x80000001

Zobacz także Wikipedię i tabelę 2-23 w Intel Advanced Vector Extensions Programming Reference

Transmitowane funkcje procesora, poziom CPUID 0x80860001

  • recovery: CPU w trybie odzyskiwania
  • longrun: Kontrola mocy Longrun
  • lrti: Interfejs tabeli LongRun

Inne funkcje, mapowanie zdefiniowane w systemie Linux

  • cxmmx: Rozszerzenia Cyrix MMX
  • k6_mtrr: Niestandardowe MTRR AMD K6
  • cyrix_arr: Cyrix ARRs (= MTRRs)
  • centaur_mcr: MCR Centaura (= MTRR)
  • constant_tsc: TSC tyka w stałym tempie
  • up: Jądro SMP działa na UP
  • art: Zawsze działający zegar
  • arch_perfmon: Intel Architectural PerfMon
  • pebs: Próbkowanie oparte na zdarzeniach precyzyjnych
  • bts: Branch Trace Store
  • rep_good: mikrokod rep działa dobrze
  • acc_power: Mechanizm akumulacji mocy AMD
  • nopl: Instrukcje NOPL (0F 1F)
  • xtopology: rozszerzenia enum topologii procesora
  • tsc_reliable: TSC jest znany z niezawodności
  • nonstop_tsc: TSC nie zatrzymuje się w stanach C.
  • cpuid: CPU ma samą instrukcję CPUID
  • extd_apicid: rozszerzył APICID (8 bitów)
  • amd_dcm: procesor wielowęzłowy
  • aperfmperf: APERFMPERF
  • eagerfpu: Nieluzowane przywracanie FPU
  • nonstop_tsc_s3: TSC nie zatrzymuje się w stanie S3
  • tsc_known_freq: TSC ma znaną częstotliwość
  • mce_recovery: CPU ma sprawdzalne maszyny do odzyskania

Funkcje procesora zdefiniowane przez Intel, poziom CPUID 0x00000001 (ecx)

Zobacz także Wikipedię i tabelę 2-26 w Intel Advanced Vector Extensions Programming Reference

Funkcje procesora zdefiniowane przez VIA / Cyrix / Centaur, poziom CPUID 0xC0000001

  • rng: Generator liczb losowych obecny (xstore)
  • rng_en: Generator liczb losowych włączony
  • ace: krypto na procesorze (xcrypt)
  • ace_en: włączone szyfrowanie na procesorze
  • ace2: Advanced Cryptography Engine v2
  • ace2_en: ACE v2 włączony
  • phe: PadLock Hash Engine
  • phe_en: PHE włączone
  • pmm: PadLock Montgomery Multiplier
  • pmm_en: PMM włączony

Bardziej rozbudowane flagi AMD: poziom CPUID 0x80000001, ecx

  • lahf_lm: Załaduj AH z flag (LAHF) i zapisz AH w flagach (SAHF) w trybie długim
  • cmp_legacy: Jeśli tak, HyperThreading nie jest prawidłowy
  • svm: „Bezpieczna maszyna wirtualna”: AMD-V
  • extapic: Rozszerzona przestrzeń APIC
  • cr8_legacy: CR8 w trybie 32-bitowym
  • abm: Zaawansowana manipulacja bitami
  • sse4a: SSE-4A
  • misalignsse: wskazuje, czy generowany jest wyjątek ogólnej ochrony (#GP), gdy niektóre starsze instrukcje SSE działają na niezrównanych danych. Zależy również od CR0 i bitu sprawdzania wyrównania
  • 3dnowprefetch: Instrukcje pobierania wstępnego 3DNow
  • osvw: wskazuje widoczne obejście systemu operacyjnego , które pozwala systemowi obejść błędy procesora.
  • ibs: Próbkowanie na podstawie instrukcji
  • xop: rozszerzone instrukcje AVX
  • skinit: Instrukcje SKINIT / STGI
  • wdt: Timer nadzorujący
  • lwp: Lekkie profilowanie
  • fma4: 4 operandy Instrukcje MAC
  • tce: rozszerzenie pamięci podręcznej tłumaczeń
  • nodeid_msr: NodeId MSR
  • tbm: Manipulacja bitem końcowym
  • topoext: Rozszerzenia topologii Liście CPUID
  • perfctr_core: Rozszerzenia liczników wydajności
  • perfctr_nb: NB Rozszerzenia licznika wydajności
  • bpext: rozszerzenie punktu przerwania danych
  • ptsc: licznik znaczników czasu wykonania
  • perfctr_l2: Rozszerzenia licznika wydajności L2
  • mwaitx: MWAITrozszerzenie ( MONITORX/ MWAITX)

Flagi pomocnicze: zdefiniowano Linux - dla funkcji rozproszonych na różnych poziomach CPUID

  • ring3mwait: Pierścień 3 MONITOR / MWAIT
  • cpuid_fault: Błąd Intel CPUID
  • cpb: Zwiększenie wydajności AMD Core
  • epb: Obsługa IA32_ENERGY_PERF_BIAS
  • cat_l3: Technologia alokacji pamięci podręcznej L3
  • cat_l2: Technologia alokacji pamięci podręcznej L2
  • cdp_l3: Priorytetyzacja kodu i danych L3
  • invpcid_single: skutecznie invpcidiCR4.PCIDE=1
  • hw_pstate: AMD HW-PState
  • proc_feedback: AMD ProcFeedbackInterface
  • sme: Bezpieczne szyfrowanie pamięci AMD
  • pti: Izolacja tabeli stron jądra (Kaiser)
  • retpoline: Łagodzenie retpoliny dla wariantu Spectre 2 (gałęzie pośrednie)
  • retpoline_amd: Łagodzenie retpoliny AMD
  • intel_ppin: Numer inwentarzowy procesora Intel
  • avx512_4vnniw: Instrukcja sieci neuronowej AVX-512
  • avx512_4fmaps: AVX-512 Multiply Accumulation Pojedyncza precyzja
  • mba: Przydział przepustowości pamięci
  • rsb_ctxsw: Wypełnij RSB na przełącznikach kontekstowych

Flagi wirtualizacji: zdefiniowano Linux

  • tpr_shadow: Intel TPR Shadow
  • vnmi: Intel Virtual NMI
  • flexpriority: Intel FlexPriority
  • ept: Rozszerzona tabela stron Intel
  • vpid: Identyfikator wirtualnego procesora Intel
  • vmmcall: Wolą VMMCALL, abyVMCALL

Funkcje procesora zdefiniowane przez Intel, poziom CPUID 0x00000007: 0 (ebx)

Funkcje stanu rozszerzonego, poziom CPUID 0x0000000d: 1 (eax)

  • xsaveopt: Zoptymalizowany XSAVE
  • xsavec: XSAVEC
  • xgetbv1: XGETBVprzy ECX = 1
  • xsaves: XSAVES/XRSTORS

Sub-leaf CPU QoS zdefiniowany przez Intel, poziom CPUID 0x0000000F: 0 (edx)

  • cqm_llc: LLC QoS

Sub-leaf CPU QoS zdefiniowany przez Intel, poziom CPUID 0x0000000F: 1 (edx)

  • cqm_occup_llc: Monitorowanie obłożenia LLC
  • cqm_mbm_total: LLC całkowite monitorowanie MBM
  • cqm_mbm_local: Lokalne monitorowanie MBM LLC

Funkcje procesora zdefiniowane przez AMD, poziom CPUID 0x80000008 (ebx)

  • clzero: CLZEROinstrukcja
  • irperf: instrukcje wycofane licznik wydajności
  • xsaveerptr: Zawsze zapisuj / przywróć wskaźniki błędów FP

Karta zarządzania temperaturą i energią, poziom CPUID 0x00000006 (eax)

  • dtherm(dawniej dts): cyfrowy czujnik termiczny
  • ida: Intel Dynamic Acceleration
  • arat: Zawsze uruchomiony Timer APIC
  • pln: Powiadomienie o limicie mocy Intel
  • pts: Status cieplny pakietu Intel
  • hwp: Stany sprzętowe Intel
  • hwp_notify: Powiadomienie HWP
  • hwp_act_window: Okno aktywności HWP
  • hwp_epp: Preferencje wydajności energetycznej HWP
  • hwp_pkg_req: Żądanie na poziomie pakietu HWP

Identyfikacja funkcji AMD SVM, poziom CPUID 0x8000000a (edx)

  • npt: Obsługa tabeli zagnieżdżonych stron AMD
  • lbrv: Obsługa wirtualizacji AMD LBR
  • svm_lock: AMD SVM blokuje MSR
  • nrip_save: AMD SVM next_rip zapisz
  • tsc_scale: Obsługa skalowania AMD TSC
  • vmcb_clean: Obsługa czystych bitów AMD VMCB
  • flushbyasid: Obsługa AMD flush-by-ASID
  • decodeassists: Wsparcie AMD Decode Assists
  • pausefilter: Filtrowane przechwytywanie wstrzymania AMD
  • pfthreshold: Próg filtra wstrzymania AMD
  • avic: Wirtualny kontroler przerwań
  • vmsave_vmload: Wirtualny VMSAVE VMLOAD
  • vgif: Wirtualny GIF

Funkcje procesora zdefiniowane przez Intel, poziom CPUID 0x00000007: 0 (ecx)

  • avx512vbmi: Instrukcje manipulacji bitami wektorowymi AVX512
  • umip: Ochrona instrukcji trybu użytkownika
  • pku: Klucze ochronne dla przestrzeni użytkownika
  • ospke: Klucze ochrony systemu operacyjnego włączone
  • avx512_vbmi2: Dodatkowe instrukcje manipulacji bitami wektorowymi AVX512
  • gfni: Nowe instrukcje Galois Field
  • vaes: Vector AES
  • vpclmulqdq: Podwójne przenoszenie mnożenia bez przenoszenia
  • avx512_vnni: Instrukcje dotyczące wektorowej sieci neuronowej
  • avx512_bitalg: Instrukcje VPOPCNT [B, W] i VPSHUF-BITQMB
  • avx512_vpopcntdq: POPCNT dla wektorów DW / QW
  • la57: 5-poziomowe tabele stron
  • rdpid: Instrukcja RDPID

Funkcje procesora zdefiniowane przez AMD, poziom CPUID 0x80000007 (ebx)

  • overflow_recov: Obsługa odzyskiwania po przepełnieniu MCA
  • succor: ograniczenie i odzyskiwanie błędów, których nie można naprawić
  • smca: Skalowalny MCA

Wykryte błędy procesora (zdefiniowane w systemie Linux)

  • f00f: Intel F00F
  • fdiv: CPU FDIV
  • coma: Śpiączka Cyrix 6x86
  • amd_tlb_mmatch: tlb_mmatchAMD Erratum 383
  • amd_apic_c1e: apic_c1eAMD Erratum 400
  • 11ap: Zły lokalny APIC aka 11AP
  • fxsave_leak: FXSAVE wycieka FOP / FIP / FOP
  • clflush_monitor: AAI65, wymagane WYKLUCZENIE przed MONITOREM
  • sysret_ss_attrs: SYSRET nie naprawia atrybutów SS
  • espfix: „” IRET do 16-bit SS powoduje uszkodzenie wysokich bitów ESP / RSP
  • null_seg: Zerowanie selektora zachowuje bazę
  • swapgs_fence: SWAPGS bez danych wejściowych zależnych od GS
  • monitor: IPI jest wymagany do wznowienia zdalnego procesora
  • amd_e400: Erratum 400 ma wpływ na procesor
  • cpu_meltdown: Na procesor ma wpływ atak topnienia i wymaga izolacji tablicy stron jądra
  • spectre_v1: Na procesor wpływa atak wariantu 1 Spectre z gałęziami warunkowymi
  • spectre_v2: Na procesor wpływa atak wariantu 2 Spectre z pośrednimi gałęziami
  • spec_store_bypass: Na procesor ma wpływ podatność Speculative Store Bypass (wariant Spectre 4).

PS Ta lista pochodzi ze arch/x86/include/asm/cpufeatures.hźródła jądra. Flagi są wymienione w tej samej kolejności co kod źródłowy. Pomóż, dodając linki do opisów funkcji, gdy ich brakuje, pisząc krótki opis funkcji o nieekspresyjnych nazwach oraz aktualizując listę nowych wersji jądra. Obecna lista pochodzi z Linuksa 4.15 plus kilka późniejszych dodatków.


1
Dziękujemy @Gilles i redaktorom za pouczające pytanie oraz jego podsumowaną i szczegółową odpowiedź. Teraz, aby sprawdzić, co możliwości CPU, to należy stosować następujące zaczerpnięte z NixCraft, np dla procesorów Intel: $ egrep -wo ^flags|vmx|ept|vpid|npt|tpr_shadow|flexpriority|vnmi|lm|aes' /proc/cpuinfo --color | sort -u. Jest też doskonały interfejs CLI / GUI i-nex .
tuk0z

Znakomity zbiór wyjaśnień i linków; dziękuję wszystkim, którzy przyczynili się.
Paul Gear,

Skąd pochodzą dane błędów? Nie wydaje się być wymieniony w pliku cpufeatures.h.
Drazisil

@Drazisil O ile pamiętam, wszystkie wpisy pochodzą ze wskazanej wersji cpufeatures.h. Opisy są edytowane, aby uczynić je bardziej zrozumiałymi i bardziej pouczającymi, gdy ktoś starał się to zrobić.
Gilles

@Gilles Wydaje się, że dotyczy to wszystkich błędów oprócz błędów. Poza tym, że nie są features, nie widzę ich w tym pliku.
Drazisil

71

RAMIĘ

W procesorach ARM w features:linii wymieniono kilka funkcji . Wspomniane są tylko funkcje bezpośrednio związane z architekturą ARM, a nie funkcje specyficzne dla producenta krzemu lub systemu na chipie.

Funkcje są uzyskiwane z wyszukiwania identyfikatora procesora za pomocą read_cpuid()i wyszukiwania w definicjach typów procesorów znanych w czasie kompilacji, gdzie cechy są wyrażane jako maska HWCAP_xxxflag. Odpowiednie ciągi znaków znajdują się w hwcap_stritdsetup.c . W.

Na poniższej liście ARMv6 wprowadził instrukcje SIMD i typy danych. ARMv7 dostarczył zaawansowane instrukcje SIMD i typy danych. Na 32-bitowych maszynach ARM neonsygnalizuje Advanced SIMD; podczas gdy asimdwysyła sygnały Advanced SIMD na 64-bitowych urządzeniach z ramieniem.

Poza tym Hardware:linia wskazuje model procesora. W zależności od modelu, mogą istnieć inne informacje w innych plikach poniżej /proclub /syslub w wiadomościach dziennika jądra boot-czasowych. Niestety, każdy producent procesora ARM ma własną metodę raportowania funkcji procesora, jeśli takie istnieją.



11

x86

Znajdź go sam w 4.1.3 x86 i podręczniku Intela

arch/x86/include/asm/cpufeature.h zawiera pełną listę.

Zdefiniowane wartości są typu:

X*32 + Y

Na przykład:

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

Flagi funkcji, wyodrębnione z CPUID, są przechowywane w:

  • __u32 x86_capability[NCAPINTS + NBUGINTS]; pole
  • z struct cpuinfo_x86 boot_cpu_data
  • zdefiniowany w x86/kernel/setup.c

który jest inicjowany przez __initfunkcje.

Skąd x86_capabilitypochodzi każdy element tablicy:

| 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    |

Uwagi:

Wnioski:

  • większość wpisów pochodzi bezpośrednio z rejestrów wyjściowych CPUID i jest ustawiana common.cprzez coś takiego:

    c->x86_capability[0] = edx;
    

    Można je łatwo znaleźć wsadowo w instrukcji Intel dla CPUID.

  • pozostałe są rozproszone po źródle i są ustawiane krok po kroku set_cpu_cap.

    Aby je znaleźć, użyj git grep X86_FEATURE_XXXwewnątrz arch/x86.

    Zazwyczaj można wywnioskować, jaki bit CPUID odpowiadają, z otaczającego kodu.

Inne zabawne fakty

  • Flagi są w rzeczywistości drukowane arch/x86/kernel/cpu/proc.cz kodem:

    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]);
    

    Gdzie:

    • cpu_has wykonuje główne sprawdzenie funkcji.
    • x86_cap_flags[i] zawiera ciągi, które odpowiadają każdej fladze.

    Zostaje to przekazane jako wywołanie zwrotne do prockonfiguracji systemu. Punkt wejścia znajduje się w fs/proc/cpuinfo.c.

  • x86_cap_flagsciągi są generowane arch/x86/kernel/cpu/mkcapflags.hbezpośrednio z arch/x86/include/asm/cpufeature.h„parsowania” go za pomocą sed...

    Dane wyjściowe trafiają do arch/x86/kernel/cpu/capflags.ckatalogu kompilacji, a wynikowa tablica wygląda następująco:

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

    więc na przykład X86_FEATURE_FPUodpowiada ciągowi "fpu"i tak dalej.

  • cpu_has dzieli się na dwa przypadki z kodem:

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

    Oni są:

    • __builtin_constant_p(bit) && REQUIRED_MASK_BIT_SET(bit): flaga jest wymagana do uruchomienia jądra.

      Jest to określone przez dane wewnątrz required-features.h, które komentują:

      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!
      

      Ponieważ są one znane w czasie kompilacji (wymagania jądra), zostały już sprawdzone podczas uruchamiania, sprawdzenie można rozwiązać w czasie kompilacji, jeśli bitjest znane w czasie kompilacji.

      Zatem, __builtin_constant_p(bit)który sprawdza, czy bitjest stałą czasową kompilacji.

    • test_cpu_cap: zużywa CPUIDdane z struct cpuinfo_x86 boot_cpu_dataglobalnego


3
Wyjaśniłeś, jak przejść ze skrótu na dłuższą nazwę, ale często ta dłuższa nazwa nie jest dużo bardziej zrozumiała i cpuidrobi to w wygodniejszy sposób. Zadałem to pytanie, aby mieć miejsce, w którym nazwiska są udokumentowane.
Gilles

@Gilles jest to głównie dla tych, którzy chcą tworzyć tabele / nie mogą znaleźć swojej funkcji w tabeli, takich jak ja :-) Ale nadal, w większości przypadków, kiedy spojrzysz na odpowiedni punkt źródła, mapa do CPUID jest natychmiastowy.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

10

Lub alternatywnie możesz użyć cpuidprogramu, musi on znajdować się w repozytorium debian. Zrzuca wszystkie możliwe informacje o twoim CPU z kilkoma wyjaśnieniami, więc nie otrzymujesz tych niejasnych flag.


cpuidrozszerza skróty. Nie nazwałbym tak naprawdę wyjaśnieniami wyjściowymi . Wiedza, że htto oznacza „Hyper Threading”, wyjaśnia to w pewnym stopniu, ale wiedza, że mmxto oznacza „zestaw instrukcji MMX”, nie tyle, a to mcaoznacza „Machine Check Architecture”.
Gilles

6
@Gilles ... a jednak „Machine Check Architecture” jest z pewnością lepszym zapytaniem Google niż „mca”;)
Alois Mahdal
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.