/ Proc / cpuinfo içindeki bayraklar ne anlama geliyor?


212

İşlemcimin belirli bir özelliği olup olmadığını nasıl anlarım? (64 bit komut seti, donanım destekli sanallaştırma, kriptografik hızlandırıcılar vb.) Dosyanın /proc/cpuinfobu bilgileri flagssatırda içerdiğini biliyorum , fakat tüm bu kriptik kısaltmalar ne anlama geliyor?

Örneğin, aşağıdaki özü verilen, /proc/cpuinfobir 64-bit CPU var mı? Donanım sanallaştırmam var mı?

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

Yanıtlar:


275

x86

(32 bit aka i386 – i686 ve 64 bit aka amd64. Başka bir deyişle, iş istasyonunuz, dizüstü bilgisayarınız veya sunucunuz.)

SSS: Var mı?

  • 64 bit (x86_64 / AMD64 / Intel64)? lm
  • Donanım sanallaştırma (VMX / AMD-V)? vmx(Intel), svm(AMD)
  • Hızlandırılmış AES (AES-NI)? aes
  • TXT (TPM)? smx
  • bir hipervizör (açıklandığı gibi)? hypervisor

Diğer özelliklerin çoğu sadece derleyici veya çekirdek yazarlarının ilgisini çekmektedir.

Tüm bayraklar

Tam liste, dosyadaki çekirdek kaynağındadır arch/x86/include/asm/cpufeatures.h.

Intel tanımlı CPU özellikleri, CPUID seviyesi 0x00000001 (edx)

Ayrıca bkz . Intel Gelişmiş Vektör Uzantıları Programlama Referansında Vikipedi ve tablo 2-27

AMD tanımlı CPU özellikleri, CPUID seviyesi 0x80000001

Ayrıca bkz . Intel Gelişmiş Vektör Uzantıları Programlama Referansında Vikipedi ve tablo 2-23

Transmeta tanımlı CPU özellikleri, CPUID seviyesi 0x80860001

  • recovery: Kurtarma modunda CPU
  • longrun: Longrun güç kontrolü
  • lrti: LongRun masa arayüzü

Diğer özellikler, Linux tanımlı haritalama

  • cxmmx: Cyrix MMX uzantıları
  • k6_mtrr: AMD K6 standart dışı MTRR'ler
  • cyrix_arr: Cyrix ARR'ler (= MTRR'ler)
  • centaur_mcr: Centaur MCR'leri (= MTRR'ler)
  • constant_tsc: TSC sabit bir oranda keneler
  • up: SMP çekirdeği UP'da çalışıyor
  • art: Her Zaman Çalışan Zamanlayıcı
  • arch_perfmon: Intel Mimari PerfMon
  • pebs: Kesin Olay Tabanlı Örnekleme
  • bts: Şube Takip Mağazası
  • rep_good: rep microcode iyi çalışıyor
  • acc_power: AMD birikmiş güç mekanizması
  • nopl: NOPL (0F 1F) talimatları
  • xtopology: cpu topoloji enum uzantıları
  • tsc_reliable: TSC'nin güvenilir olduğu biliniyor
  • nonstop_tsc: TSC , C durumlarında durmuyor
  • cpuid: CPU'da CPUID komutu var
  • extd_apicid: APICID'i genişletti (8 bit)
  • amd_dcm: çok düğümlü işlemci
  • aperfmperf: APERFMPERF
  • eagerfpu: Tembel olmayan FPU geri yüklemesi
  • nonstop_tsc_s3: TSC S3 durumunda bitmiyor
  • tsc_known_freq: TSC bilinen sıklığa sahip
  • mce_recovery: CPU kurtarılabilir makine kontrollerine sahip

Intel tanımlı CPU özellikleri, CPUID seviyesi 0x00000001 (ecx)

Ayrıca bkz . Intel Gelişmiş Vektör Uzantıları Programlama Referansında Wikipedia ve tablo 2-26.

VIA / Cyrix / Centaur tanımlı CPU özellikleri, CPUID seviyesi 0xC0000001

  • rng: Rastgele Sayı Üreticisi var (xstore)
  • rng_en: Rastgele Sayı Üreticisi etkin
  • ace: CPU kripto (xcrypt)
  • ace_en: CPU kripto etkin
  • ace2: Gelişmiş Şifreleme Motoru v2
  • ace2_en: ACE v2 etkin
  • phe: PadLock Karma Motor
  • phe_en: PHE etkin
  • pmm: PadLock Montgomery Çarpanı
  • pmm_en: PMM etkin

