web-dev-qa-db-ja.com

/ proc / cpuinfoのフラグはどういう意味ですか?

自分のプロセッサに特定の機能があるかどうかを確認するにはどうすればよいですか? (64ビット命令セット、ハードウェア支援仮想化、暗号化アクセラレータなど)ファイル/proc/cpuinfoにはこの情報がflags行に含まれていますが、これらすべての不可解な略語は何を意味しているのですか?

たとえば、次の/proc/cpuinfo、64ビットCPUはありますか?ハードウェア仮想化はありますか?

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

x86

(32ビットa.k.a. i386–i686および64ビットa.k.a. AMD64。つまり、ワークステーション、ラップトップ、またはサーバー。)

FAQ:私は持っていますか…

  • 64ビット(x86_64/AMD64/Intel64)? lm
  • ハードウェア仮想化(VMX/AMD-V)? vmx(Intel)、svm(AMD)
  • 加速AES(AES-NI)? aes
  • TXT(TPM)? smx
  • ハイパーバイザー(そのように発表されました)? hypervisor

他のほとんどの機能は、コンパイラまたはカーネルの作成者のみが関心を持っています。

すべてのフラグ

完全なリストは、カーネルソースのファイル Arch/x86/include/asm/cpufeatures.h にあります。

Intel定義のCPU機能、CPUIDレベル0x00000001(edx)

Wikipedia および Intel Advanced Vector Extensions Programming Referenceの表2-27も参照してください

AMD定義のCPU機能、CPUIDレベル0x80000001

Wikipedia および Intel Advanced Vector Extensions Programming Referenceの表2-23も参照してください

トランスメタ定義のCPU機能、CPUIDレベル0x80860001

  • recovery:リカバリーモードのCPU
  • longrun:ロングラン電力制御
  • lrti:LongRunテーブルインターフェイス

