Apa arti dari flag di / proc / cpuinfo?

212

Bagaimana saya bisa tahu apakah prosesor saya memiliki fitur tertentu? (Set instruksi 64-bit, virtualisasi berbantuan perangkat keras, akselerator kriptografi, dll.) Saya tahu bahwa file tersebut /proc/cpuinfoberisi informasi ini, di flagsbaris tersebut, tetapi apa arti semua singkatan samar ini?

Misalnya, dengan diberikan ekstrak berikut /proc/cpuinfo, apakah saya memiliki CPU 64-bit? Apakah saya memiliki virtualisasi perangkat keras?

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
sumber

Jawaban:

275

x86

(32-bit alias i386-i686 dan 64-bit alias amd64. Dengan kata lain, workstation, laptop atau server Anda.)

FAQ: Apakah saya punya ...

  • 64-bit (x86_64 / AMD64 / Intel64)? lm
  • Virtualisasi perangkat keras (VMX / AMD-V)? vmx(Intel), svm(AMD)
  • AES yang Dipercepat (AES-NI)? aes
  • TXT (TPM)? smx
  • hypervisor (diumumkan seperti itu)? hypervisor

Sebagian besar fitur lain hanya menarik bagi pembuat kompiler atau kernel.

Semua bendera

Daftar lengkapnya ada di sumber kernel, dalam file arch/x86/include/asm/cpufeatures.h.

Fitur CPU yang ditentukan Intel, level CPUID 0x00000001 (edx)

Lihat juga Wikipedia dan tabel 2-27 dalam Referensi Pemrograman Ekstensi Vektor Lanjutan Intel

Fitur CPU yang ditentukan AMD, level CPUID 0x80000001

Lihat juga Wikipedia dan tabel 2-23 dalam Referensi Pemrograman Ekstensi Vektor Lanjutan Intel

Fitur CPU yang ditentukan transmeta, level CPUID 0x80860001

  • recovery: CPU dalam mode pemulihan
  • longrun: Kontrol daya Longrun
  • lrti: Antarmuka tabel LongRun

Fitur lainnya, pemetaan yang ditentukan Linux

  • cxmmx: Ekstensi Cyrix MMX
  • k6_mtrr: AMD K6 MTRR tidak standar
  • cyrix_arr: ARR Cyrix (= MTRRs)
  • centaur_mcr: Centaur MCRs (= MTRRs)
  • constant_tsc: TSC berdetak pada tingkat yang konstan
  • up: Kernel SMP berjalan pada UP
  • art: Timer Selalu-Berjalan
  • arch_perfmon: Intel Architectural PerfMon
  • pebs: Pengambilan Sampel Berbasis Kejadian Yang Tepat
  • bts: Toko Jejak Cabang
  • rep_good: rep mikrokode bekerja dengan baik
  • acc_power: AMD mekanisme akumulasi daya
  • nopl: Instruksi NOPL (0F 1F)
  • xtopology: ekstensi cpu topologi enum
  • tsc_reliable: TSC dikenal andal
  • nonstop_tsc: TSC tidak berhenti di negara C
  • cpuid: CPU memiliki instruksi CPUID sendiri
  • extd_apicid: telah memperpanjang APICID (8 bit)
  • amd_dcm: prosesor multi-simpul
  • aperfmperf: APERFMPERF
  • eagerfpu: FPU non lazy restore
  • nonstop_tsc_s3: TSC tidak berhenti dalam status S3
  • tsc_known_freq: TSC memiliki frekuensi yang diketahui
  • mce_recovery: CPU memiliki pemeriksaan mesin yang dapat dipulihkan

Fitur CPU yang ditentukan Intel, level CPUID 0x00000001 (ecx)

Lihat juga Wikipedia dan tabel 2-26 dalam Referensi Pemrograman Ekstensi Vektor Lanjut Intel

Fitur CPU yang ditentukan VIA / Cyrix / Centaur, level CPUID 0xC0000001

  • rng: Random Number Generator hadir (xstore)
  • rng_en: Random Number Generator diaktifkan
  • ace: pada crypto-CPU (xcrypt)
  • ace_en: crypto on-CPU diaktifkan
  • ace2: Mesin Kriptografi Lanjut v2
  • ace2_en: ACE v2 diaktifkan
  • phe: PadLock Hash Engine
  • phe_en: PHE diaktifkan
  • pmm: Pengganda PadLock Montgomery
  • pmm_en: PMM diaktifkan