Daha genişletilmiş AMD bayrakları: CPUID seviyesi 0x80000001, ecx

  • lahf_lm: AH'yi Bayraklardan (LAHF) yükleyin ve AH'yi Bayraklarda (SAHF) uzun modda saklayın
  • cmp_legacy: Varsa HyperThreading geçerli değil
  • svm: “Güvenli sanal makine”: AMD-V
  • extapic: Genişletilmiş APIC alanı
  • cr8_legacy: 32 bit modunda CR8
  • abm: Gelişmiş Bit Manipülasyonu
  • sse4a: SSE-4A
  • misalignsse: bazı eski SSE komutları atanmamış veriler üzerinde çalışırken genel koruma istisnasının (#GP) üretilip üretilmediğini gösterir. Ayrıca CR0 ve Hizalama Kontrolü bit'ine de bağlıdır
  • 3dnowprefetch: 3DNow önceden alma talimatları
  • osvw: işletim sisteminin işlemci hatası yapmasına izin veren İşletim Sistemi Görünür Geçici Çözümünü belirtir .
  • ibs: Öğretim Tabanlı Örnekleme
  • xop: genişletilmiş AVX talimatları
  • skinit: SKINIT / STGI talimatları
  • wdt: Watchdog zamanlayıcı
  • lwp: Hafif Profil Oluşturma
  • fma4: 4 işlenenler MAC talimatları
  • tce: çeviri önbellek uzantısı
  • nodeid_msr: Düğüm Kimliği MSR
  • tbm: Firar Bit Manipülasyonu
  • topoext: Topoloji uzantıları CPUID yapraklar
  • perfctr_core: Çekirdek Performans Sayaç Uzantıları
  • perfctr_nb: NB Performans Sayaç Uzantıları
  • bpext: veri kesme noktası uzantısı
  • ptsc: performans zaman damgası sayacı
  • perfctr_l2: L2 Performans Sayacı Uzantıları
  • mwaitx: MWAITuzatma ( MONITORX/ MWAITX)

Yardımcı bayraklar: Linux tanımlı - Çeşitli CPUID seviyelerinde dağınık özellikler için

  • ring3mwait: Halka 3 MONİTÖR / MWAIT
  • cpuid_fault: Intel CPUID arızası
  • cpb: AMD Core Performance Boost
  • epb: IA32_ENERGY_PERF_BIAS desteği
  • cat_l3: Önbellek Ayırma Teknolojisi L3
  • cat_l2: Önbellek Ayırma Teknolojisi L2
  • cdp_l3: Kod ve Veri Önceliklendirme L3
  • invpcid_single: etkili invpcidveCR4.PCIDE=1
  • hw_pstate: AMD HW-PState
  • proc_feedback: AMD ProcFeedbackInterface
  • sme: AMD Güvenli Bellek Şifrelemesi
  • pti: Çekirdek Sayfa Tablosu Yalıtımı (Kaiser)
  • retpoline: Spectre varyant 2 için Retpoline azaltma (dolaylı dallar)
  • retpoline_amd: AMD Retpoline hafifletme
  • intel_ppin: Intel İşlemci Envanter Numarası
  • avx512_4vnniw: AVX-512 Yapay Sinir Ağı Talimatları
  • avx512_4fmaps: AVX-512 Çarpma Birikimi
  • mba: Bellek Bant Genişliği Tahsisi
  • rsb_ctxsw: RSB'yi bağlam anahtarlarında doldur

Sanallaştırma bayrakları: Linux tanımlı

  • tpr_shadow: Intel TPR Gölge
  • vnmi: Intel Sanal NMI
  • flexpriority: Intel FlexPriority
  • ept: Intel Genişletilmiş Sayfa Tablosu
  • vpid: Intel Sanal İşlemci Kimliği
  • vmmcall: tercih VMMCALLetVMCALL

Intel tanımlı CPU özellikleri, CPUID seviyesi 0x00000007: 0 (ebx)

Genişletilmiş durum özellikleri, CPUID seviyesi 0x0000000d: 1 (eax)

  • xsaveopt: Optimize edilmiş XSAVE
  • xsavec: XSAVEC
  • xgetbv1: XGETBVECX = 1 ile
  • xsaves: XSAVES/XRSTORS

Intel tanımlı CPU QoS alt yaprağı, CPUID düzeyi 0x0000000F: 0 (edx)

  • cqm_llc: LLC QoS

Intel tanımlı CPU QoS alt yaprağı, CPUID düzeyi 0x0000000F: 1 (edx)

  • cqm_occup_llc: LLC doluluk takibi
  • cqm_mbm_total: LLC toplam MBM izleme
  • cqm_mbm_local: LLC yerel MBM izleme

AMD tanımlı CPU özellikleri, CPUID seviyesi 0x80000008 (ebx)

  • clzero: CLZEROtalimat
  • irperf: talimatlar emekli performans sayacı
  • xsaveerptr: FP hata işaretleyicilerini her zaman kaydet / geri yükle

Termal ve Güç Yönetimi yaprağı, CPUID seviyesi 0x00000006 (eax)

  • dtherm(önceden dts): dijital termal sensör
  • ida: Intel Dinamik Hızlandırma
  • arat: Her Zaman Çalışan APIC Zamanlayıcısı
  • pln: Intel Güç Sınırı Bildirimi
  • pts: Intel Paket Termal Durumu
  • hwp: Intel Donanım P-durumları
  • hwp_notify: HWP bildirimi
  • hwp_act_window: HWP Etkinlik Penceresi
  • hwp_epp: HWP Enerji Performansı Tercihi
  • hwp_pkg_req: HWP paket düzeyinde istek

AMD SVM Özellik Kimliği, CPUID düzeyi 0x8000000a (edx)

  • npt: AMD İç içe Sayfa Tablosu desteği
  • lbrv: AMD LBR Sanallaştırma desteği
  • svm_lock: AMD SVM, MSR kilitleme
  • nrip_save: AMD SVM next_rip kaydet
  • tsc_scale: AMD TSC ölçeklendirme desteği
  • vmcb_clean: AMD VMCB temiz bit desteği
  • flushbyasid: AMD ASID desteği
  • decodeassists: AMD Kod Çözme desteği
  • pausefilter: AMD filtreli duraklatma durdurması
  • pfthreshold: AMD duraklatma filtresi eşiği
  • avic: Sanal Kesme Denetleyicisi
  • vmsave_vmload: Sanal VMSAVE VMLOAD
  • vgif: Sanal GIF

Intel tanımlı CPU özellikleri, CPUID seviyesi 0x00000007: 0 (ecx)

  • avx512vbmi: AVX512 Vector Bit Manipülasyon talimatları
  • umip: Kullanıcı Modu Öğretim Koruması
  • pku: Kullanıcı alanı için koruma anahtarları
  • ospke: İşletim Sistemi Koruma Anahtarları Etkinleştir
  • avx512_vbmi2: Ek AVX512 Vektör Bit Manipülasyon talimatları
  • gfni: Galois Field Yeni Talimatlar
  • vaes: Vektör AES
  • vpclmulqdq: Aktarmasız Çarpma Çift Quadword
  • avx512_vnni: Vektör Sinir Ağı Talimatları
  • avx512_bitalg: VPOPCNT [B, W] ve VPSHUF-BITQMB talimatları
  • avx512_vpopcntdq: DW / QW vektörleri için POPCNT
  • la57: 5 düzeyli sayfa tabloları
  • rdpid: RDPID talimatı

AMD tanımlı CPU özellikleri, CPUID seviyesi 0x80000007 (ebx)

  • overflow_recov: MCA taşması kurtarma desteği
  • succor: düzeltilemez hata tutma ve kurtarma
  • smca: Ölçeklenebilir MCA

Algılanan CPU hataları (Linux-tanımlı)

  • 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: Kötü yerel APIC aka 11AP
  • fxsave_leak: FXSAVE FOP / FIP / FOP'u sızdırıyor
  • clflush_monitor: AAI65, MONITOR'dan önce CLFLUSH gerekir
  • sysret_ss_attrs: SYSRET SS ATT'leri düzeltmiyor
  • espfix: "" IRET to 16-bit SS, ESP / RSP'nin yüksek bitlerini bozuyor
  • null_seg: Seçiciyi boşaltma tabanı korur
  • swapgs_fence: GS'ye giriş depozitsiz SWAPGS
  • monitor: Uzak CPU'yu uyandırmak için IPI gerekli
  • amd_e400: CPU Erratum 400'den etkilenenler arasında
  • cpu_meltdown: CPU çöküş saldırısından etkilenir ve çekirdek sayfa tablosu yalıtımı gerektirir
  • spectre_v1: CPU şartlı dallarla Spectre varyant 1 saldırısından etkilenir
  • spectre_v2: CPU dolaylı dalları ile Spectre varyant 2 saldırı etkilenir
  • spec_store_bypass: İşlemci Spekülatif Mağaza Baypas güvenlik açığından (Spectre varyant 4) etkilenir .

PS Bu liste arch/x86/include/asm/cpufeatures.hçekirdek kaynağından alınmıştır. Bayraklar kaynak koduyla aynı sırada listelenmiştir. Lütfen eksikken özellikler açıklamalarına bağlantılar ekleyerek, ifade edilmeyen adları olan özelliklerin kısa bir açıklamasını yazarak ve listeyi yeni çekirdek sürümleri için güncelleyerek yardım edin. Şu anki liste Linux 4.15'ten ve bazı eklemelerden.


1
Bilgilendirici bir soru ve özetlenmiş ve ayrıntılı cevabı için @Gilles ve editörlere teşekkür ederiz. Şimdi, Intel işlemciler için örneğin, NixCraft alınan aşağıdaki Normalde kullandığınız işlemci yetenekleri kontrol etmek: $ egrep -wo ^flags|vmx|ept|vpid|npt|tpr_shadow|flexpriority|vnmi|lm|aes' /proc/cpuinfo --color | sort -u. Ayrıca CLI / GUI mükemmel i-nex var .
tuk0z

Açıklamaların ve bağlantıların olağanüstü koleksiyonu; katkı yapan herkese teşekkür ederiz.
Paul Gear

Hata verileri nereden geldi? Cpufeatures.h dosyasında görünmüyor.
Drazisil

@Drazisil Hatırladığım kadarıyla tüm girişleri belirtilen sürümünden cpufeatures.h. Tanımlar, birinin bunu yapma çabasını gösterdiği yerlerde onları daha anlaşılır ve daha bilgilendirici hale getirmek için düzenlenmiştir.
Gilles

@Gilles Bu böcek hariç herkes için durum gibi görünüyor. featuresBunları bir kenara koyup onları o dosyada göremiyorum.
Drazisil

71

KOL

ARM işlemcilerde features:hatta birkaç özellik belirtilmiştir . Bir silikon üreticisine veya çip üzerindeki sisteme özgü özellikler yerine, yalnızca ARM mimarisiyle doğrudan ilgili olan özellikler söz konusudur.

Özellikler CPU kimliğine read_cpuid()bakmak ve özellikleri bir bayrak maskesi olarak ifade edilen derleme zamanında bilinen işlemci tipi tanımlarına bakmaktan elde edilir HWCAP_xxx. Karşılık gelen dizeler hwcap_strvbsetup.c . İçindedir .

Aşağıdaki listede, ARMv6 SIMD talimatlarını ve veri tiplerini tanıttı. ARMv7, Gelişmiş SIMD talimatları ve veri türleri sağlamıştır. 32 bit ARM makinelerde, neonGelişmiş SIMD sinyalleri; ise asimd64 bitlik kol makinelerde sinyaller Gelişmiş SIMD.

Bunun ötesinde, Hardware:çizgi işlemci modelini gösterir. Modeline bağlı olarak, altında başka dosyalara diğer bilgileri olabilir /procveya /sysveya önyükleme zamanı çekirdek günlüğü mesajlarında. Ne yazık ki, her ARM CPU üreticisinin, varsa işlemci özelliklerini bildirme yöntemi vardır.



11

x86

4.1.3 x86 ve Intel kılavuzunda kendiniz bulun

arch/x86/include/asm/cpufeature.h tam listeyi içerir.

Tanım değerleri aşağıdaki gibidir:

X*32 + Y

Örneğin:

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

CPUID'den çıkarılan özellik bayrakları, içinde saklanır:

  • __u32 x86_capability[NCAPINTS + NBUGINTS]; alan
  • nın-nin struct cpuinfo_x86 boot_cpu_data
  • tanımlı x86/kernel/setup.c

hangi __initfonksiyonlardan başlatılır .

Her x86_capabilitydizi elemanının nereden geldiği:

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

Notlar:

Sonuç:

  • girişlerin çoğu doğrudan CPUID çıkış kayıtlarından gelir ve şöyle bir common.cşey tarafından ayarlanır :

    c->x86_capability[0] = edx;
    

    Bunları toplu olarak CPUID için Intel el kitabında bulmak kolaydır.

  • Diğerleri kaynak boyunca dağınıktır ve azar azar ayarlanır set_cpu_cap.

    Onları bulmak için git grep X86_FEATURE_XXXiçini kullanın arch/x86.

    Genellikle çevreleyen koddan hangi CPUID biti karşılık geldiğini anlayabilirsiniz.

Diğer eğlenceli gerçekler

  • Bayraklar aslında şu arch/x86/kernel/cpu/proc.ckodla basılıyor :

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

    Nerede:

    • cpu_has özellik için ana kontrol yapar.
    • x86_cap_flags[i] Her bayraklara karşılık gelen dizeleri içerir.

    Bu, procsistem kurulumuna geri arama olarak iletilir . Giriş noktası şu anda fs/proc/cpuinfo.c.

  • x86_cap_flagsdizeleri arch/x86/kernel/cpu/mkcapflags.hdoğrudan arch/x86/include/asm/cpufeature.h"ayrıştırma" ile üretilir sed...

    Çıktı arch/x86/kernel/cpu/capflags.c, build dizinine gider ve elde edilen dizi şöyle görünür:

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

    Örneğin X86_FEATURE_FPU, dizgeye "fpu"ve benzerlerine karşılık gelir .

  • cpu_has kod ile iki duruma bölünür:

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

    Onlar:

    • __builtin_constant_p(bit) && REQUIRED_MASK_BIT_SET(bit): Çekirdeğin çalışması için bayrak gereklidir.

      Bu, içindeki required-features.hyorumlarla belirlenir:

      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!
      

      Derleme zamanında bilinenler (çekirdek gereksinimleri), başlangıçta zaten kontrol edildiklerinden, derleme zamanında biliniyorsa, çek derleme zamanında çözülebilir bit.

      Böylece, derleme zaman sabiti __builtin_constant_p(bit)olup olmadığını kontrol eder bit.

    • test_cpu_cap: Bu CPUID, struct cpuinfo_x86 boot_cpu_dataglobal veri kullanır


3
Kısaltmadan daha uzun bir isme nasıl gideceğinizi açıkladınız, ancak çoğu zaman bu daha uzun adlar çok daha anlaşılır değildir ve cpuidbunu daha uygun bir şekilde yapar. Bu soruyu isimlerin belgelendiği bir yer olmasını istedim.
Gilles,

@Gilles, bu daha çok tabloları yapmak isteyenler için / masadaki özelliklerini bulamıyor, benim gibi :-) :-) Ama yine de, çoğu durumda, kaynağın doğru noktasına baktıktan sonra, CPUID'nin haritası derhal.
Ciro Santilli,

10

Ya da alternatif olarak cpuidprogramı kullanabilirsiniz , debian deposunda olmalıdır. İşlemcinizle ilgili her türlü bilgiyi bazı açıklamalarla birlikte kullanır, böylece bu belirsiz bayrakları alamazsınız.


cpuidkısaltmaları genişletir. Gerçekten çıktı açıklamalarını çağırmazdım . Bunun ht“Hyper Threading” anlamına geldiğini bilmek bir dereceye kadar açıklar, ancak bunun mmx“MMX komut seti” anlamına geldiğini bilmek , çok fazla değil ve bu mcada “Makine Kontrol Mimarisi” anlamına gelmez .
Gilles

6
@Gilles ... ve henüz "Makine Kontrol Mimarisi" kesinlikle "mca" dan daha iyi bir Google sorgusu;)
Alois Mahdal
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.