その他の機能、Linux定義のマッピング

  • cxmmx:Cyrix MMX拡張機能
  • k6_mtrr:AMD K6非標準MTRR
  • cyrix_arr:Cyrix ARR(= MTRR)
  • centaur_mcr:ケンタウロスMCR(= MTRR)
  • constant_tsc:TSCティックは一定のレートで
  • up:UPで実行されているSMPカーネル
  • art:常時実行タイマー
  • Arch_perfmon:Intel Architectural PerfMon
  • pebs:正確なイベントベースのサンプリング
  • bts:ブランチトレースストア
  • rep_good:担当者のマイクロコードが適切に機能します
  • acc_powerAMD累積電力メカニズム
  • nopl:NOPL(0F 1F)命令
  • xtopology:CPUトポロジ列挙型拡張
  • tsc_reliable[〜#〜] tsc [〜#〜] は信頼できることがわかっています
  • nonstop_tsc[〜#〜] tsc [〜#〜] がC状態で停止しない
  • cpuid:CPUにはCPUID命令自体があります
  • extd_apicid:拡張APICID(8ビット)
  • AMD_dcm:マルチノードプロセッサ
  • aperfmperf:APERFMPERF
  • eagerfpu:遅延のないFPU復元
  • nonstop_tsc_s3[〜#〜] tsc [〜#〜] がS3状態で停止しない
  • tsc_known_freq[〜#〜] tsc [〜#〜] には既知の頻度があります
  • mce_recovery:CPUには回復可能なマシンチェックがあります

Intel定義のCPU機能、CPUIDレベル0x00000001(ecx)

Wikipedia および Intel Advanced Vector Extensions Programming Referenceの表2-26も参照してください

VIA/Cyrix/Centaur定義のCPU機能、CPUIDレベル0xC0000001

  • rngRandom Number Generator present(xstore)
  • rng_enRandom Number Generator 有効
  • ace:CPU暗号化(xcrypt)
  • ace_en:CPU暗号化が有効
  • ace2:高度な暗号化エンジンv2
  • ace2_en:ACE v2が有効
  • phe:PadLockハッシュエンジン
  • phe_en:PHEが有効
  • pmm:PadLock Montgomery Multiplier
  • pmm_en:PMMが有効

より拡張されたAMDフラグ:CPUIDレベル0x80000001、ecx

  • lahf_lm:ロングモードでフラグからのAHの読み込み(LAHF)とフラグへのAHの格納(SAHF)
  • cmp_legacy:はいの場合、ハイパースレッディングは無効です
  • svm:「安全な仮想マシン」: AMD-V
  • extapic:拡張APICスペース
  • cr8_legacy:32ビットモードのCR8
  • abmAdvanced Bit Manipulation
  • sse4aSSE-4A
  • misalignsse:一部のレガシーSSE命令がアラインされていないデータを操作するときに一般保護例外(#GP)が生成されるかどうかを示します。CR0およびアラインメントチェックビットにも依存します
  • 3dnowprefetch:3DNowプリフェッチ命令
  • osvw:は OS Visible Workaround を示します。これにより、OSはプロセッサーのエラッタを回避できます。
  • ibs命令ベースのサンプリング
  • xop拡張AVX命令
  • skinit:SKINIT/STGI命令
  • wdtウォッチドッグタイマー
  • lwp軽量プロファイリング
  • fma44オペランドMAC命令
  • tce:翻訳キャッシュ拡張
  • nodeid_msr:ノードID MSR
  • tbm後続ビット操作
  • topoext:トポロジー拡張CPUIDリーフ
  • perfctr_core:コアパフォーマンスカウンター拡張
  • perfctr_nb:NBパフォーマンスカウンター拡張
  • bpext:データブレークポイント拡張
  • ptsc:パフォーマンスタイムスタンプカウンター
  • perfctr_l2:L2パフォーマンスカウンター拡張
  • mwaitxMWAIT拡張(MONITORX/MWAITX

補助フラグ:Linux定義-さまざまなCPUIDレベルに散在する機能用

  • ring3mwait:Ring 3 MONITOR/MWAIT
  • cpuid_fault:Intel CPUIDエラー
  • cpb:AMD Core Performance Boost
  • epb:IA32_ENERGY_PERF_BIASのサポート
  • cat_l3:キャッシュ割り当てテクノロジーL3
  • cat_l2:キャッシュ割り当てテクノロジーL2
  • cdp_l3:コードとデータの優先順位付けL3
  • invpcid_single:効果的にinvpcidおよびCR4.PCIDE=1
  • hw_pstate:AMD HW-PState
  • proc_feedback:AMD ProcFeedbackInterface
  • sme:AMD Secure Memory Encryption
  • ptiカーネルページテーブルの分離 (Kaiser)
  • retpolineRetpoline 緩和策 Spectre バリアント2(間接分岐)
  • retpoline_AMD:AMD Retpolineによる緩和
  • intel_ppin:インテルプロセッサーインベントリー番号
  • avx512_4vnniw:AVX-512ニューラルネットワーク命令
  • avx512_4fmaps:AVX-512乗算累積単精度
  • mba:メモリ帯域幅の割り当て
  • rsb_ctxsw:コンテキストスイッチのRSBを埋める

仮想化フラグ:Linux定義

  • tpr_shadow:Intel TPRシャドウ
  • vnmi:Intel Virtual NMI
  • flexpriority:Intel FlexPriority
  • ept:Intel拡張ページテーブル
  • vpid:インテル仮想プロセッサーID
  • vmmcallVMMCALLよりVMCALLを優先

Intel定義のCPU機能、CPUIDレベル0x00000007:0(ebx)

拡張状態機能、CPUIDレベル0x0000000d:1(eax)

  • xsaveopt:最適化されたXSAVE
  • xsavecXSAVEC
  • xgetbv1:ECX = 1のXGETBV
  • xsavesXSAVES/XRSTORS

Intel定義のCPU QoSサブリーフ、CPUIDレベル0x0000000F:0(edx)

  • cqm_llc:LLC QoS

Intel定義のCPU QoSサブリーフ、CPUIDレベル0x0000000F:1(edx)

  • cqm_occup_llc:LLC占有監視
  • cqm_mbm_total:LLCの合計MBM監視
  • cqm_mbm_local:LLCローカルMBMモニタリング

AMD定義のCPU機能、CPUIDレベル0x80000008(ebx)

  • clzeroCLZERO命令
  • irperf:廃止された命令のパフォーマンスカウンター
  • xsaveerptr:常に保存/復元FPエラーポインタ

熱および電力管理リーフ、CPUIDレベル0x00000006(eax)

  • dtherm(以前のdts):デジタル温度センサー
  • ida:Intel Dynamic Acceleration
  • arat:常に実行中のAPICタイマー
  • pln:Intel Power Limit Notification
  • pts:インテルパッケージの温度ステータス
  • hwp:Intel Hardware P-states
  • hwp_notify:HWP通知
  • hwp_act_window:HWPアクティビティウィンドウ
  • hwp_epp:HWPエネルギーパフォーマンス設定
  • hwp_pkg_req:HWPパッケージレベルのリクエスト

AMD SVM機能識別、CPUIDレベル0x8000000a(edx)

  • npt:AMD Nested Page Table support
  • lbrv:AMD LBR仮想化サポート
  • svm_lock:AMD SVMロックMSR
  • nrip_save:AMD SVM next_rip save
  • tsc_scale:AMD TSCスケーリングサポート
  • vmcb_clean:AMD VMCBクリーンビットサポート
  • flushbyasid:AMD flush-by-ASIDサポート
  • decodeassists:AMDデコードアシストのサポート
  • pausefilter:AMDフィルターによる一時停止代行受信
  • pfthreshold:AMD一時停止フィルターしきい値
  • avic:仮想割り込みコントローラー
  • vmsave_vmload:仮想VMSAVE VMLOAD
  • vgif:仮想GIF

Intel定義のCPU機能、CPUIDレベル0x00000007:0(ecx)

  • avx512vbmi:AVX512ベクトルビット操作命令
  • umip:ユーザーモードの命令保護
  • pku:ユーザースペースの保護キー
  • ospke:OS保護キーの有効化
  • avx512_vbmi2:追加のAVX512ベクトルビット操作命令
  • gfni:ガロア体の新しい命令
  • vaes:Vector AES
  • vpclmulqdq:キャリーレス乗算ダブルクワッドワード
  • avx512_vnni:Vector Neural Network Instructions
  • avx512_bitalg:VPOPCNT [B、W]およびVPSHUF-BITQMB命令
  • avx512_vpopcntdq:DW/QWのベクトルのPOPCNT
  • la57:5レベルのページテーブル
  • rdpid:RDPID命令

AMD定義のCPU機能、CPUIDレベル0x80000007(ebx)

  • overflow_recov:MCAオーバーフロー回復サポート
  • succor:修正不可能なエラーの封じ込めと復旧
  • smca:スケーラブルMCA

検出されたCPUバグ(Linux定義)

  • f00fIntel F00F
  • fdivCPU FDIV
  • comaCyrix 6x86コマ
  • AMD_tlb_mmatchtlb_mmatch AMD Erratum 383
  • AMD_apic_c1eapic_c1e AMD Erratum 400
  • 11ap:悪いローカルAPIC(別名11AP)
  • fxsave_leak:FXSAVEがFOP/FIP/FOPをリークする
  • clflush_monitor:MONITORの前にAAI65、CLFLUSHが必要
  • sysret_ss_attrs:SYSRETはSS属性を修正しません
  • espfix: "" 16ビットSSへのIRETはESP/RSP上位ビットを破壊します
  • null_seg:セレクターをnullにするとベースが保持されます
  • swapgs_fence:GSで入力依存なしのSWAPGS
  • monitor:リモートCPUを起動するために必要なIPI
  • AMD_e400:CPUはErratum 400の影響を受けます
  • cpu_meltdown:CPUは メルトダウン攻撃 の影響を受け、カーネルページテーブルの分離が必要です
  • spectre_v1:CPUは条件付きブランチによる Spectre バリアント1攻撃の影響を受けます
  • spectre_v2:CPUは、間接分岐による Spectre バリアント2攻撃の影響を受けます
  • spec_store_bypass:CPUは Speculative Store Bypass の脆弱性の影響を受けます(Spectreバリアント4)。

追伸このリストは、カーネルソースのArch/x86/include/asm/cpufeatures.hに基づいています。フラグは、ソースコードと同じ順序でリストされます。不足している機能の説明へのリンクを追加したり、表現力のない名前を持つ機能の簡単な説明を書き込んだり、新しいカーネルバージョンのリストを更新したりしてください。現在のリストは Linux 4.15 にいくつかの追加を加えたものです。

ARM

ARM=プロセッサでは、いくつかの機能が_features:_行に記載されています。ARMアーキテクチャに直接関連する機能のみが記載されており、機能は記載されていませんシリコンメーカーまたはシステムオンチップに固有。

機能は、CPU IDを read_cpuid() で検索し、機能が表現されるコンパイル時に既知の プロセッサタイプ定義 で検索することで取得されます。 _HWCAP_xxx_ フラグのマスクとして。対応する文字列は _hwcap_str_などの_setup.c_ にあります。

以下のリストで、ARMv6はSIMD命令とデータ型を導入しました。 ARMv7はAdvanced SIMD命令とデータ型を提供しました。 32ビットARM=マシンでは、neonはAdvanced SIMDを示し、asimdは64ビットARMマシン上のAdvanced SIMDを示します。

さらに、_Hardware:_行はプロセッサモデルを示します。モデルによっては、_/proc_または_/sys_の下の他のファイル、またはブート時のカーネルログメッセージに他の情報がある場合があります。残念ながら、各ARM CPUメーカーは、プロセッサの機能を報告する独自の方法を持っています(ある場合)。

x86

4.1.3 x86とIntelのマニュアルでご確認ください

_Arch/x86/include/asm/cpufeature.h_ 完全なリストが含まれます。

定義値のタイプは次のとおりです。

_X*32 + Y
_

例えば。:

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

CPUIDから抽出された機能フラグは、以下の中に保存されます。

  • ___u32 x86_capability[NCAPINTS + NBUGINTS];_フィールド
  • of _struct cpuinfo_x86 boot_cpu_data_
  • _x86/kernel/setup.c_で定義

___init_関数によって初期化されます。

各_x86_capability_配列要素は次の場所から取得されます。

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

ノート:

結論:

  • ほとんどのエントリはCPUID出力レジスタから直接取得され、次のようなものによって_common.c_に設定されます。

    _c->x86_capability[0] = edx;
    _

    これらは、CPUIDに関するIntelのマニュアルで簡単に見つけることができます。

  • その他はソース全体に散在し、_set_cpu_cap_で少しずつ設定されます。

    それらを見つけるには、_git grep X86_FEATURE_XXX_内で_Arch/x86_を使用します。

    通常、周囲のコードから、対応するCPUIDビットを推測できます。

その他の楽しい事実

  • フラグは実際には_Arch/x86/kernel/cpu/proc.c_に次のコードで出力されます:

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

    どこ:

    • _cpu_has_は、機能のメインチェックを行います。
    • _x86_cap_flags[i]_には、各フラグに対応する文字列が含まれています。

    これは、procシステム設定へのコールバックとして渡されます。エントリポイントは_fs/proc/cpuinfo.c_にあります。

  • _x86_cap_flags_文字列は、_Arch/x86/kernel/cpu/mkcapflags.h_によって_Arch/x86/include/asm/cpufeature.h_から直接生成され、sedで「解析」されます...

    出力はビルドディレクトリの_Arch/x86/kernel/cpu/capflags.c_に送られ、結果の配列は次のようになります。

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

    たとえば、_X86_FEATURE_FPU_は文字列_"fpu"_に対応します。

  • _cpu_has_は、コードで2つのケースに分類されます。

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

    彼らです:

    • __builtin_constant_p(bit) && REQUIRED_MASK_BIT_SET(bit):カーネルを実行するにはフラグが必要です。

      これは、コメントする_required-features.h_内のデータによって決まります。

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

      これらはコンパイル時に既知であり(カーネル要件)、起動時に既にチェックされているため、bitがコンパイル時にわかっている場合、コンパイル時にチェックを解決できます。

      したがって、__builtin_constant_p(bit)は、bitがコンパイル時定数であるかどうかをチェックします。

    • _test_cpu_cap_:_struct cpuinfo_x86 boot_cpu_data_グローバルからのCPUIDデータを使い果たします

または、代わりにcpuidプログラムを使用できます。これは、debianリポジトリにある必要があります。 CPUに関するすべての可能な情報をいくつかの説明とともにダンプします。そのため、これらのあいまいなフラグを取得しません。

10
hurufu

一番良い答えは「完全なリストはカーネルソースのファイル Arch/x86/include/asm/cpufeatures.h 」にあります。それとインターネット/プロセッサのマニュアルを使用して、各フラグの意味を理解してください。

Lscpuの出力を表示し、このマシンからのlscpu/flagsをVM Host and VMで実行されています。Openstackqemu-kvmは、ここで実行されている仮想化サーバーです。

  • CPU:24対22

    VMホスト上の24個のCPU。合計で24個のCPU。VMでは、22個のCPUが利用可能であることがわかります。

  • スレッド/コア/ソケット/ NUMAは異なります。 (下記参照)

  • モデル、モデル名、ステッピング、CPU MHz、L2キャッシュサイズが異なるものとして表示されます。 (以下を参照)

    ホスト:モデル:45モデル名:Intel(R)Xeon(R)CPU E5-2640 0 @ 2.50GHz

    vMの場合:モデル:42モデル名:Intel Xeon E312xx(Sandy Bridge、IBRSアップデート)

  • フラグ

    • vMに追加の2つのフラグ:

    • vMに31個のフラグがありません:

      • dts:Debug Store(デバッグおよびプロファイリングの指示のためのバッファー)
      • acpi:MSR経由のACPI(温度監視とクロック速度変調) https://wiki.osdev.org/ACPI ACPI(高度な構成と電源インターフェイス)は、PCの電源管理と構成の標準です
      • ht:ハイパースレッディングおよび/またはマルチコア
      • tm:自動クロック制御(熱モニター)
      • pbe:Pending Break Enable(PBE#pin)wakeup support
      • Arch_perfmon:Intel Architectural PerfMon
      • pebs:正確なイベントベースのサンプリング
      • bts:ブランチトレースストア
      • nonstop_tsc:C状態でTSCが停止しないTSC = Timestamp Counter(Intel register) https://wiki.osdev.org/TSC
      • aperfmperf:APERFおよびMPERFはMSRレジスタです。「APERFおよびMPERFは、現在のCPU周波数に関するフィードバックを提供できるMSRレジスタです。」
      • dtes64:64ビットのデバッグストア
      • monitor:Monitor/Mwaitのサポート(Intel SSE3の補足)
      • ds_cpl:CPL Qual。デバッグストア-CPLは現在の特権レベル(CSレジスタのビット)
      • vmx:ハードウェア仮想化:Intel VMX
      • smx:安全モード:TXT(Trusted Execution Technology)(TPM(Trusted Platform Module)サポート)
      • est:拡張されたSpeedStep
      • tm2:サーマルモニター2
      • xtpr:タスク優先度メッセージの送信
      • pdcm:パフォーマンス機能
      • dca:直接キャッシュアクセス
      • epb:IA32_ENERGY_PERF_BIASのサポート
      • tpr_shadow:Intel TPRシャドウTPR =タスク優先度レジスタ
      • vnmi:Intel Virtual NMI https://wiki.osdev.org/NMI (マスクできない割り込み)
      • flexpriority:Intel FlexPriority Intel Virtualization Technology
      • ept:Intel拡張ページテーブル
      • vpid:Intel仮想プロセッサID
      • dtherm:(以前のdts)デジタル熱センサー
      • ida:Intel Dynamic Acceleration
      • pln:Intel電力制限通知
      • pts:Intelパッケージの温度ステータス
      • flush_l1d:L1(レベル1)D(データ)キャッシュをフラッシュします

lscpuフル出力:

[root@Host ~]# lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 24
On-line CPU(s) list: 0-23
Thread(s) per core: 2
Core(s) per socket: 6
Socket(s): 2
NUMA node(s): 2
Vendor ID: GenuineIntel
CPU family: 6
Model: 45
Model name: Intel(R) Xeon(R) CPU E5-2640 0 @ 2.50GHz
Stepping: 7
CPU MHz: 2375.000
CPU max MHz: 2500.0000
CPU min MHz: 1200.0000
BogoMIPS: 4987.53
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 15360K
NUMA node0 CPU(s): 0-5,12-17
NUMA node1 CPU(s): 6-11,18-23
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 pdpe1gb rdtscp lm constant_tsc Arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx lahf_lm epb ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid xsaveopt dtherm ida arat pln pts spec_ctrl intel_stibp flush_l1d    openstack compute-node VM

[root@VM ~]$ lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                22 
On-line CPU(s) list:   0-21
Thread(s) per core:    1
Core(s) per socket:    1
Socket(s):             22
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 42
Model name:            Intel Xeon E312xx (Sandy Bridge, IBRS update)
Stepping:              1
CPU MHz:               2493.748
BogoMIPS:              4987.49
Hypervisor vendor:     KVM
Virtualization type:   full
L1d cache:             32K
L1i cache:             32K
L2 cache:              4096K
L3 cache:              16384K
NUMA node0 CPU(s):     0-21
Flags:                 fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology eagerfpu pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx hypervisor lahf_lm ssbd ibrs ibpb stibp tsc_adjust xsaveopt arat spec_ctrl intel_stibp
1
gaoithe