Bendera AMD yang lebih diperluas: CPUID level 0x80000001, ecx

  • lahf_lm: Muat AH dari Bendera (LAHF) dan Simpan AH ke Bendera (SAHF) dalam mode panjang
  • cmp_legacy: Jika ya HyperThreading tidak valid
  • svm: "Secure virtual machine": AMD-V
  • extapic: Ruang APIC yang diperluas
  • cr8_legacy: CR8 dalam mode 32-bit
  • abm: Manipulasi Bit Lanjut
  • sse4a: SSE-4A
  • misalignsse: menunjukkan jika pengecualian perlindungan umum (#GP) dihasilkan ketika beberapa instruksi SSE lawas beroperasi pada data yang tidak selaras. Juga tergantung pada bit CR0 dan Alignment Memeriksa
  • 3dnowprefetch: 3DNow instruksi prefetch
  • osvw: menunjukkan OS Visible Workaround , yang memungkinkan OS untuk bekerja di sekitar kesalahan prosesor.
  • ibs: Pengambilan Sampel Berbasis Instruksi
  • xop: petunjuk AVX diperpanjang
  • skinit: Instruksi SKINIT / STGI
  • wdt: Pengawas waktu
  • lwp: Profil Berat Ringan
  • fma4: 4 operan instruksi MAC
  • tce: ekstensi cache terjemahan
  • nodeid_msr: NodeId MSR
  • tbm: Manipulasi Bit Trailing
  • topoext: Ekstensi Topologi, daun CPUID
  • perfctr_core: Ekstensi Penghitung Kinerja Inti
  • perfctr_nb: NB Performance Counter Extensions
  • bpext: ekstensi data breakpoint
  • ptsc: penghitung cap waktu kinerja
  • perfctr_l2: Ekstensi Penghitung Kinerja L2
  • mwaitx: MWAITekstensi ( MONITORX/ MWAITX)

Bendera bantu: Ditentukan Linux - Untuk fitur yang tersebar di berbagai level CPUID

  • ring3mwait: Ring 3 MONITOR / MWAIT
  • cpuid_fault: Intel CPUID faulting
  • cpb: AMD Core Performance Boost
  • epb: Dukungan IA32_ENERGY_PERF_BIAS
  • cat_l3: Teknologi Alokasi Cache L3
  • cat_l2: Teknologi Alokasi Cache L2
  • cdp_l3: Kode dan Prioritas Data L3
  • invpcid_single: efektif invpciddanCR4.PCIDE=1
  • hw_pstate: AMD HW-PState
  • proc_feedback: AMD ProcFeedbackInterface
  • sme: Enkripsi Memori Aman AMD
  • pti: Isolasi Halaman Tabel Kernel (Kaiser)
  • retpoline: Mitigasi retpoline untuk Spectre varian 2 (cabang tidak langsung)
  • retpoline_amd: Mitigasi AMD Retpoline
  • intel_ppin: Nomor Persediaan Prosesor Intel
  • avx512_4vnniw: Petunjuk Jaringan Saraf AVX-512
  • avx512_4fmaps: AVX-512 Multiply Accumulation Single precision
  • mba: Alokasi Bandwidth Memori
  • rsb_ctxsw: Isi RSB pada sakelar konteks

Bendera virtualisasi: Didefinisikan Linux

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

Fitur CPU yang ditentukan Intel, level CPUID 0x00000007: 0 (ebx)

Fitur status lanjut, level CPUID 0x0000000d: 1 (eax)

  • xsaveopt: Dioptimalkan XSAVE
  • xsavec: XSAVEC
  • xgetbv1: XGETBVdengan ECX = 1
  • xsaves: XSAVES/XRSTORS

Sub-leaf CPU QoS yang ditetapkan Intel, level CPUID 0x0000000F: 0 (edx)

  • cqm_llc: LLC QoS

Sub-leaf CPU QoS yang ditetapkan Intel, level CPUID 0x0000000F: 1 (edx)

  • cqm_occup_llc: Pemantauan hunian LLC
  • cqm_mbm_total: LLC total pemantauan MBM
  • cqm_mbm_local: Pemantauan MBM lokal LLC

Fitur CPU yang ditentukan AMD, level CPUID 0x80000008 (ebx)

  • clzero: CLZEROinstruksi
  • irperf: instruksi pensiunan penghitung kinerja
  • xsaveerptr: Selalu simpan / pulihkan pointer kesalahan FP

Daun Manajemen Thermal dan Daya, level CPUID 0x00000006 (eax)

  • dtherm(sebelumnya dts): sensor termal digital
  • ida: Intel Dynamic Acceleration
  • arat: Selalu Menjalankan Timer APIC
  • pln: Pemberitahuan Batas Daya Intel
  • pts: Status Thermal Paket Intel
  • hwp: Status-P Perangkat Keras Intel
  • hwp_notify: Pemberitahuan HWP
  • hwp_act_window: Jendela Aktivitas HWP
  • hwp_epp: Preferensi Kinerja Energi HWP
  • hwp_pkg_req: Permintaan tingkat paket HWP

Identifikasi Fitur AMD SVM, level CPUID 0x8000000a (edx)

  • npt: Dukungan AMD Nested Page Table
  • lbrv: Dukungan AMD LBR Virtualization
  • svm_lock: AMD SVM mengunci MSR
  • nrip_save: AMD SVM next_rip save
  • tsc_scale: Dukungan penskalaan AMD TSC
  • vmcb_clean: Dukungan AMD VMCB clean bits
  • flushbyasid: Dukungan AMD flush-by-ASID
  • decodeassists: Dukungan AMD Decode Assists
  • pausefilter: AMD menyaring jeda mencegat
  • pfthreshold: AMD jeda ambang filter
  • avic: Pengendali Interupsi Virtual
  • vmsave_vmload: Virtual VMSAVE VMLOAD
  • vgif: GIF Virtual

Fitur-fitur CPU yang ditentukan Intel, level CPUID 0x00000007: 0 (ecx)

  • avx512vbmi: Petunjuk manipulasi AVX512 Vector Bit
  • umip: Perlindungan Instruksi Mode Pengguna
  • pku: Kunci Perlindungan untuk Ruang Pengguna
  • ospke: Tombol Perlindungan OS Aktif
  • avx512_vbmi2: Petunjuk manipulasi tambahan AVX512 Vector Bit
  • gfni: Galois Field Instruksi Baru
  • vaes: Vektor AES
  • vpclmulqdq: Carry Quad Less Multiplication Double
  • avx512_vnni: Petunjuk Jaringan Saraf Vektor
  • avx512_bitalg: Petunjuk VPOPCNT [B, W] dan VPSHUF-BITQMB
  • avx512_vpopcntdq: POPCNT untuk vektor DW / QW
  • la57: Tabel halaman 5 tingkat
  • rdpid: Instruksi RDPID

Fitur CPU yang ditentukan AMD, level CPUID 0x80000007 (ebx)

  • overflow_recov: Dukungan pemulihan overflow MCA
  • succor: penahanan dan pemulihan kesalahan yang tidak dapat diperbaiki
  • smca: MCA yang dapat diukur

Bug CPU yang terdeteksi (Linux-defined)

  • f00f: Intel F00F
  • fdiv: CPU FDIV
  • coma: Koma Cyrix 6x86
  • amd_tlb_mmatch: tlb_mmatchAMD Erratum 383
  • amd_apic_c1e: apic_c1eAMD Erratum 400
  • 11ap: APIC lokal yang buruk alias 11AP
  • fxsave_leak: FXSAVE membocorkan FOP / FIP / FOP
  • clflush_monitor: AAI65, CLFLUSH diperlukan sebelum MONITOR
  • sysret_ss_attrs: SYSRET tidak memperbaiki SS attrs
  • espfix: "" IRET ke 16-bit SS merusak ESP / RSP bit tinggi
  • null_seg: Memecat pemilih akan mempertahankan basis
  • swapgs_fence: SWAPGS tanpa dep input pada GS
  • monitor: IPI diperlukan untuk membangunkan remote CPU
  • amd_e400: CPU termasuk yang terpengaruh oleh Erratum 400
  • cpu_meltdown: CPU dipengaruhi oleh serangan meltdown dan membutuhkan isolasi tabel halaman kernel
  • spectre_v1: CPU dipengaruhi oleh serangan varian 1 Spectre dengan cabang bersyarat
  • spectre_v2: CPU dipengaruhi oleh serangan Spectre varian 2 dengan cabang tidak langsung
  • spec_store_bypass: CPU dipengaruhi oleh kerentanan Bypass Store Speculative (Spectre varian 4).

PS Daftar ini berasal dari arch/x86/include/asm/cpufeatures.hdalam sumber kernel. Bendera terdaftar dalam urutan yang sama dengan kode sumber. Tolong bantu dengan menambahkan tautan ke deskripsi fitur ketika hilang, dengan menulis deskripsi singkat fitur yang memiliki nama tidak ekspresif, dan dengan memperbarui daftar untuk versi kernel baru. Daftar saat ini dari Linux 4.15 ditambah beberapa tambahan kemudian.

Gilles
sumber
1
Terima kasih @Gilles dan editor untuk pertanyaan informatif & jawaban ringkas dan terperincinya. Sekarang, untuk memeriksa kemampuan CPU apapun, saya menggunakan berikut diambil dari NixCraft, misalnya untuk CPU Intel: $ egrep -wo ^flags|vmx|ept|vpid|npt|tpr_shadow|flexpriority|vnmi|lm|aes' /proc/cpuinfo --color | sort -u. Dan ada juga CLI / GUI yang sangat baik i-nex .
tuk0z
Kumpulan penjelasan & tautan luar biasa; Terima kasih untuk semua orang yang berkontribusi.
Paul Gear
Dari mana data bug berasal? Tampaknya tidak terdaftar dalam file cpufeatures.h.
Drazisil
@ Drazisil Sejauh yang saya ingat semua entri berasal dari versi yang ditunjukkan cpufeatures.h. Deskripsi diedit untuk membuatnya lebih komprehensif dan lebih informatif di mana seseorang mengambil upaya untuk melakukan itu.
Gilles
@Gilles Sepertinya hanya untuk bug saja. Menyisihkan bahwa mereka bukan featuressaya tidak melihatnya di file itu.
Drazisil
71

LENGAN

Pada prosesor ARM, beberapa fitur disebutkan di dalam features:baris. Hanya fitur yang terkait langsung dengan arsitektur ARM yang disebutkan di sana, bukan fitur khusus untuk pabrikan silikon atau sistem pada chip.

Fitur-fitur diperoleh dari mencari id CPU dengan read_cpuid()dan mencarinya dalam definisi tipe prosesor yang dikenal pada waktu kompilasi di mana fitur tersebut dinyatakan sebagai topeng HWCAP_xxxbendera. String yang sesuai ada di hwcap_strdllsetup.c .

Dalam daftar di bawah ini, ARMv6 memperkenalkan instruksi dan tipe data SIMD. ARMv7 menyediakan instruksi dan tipe data SIMD Lanjutan. Pada mesin ARM 32-bit, neonmemberi sinyal Advanced SIMD; sementara asimdmemberi sinyal Advanced SIMD pada mesin lengan 64-bit.

Di luar itu, Hardware:garis menunjukkan model prosesor. Bergantung pada modelnya, mungkin ada informasi lain di file lain di bawah /procatau /sys, atau dalam pesan log kernel saat boot. Sayangnya setiap produsen CPU ARM memiliki metode sendiri untuk melaporkan fitur prosesor, jika ada.

Gilles
sumber
11

x86

Temukan sendiri di 4.1.3 x86 dan manual Intel

arch/x86/include/asm/cpufeature.h berisi daftar lengkap.

Nilai yang ditentukan adalah tipe:

X*32 + Y

Misalnya:

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

Bendera fitur, yang diekstrak dari CPUID, disimpan di dalam:

  • __u32 x86_capability[NCAPINTS + NBUGINTS]; bidang
  • dari struct cpuinfo_x86 boot_cpu_data
  • didefinisikan pada x86/kernel/setup.c

yang diinisialisasi melalui __initfungsi.

Dari mana setiap x86_capabilityelemen array berasal:

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

Catatan:

Kesimpulan:

  • sebagian besar entri datang langsung dari register keluaran CPUID dan diatur common.coleh sesuatu seperti:

    c->x86_capability[0] = edx;
    

    Itu mudah ditemukan dalam batch pada manual Intel untuk CPUID.

  • yang lain tersebar di seluruh sumber, dan diatur sedikit demi sedikit dengan set_cpu_cap.

    Untuk menemukannya, gunakan git grep X86_FEATURE_XXXdi dalam arch/x86.

    Anda biasanya dapat menyimpulkan bit CPUID mana yang sesuai dengan kode di sekitarnya.

Fakta menyenangkan lainnya

  • Bendera sebenarnya dicetak arch/x86/kernel/cpu/proc.cdengan kode:

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

    Dimana:

    • cpu_has apakah pemeriksaan utama untuk fitur.
    • x86_cap_flags[i] berisi string yang sesuai dengan setiap bendera.

    Ini dilewatkan sebagai panggilan balik ke procpengaturan sistem. Titik masuknya di fs/proc/cpuinfo.c.

  • x86_cap_flagsstring dihasilkan oleh arch/x86/kernel/cpu/mkcapflags.hlangsung dari arch/x86/include/asm/cpufeature.hdengan "parsing" dengan sed...

    Output menuju ke arch/x86/kernel/cpu/capflags.cdirektori build, dan array yang dihasilkan terlihat seperti:

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

    jadi misalnya X86_FEATURE_FPUsesuai dengan string "fpu"dan sebagainya.

  • cpu_has dipecah menjadi dua kasus dengan kode:

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

    Mereka:

    • __builtin_constant_p(bit) && REQUIRED_MASK_BIT_SET(bit): bendera diperlukan untuk menjalankan kernel.

      Ini ditentukan oleh data di dalam required-features.h, yang berkomentar:

      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!
      

      Karena itu diketahui pada waktu kompilasi (persyaratan kernel), telah diperiksa pada saat startup, pemeriksaan dapat diselesaikan pada waktu kompilasi jika bitdiketahui pada waktu kompilasi.

      Jadi __builtin_constant_p(bit)yang memeriksa apakah bitadalah waktu kompilasi konstan.

    • test_cpu_cap: ini menggunakan CPUIDdata dari struct cpuinfo_x86 boot_cpu_dataglobal

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
sumber
3
Anda telah menjelaskan cara beralih dari singkatan ke nama yang lebih panjang, tetapi seringkali nama yang lebih panjang itu tidak jauh lebih dapat dipahami, dan cpuidmelakukannya dengan cara yang lebih nyaman. Saya mengajukan pertanyaan itu untuk memiliki tempat di mana nama-nama itu didokumentasikan.
Gilles
@Gilles ini sebagian besar untuk mereka yang ingin membuat tabel / tidak dapat menemukan fitur mereka di dalam tabel, seperti saya :-) Namun, untuk sebagian besar kasus, setelah Anda melihat titik yang tepat dari sumber, peta ke CPUID adalah segera.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
10

Atau sebagai alternatif, Anda dapat menggunakan cpuidprogram, harus dalam repositori debian. Itu dump setiap info yang mungkin tentang CPU Anda dengan beberapa penjelasan, sehingga Anda tidak mendapatkan bendera yang tidak jelas.

hurufu
sumber
cpuidmemperluas singkatan. Saya tidak akan menyebut penjelasan outputnya . Mengetahui itu htberarti "Hyper Threading" menjelaskannya sampai batas tertentu, tetapi mengetahui itu mmxberarti "set instruksi MMX", tidak begitu banyak, dan itu mcaberarti "Arsitektur Pemeriksaan Mesin", hampir tidak.
Gilles
6
@Gilles ... namun, "Machine Check Architecture" tentu saja permintaan Google lebih baik daripada "mca";)
Alois Mahdal