แฟล็กใน / proc / cpuinfo หมายถึงอะไร


212

ฉันจะรู้ได้อย่างไรว่าโปรเซสเซอร์มีคุณสมบัติเฉพาะหรือไม่ (ชุดคำสั่ง 64 บิตการจำลองเสมือนแบบใช้ฮาร์ดแวร์ช่วยเร่งความเร็วการเข้ารหัส ฯลฯ ) ฉันรู้ว่าไฟล์/proc/cpuinfoนี้มีข้อมูลนี้อยู่ในflagsบรรทัด แต่ตัวย่อแบบเข้ารหัสลับทั้งหมดเหล่านี้มีความหมายว่าอะไร?

ตัวอย่างเช่นจากสารสกัดต่อไปนี้/proc/cpuinfoฉันมี CPU 64 บิตหรือไม่ ฉันมีการจำลองเสมือนสำหรับฮาร์ดแวร์หรือไม่

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

คำตอบ:


275

x86

(aka i386 – i686 และ 32-bit aka amd64 แบบ 64 บิตกล่าวอีกนัยหนึ่งเวิร์กสเตชันแล็ปท็อปหรือเซิร์ฟเวอร์ของคุณ)

คำถามที่พบบ่อย: ฉันมี ...

  • 64-bit (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รายชื่อเต็มอยู่ในแหล่งที่มาของเคอร์เนลในแฟ้ม

คุณสมบัติ CPU ที่กำหนดโดย Intel ระดับ CPUID 0x00000001 (edx)

ดูเพิ่มเติมWikipediaและตาราง 2-27 ในการอ้างอิงการเขียนโปรแกรมส่วนขยายขั้นสูงของ Intel

คุณสมบัติ CPU ที่กำหนดโดย AMD ระดับ CPUID 0x80000001

ดูเพิ่มเติมWikipediaและตาราง 2-23 ในการอ้างอิงการเขียนโปรแกรมส่วนขยายขั้นสูงของ Intel ขั้นสูง

คุณสมบัติของ CPU ที่กำหนดโดย Transmeta ระดับ CPUID 0x80860001

  • recovery: CPU ในโหมดการกู้คืน
  • longrun: การควบคุมพลังงาน Longrun
  • lrti: อินเตอร์เฟส LongRun ของตาราง

คุณสมบัติอื่น ๆ การแมปที่กำหนดโดย Linux

  • cxmmx: Cyrix MMX extensions
  • k6_mtrr: AMD K6 MTRR ที่ไม่เป็นมาตรฐาน
  • cyrix_arr: Cyrix ARRs (= MTRRs)
  • centaur_mcr: Centaur MCRs (= MTRRs)
  • constant_tsc: TSC ทำเครื่องหมายที่อัตราคงที่
  • up: SMP kernel ทำงานบน UP
  • art: ตั้งเวลาทำงานตลอดเวลา
  • arch_perfmon: Intel Architectural PerfMon
  • pebs: การสุ่มตัวอย่างตามเหตุการณ์ที่แม่นยำ
  • bts: ร้านค้าติดตามสาขา
  • rep_good: ตัวแทน microcode ทำงานได้ดี
  • acc_power: AMD สะสมกลไกพลังงาน
  • nopl: คำแนะนำ NOPL (0F 1F)
  • xtopology: cpu topology enum extensions
  • 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 มีการตรวจสอบเครื่องที่สามารถกู้คืนได้

คุณสมบัติ CPU ที่กำหนดโดย Intel ระดับ CPUID 0x00000001 (ecx)

ดูเพิ่มเติมWikipediaและตาราง 2-26 ในการอ้างอิงการเขียนโปรแกรมส่วนขยายขั้นสูงของ Intel ขั้นสูง

คุณสมบัติ CPU ที่กำหนดโดย VIA / Cyrix / Centaur, CPUID ระดับ 0xC0000001

  • rng: การสร้างตัวเลขสุ่ม (xstore)
  • rng_en: เปิดใช้งานตัวสร้างตัวเลขสุ่ม
  • ace: crypto บน CPU (xcrypt)
  • ace_en: เปิดใช้งาน crypto บน CPU
  • ace2: Advanced Cryptography Engine v2
  • ace2_en: เปิดใช้งาน ACE v2
  • phe: PadLock Hash Engine
  • phe_en: เปิดใช้งาน PHE
  • pmm: PadLock Montgomery Multiplier
  • pmm_en: เปิดใช้งาน PMM

สถานะการขยายเพิ่มเติมของ AMD: CPUID ระดับ 0x80000001, ecx

  • lahf_lm: โหลด AH จากธง (LAHF) และเก็บ AH ลงในธง (SAHF) ในโหมดยาว
  • cmp_legacy: ถ้าใช่ HyperThreading ไม่ถูกต้อง
  • svm:“ Secure virtual machine”: AMD-V
  • extapic: ขยายพื้นที่ APIC
  • cr8_legacy: CR8 ในโหมด 32 บิต
  • abm: การจัดการ Bit ขั้นสูง
  • sse4a: SSE-4A
  • misalignsse: ระบุว่ามีการสร้างข้อยกเว้นการป้องกันทั่วไป (#GP) หรือไม่เมื่อคำสั่ง SSE ดั้งเดิมทำงานกับข้อมูลที่ไม่ได้จัดแนว ยังขึ้นอยู่กับ CR0 และบิตการตรวจสอบการจัดตำแหน่ง
  • 3dnowprefetch: คำแนะนำการดึง 3DNow ล่วงหน้า
  • osvw: ระบุOS Visible Workaroundซึ่งทำให้ระบบปฏิบัติการสามารถแก้ไขข้อผิดพลาดของตัวประมวลผลได้
  • ibs: การสุ่มตัวอย่างตามคำสั่ง
  • xop: คำแนะนำ AVX แบบขยาย
  • skinit: คำแนะนำ SKINIT / STGI
  • wdt: ตัวจับเวลาจ้องจับผิด
  • lwp: การทำโปรไฟล์น้ำหนักเบา
  • fma4: 4 คำสั่งในการใช้งาน MAC
  • tce: ส่วนขยายแคชการแปล
  • nodeid_msr: NodeId MSR
  • tbm: การจัดการบิตต่อท้าย
  • topoext: ทอพอโลยีส่วนขยาย CPUID leafs
  • perfctr_core: ส่วนขยายตัวนับประสิทธิภาพหลัก
  • perfctr_nb: NB Performance Counter Extensions
  • bpext: ส่วนขยายจุดพักข้อมูล
  • ptsc: ตัวนับเวลาแสดงประสิทธิภาพ
  • perfctr_l2: ส่วนขยายตัวนับประสิทธิภาพ L2
  • mwaitx: MWAITส่วนขยาย ( MONITORX/ MWAITX)

ค่าสถานะเสริม: กำหนด Linux - สำหรับคุณสมบัติที่กระจัดกระจายในระดับ CPUID ต่างๆ

  • ring3mwait: แหวน 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
  • pti: การแยกตารางเคอร์เนลหน้า (ไกเซอร์)
  • retpoline: RetpolineบรรเทาผลกระทบสำหรับตัวแปรSpectre 2 (สาขาทางอ้อม)
  • retpoline_amd: AMD Retpoline ลดผลกระทบ
  • intel_ppin: หมายเลขโปรเซสเซอร์ของ Intel
  • avx512_4vnniw: คำแนะนำสำหรับเครือข่ายประสาท AVX-512
  • avx512_4fmaps: AVX-512 ทวีคูณการสะสมความแม่นยำเดี่ยว
  • mba: การจัดสรรแบนด์วิดท์หน่วยความจำ
  • rsb_ctxsw: กรอกข้อมูล RSB บนสวิตช์บริบท

ธงการจำลองเสมือน: กำหนด Linux

  • tpr_shadow: Intel TPR Shadow
  • vnmi: Intel Virtual NMI
  • flexpriority: Intel FlexPriority
  • ept: Intel Extended Page Table
  • vpid: ID โปรเซสเซอร์เสมือนของ Intel
  • vmmcall: ชอบที่VMMCALLจะVMCALL

คุณสมบัติ CPU ที่ Intel กำหนดระดับ CPUID 0x00000007: 0 (ebx)

คุณสมบัติเพิ่มเติมของรัฐระดับ CPUID 0x0000000d: 1 (eax)

  • xsaveopt: ปรับให้เหมาะสม XSAVE
  • xsavec: XSAVEC
  • xgetbv1: XGETBVwith ECX = 1
  • xsaves: XSAVES/XRSTORS

sub-leaf CPU QoS ที่กำหนดโดย Intel, ระดับ CPUID 0x0000000F: 0 (edx)

  • cqm_llc: LLC QoS

sub-leaf CPU QoS ที่กำหนดโดย Intel, ระดับ CPUID 0x0000000F: 1 (edx)

  • cqm_occup_llc: LLC ตรวจสอบอัตราการเข้าพัก
  • cqm_mbm_total: LLC ตรวจสอบ MBM ทั้งหมด
  • cqm_mbm_local: LLC การตรวจสอบ MBM ท้องถิ่น

คุณสมบัติ CPU ที่กำหนดโดย AMD, ระดับ CPUID 0x80000008 (ebx)

  • clzero: CLZEROคำสั่ง
  • irperf: คำแนะนำยกเลิกตัวนับประสิทธิภาพ
  • xsaveerptr: พอยน์เตอร์บันทึกข้อผิดพลาด FP / บันทึกเสมอ

leaf การจัดการความร้อนและพลังงาน, CPUID ระดับ 0x00000006 (eax)

  • dtherm(ก่อนหน้านี้dts): เซ็นเซอร์ความร้อนแบบดิจิตอล
  • ida: Intel Dynamic Acceleration
  • arat: ใช้งาน APIC Timer เสมอ
  • pln: Intel Power Limit Notification
  • pts: สถานะความร้อนของแพ็คเกจของ Intel
  • hwp: ฮาร์ดแวร์ Intel P-state
  • hwp_notify: การแจ้งเตือน HWP
  • hwp_act_window: หน้าต่างกิจกรรม HWP
  • hwp_epp: การตั้งค่าประสิทธิภาพพลังงานของ HWP
  • hwp_pkg_req: คำขอระดับแพ็คเกจของ HWP

การระบุคุณสมบัติ AMD SVM, CPUID ระดับ 0x8000000a (edx)

  • npt: รองรับ AMD Nested Page Table
  • lbrv: รองรับ AMD LBR Virtualization
  • svm_lock: AMD SVM ล็อค MSR
  • nrip_save: AMD SVM next_rip บันทึก
  • tsc_scale: รองรับการปรับสเกลของ AMD
  • vmcb_clean: รองรับ AMD VMCB clean bits
  • flushbyasid: รองรับ AMD flush-by-ASID
  • decodeassists: รองรับ AMD Decode Assists
  • pausefilter: AMD หยุดการสกัดกั้นชั่วคราว
  • pfthreshold: ขีด จำกัด ตัวกรองหยุดชั่วคราวของ AMD
  • avic: Virtual Interrupt Controller
  • vmsave_vmload: Virtual VMSAVE VMLOAD
  • vgif: GIF เสมือนจริง

คุณสมบัติ CPU ที่กำหนดโดย Intel ระดับ CPUID 0x00000007: 0 (ecx)

  • avx512vbmi: คำแนะนำ AVV512 Vector Bit Manipulation
  • umip: การป้องกันการเรียนการสอนโหมดผู้ใช้
  • pku: คีย์การป้องกันสำหรับ Userspace
  • ospke: เปิดใช้งานคีย์การป้องกันระบบปฏิบัติการ
  • avx512_vbmi2: คำแนะนำเพิ่มเติมเกี่ยวกับการจัดการเวกเตอร์บิต AVX512 เพิ่มเติม
  • gfni: Galois Field คำแนะนำใหม่
  • vaes: Vector AES
  • vpclmulqdq: Quadword สองเท่าการพกพาที่น้อยลง
  • avx512_vnni: คำแนะนำเครือข่ายนิวรัลเวกเตอร์
  • avx512_bitalg: คำแนะนำ VPOPCNT [B, W] และ VPSHUF-BITQMB
  • avx512_vpopcntdq: POPCNT สำหรับเวกเตอร์ของ DW / QW
  • la57: ตารางหน้า 5 ระดับ
  • rdpid: คำสั่ง RDPID

คุณสมบัติ CPU ที่กำหนดโดย AMD, ระดับ CPUID 0x80000007 (ebx)

  • overflow_recov: การสนับสนุนการกู้คืนล้นของ MCA
  • succor: การควบคุมและกู้คืนข้อผิดพลาดที่ไม่สามารถแก้ไขได้
  • smca: MCA ที่ปรับขนาดได้

ตรวจพบข้อบกพร่องของ CPU (กำหนดโดย Linux)

  • f00f: Intel F00F
  • fdiv: CPU FDIV
  • coma: Cyrix 6x86 coma
  • amd_tlb_mmatch: tlb_mmatchAMD Erratum 383
  • amd_apic_c1e: apic_c1eAMD Erratum 400
  • 11ap: APIC ท้องถิ่นไม่ดีรู้จักกันในชื่อ 11AP
  • fxsave_leak: FXSAVE รั่ว FOP / FIP / FOP
  • clflush_monitor: AAI65 ต้องการ CLFLUSH ก่อน MONITOR
  • sysret_ss_attrs: SYSRET ไม่แก้ไข SS attrs
  • espfix: "" IRET ถึง 16 บิต SS ทำให้บิตสูง ESP / RSP
  • null_seg: การเลือกตัวเลือกใด ๆ รักษาฐานไว้
  • swapgs_fence: SWAPGS โดยไม่มีการป้อนข้อมูลขึ้นอยู่กับ GS
  • monitor: IPI ต้องใช้เพื่อปลุก CPU ระยะไกล
  • amd_e400: CPU ได้รับผลกระทบจาก Erratum 400
  • cpu_meltdown: CPU ได้รับผลกระทบจากการโจมตีแบบล่มสลายและต้องการการแยกตารางหน้าเคอร์เนล
  • spectre_v1: CPU ได้รับผลกระทบจากSpectre Variant 1 การโจมตีที่มีกิ่งก้านที่มีเงื่อนไข
  • spectre_v2: CPU ได้รับผลกระทบจากการโจมตีของSpectre Variant 2 ที่มีกิ่งก้านทางอ้อม
  • spec_store_bypass: CPU ได้รับผลกระทบจากช่องโหว่Speculative Store Bypass (Spectre Variant 4)

PS รายการนี้ได้รับมาจากarch/x86/include/asm/cpufeatures.hในแหล่งเคอร์เนล แฟล็กถูกแสดงรายการตามลำดับเดียวกับซอร์สโค้ด โปรดช่วยด้วยการเพิ่มลิงค์ไปยังรายละเอียดของคุณสมบัติเมื่อมันหายไปโดยเขียนคำอธิบายสั้น ๆ ของคุณสมบัติที่มีชื่อที่ไม่แสดงออกและโดยการปรับปรุงรายการสำหรับเคอร์เนลรุ่นใหม่ รายการปัจจุบันมาจากLinux 4.15รวมถึงการเพิ่มในภายหลัง


1
ขอบคุณ @Gilles และบรรณาธิการสำหรับคำถามที่ให้ข้อมูล & คำตอบโดยย่อและรายละเอียด ตอนนี้เพื่อตรวจสอบสิ่งที่ความสามารถในการทำงานของผมใช้ต่อไปนี้นำมาจาก NixCraft เช่นสำหรับ CPU ของ $ egrep -wo ^flags|vmx|ept|vpid|npt|tpr_shadow|flexpriority|vnmi|lm|aes' /proc/cpuinfo --color | sort -uIntel: และนอกจากนี้ยังมี CLI / GUI ที่ดีเยี่ยมของ i-NEX
tuk0z

ชุดคำอธิบายและลิงก์ที่โดดเด่น; ขอบคุณทุกคนที่มีส่วน
พอลเกียร์

ข้อมูลข้อบกพร่องมาจากที่ใด ไม่ปรากฏในไฟล์ cpufeatures.h
Drazisil

@Drazisil cpufeatures.hเท่าที่ผมจำได้ว่ารายการทั้งหมดมาจากรุ่นที่ระบุของ คำอธิบายถูกแก้ไขเพื่อให้เข้าใจได้ง่ายและให้ข้อมูลมากขึ้นเมื่อมีคนพยายามทำเช่นนั้น
Gilles

@Gilles นั่นดูเหมือนจะเป็นกรณีสำหรับทุกคน แต่ข้อบกพร่อง นอกจากว่าfeaturesฉันไม่เห็นพวกเขาในไฟล์นั้น
Drazisil

71

แขน

บนโปรเซสเซอร์ ARM คุณสมบัติบางอย่างที่กล่าวถึงในfeatures:บรรทัด มีการกล่าวถึงคุณสมบัติเฉพาะที่เกี่ยวข้องกับสถาปัตยกรรม ARM เท่านั้นไม่ใช่คุณลักษณะเฉพาะของผู้ผลิตซิลิกอนหรือระบบบนชิป

คุณลักษณะนี้ได้มาจากการค้นหา CPU id ด้วยread_cpuid()และค้นหาในนิยามชนิดตัวประมวลผลที่รู้จักในเวลาคอมไพล์ที่คุณลักษณะถูกแสดงเป็นรูปแบบของHWCAP_xxxแฟล็ก สตริงที่สอดคล้องกันอยู่ในฯลฯhwcap_strsetup.c

ในรายการด้านล่าง ARMv6 ได้แนะนำ SIMD คำแนะนำและประเภทข้อมูล ARMv7 จัดเตรียมคำแนะนำ SIMD ขั้นสูงและประเภทข้อมูล สำหรับเครื่อง ARM แบบ 32 บิตneonสัญญาณขั้นสูง SIMD; ในขณะที่asimdส่งสัญญาณ SIMD ขั้นสูงบนเครื่องแขน 64 บิต

นอกเหนือจากนั้นHardware:เส้นบ่งบอกรุ่นโปรเซสเซอร์ อาจมีข้อมูลอื่นในไฟล์อื่นภายใต้/procหรือ/sysหรือในข้อความบันทึกเคอร์เนลเวลาบูต น่าเสียดายที่ผู้ผลิตซีพียู ARM แต่ละรายมีวิธีการของตัวเองสำหรับการรายงานคุณสมบัติโปรเซสเซอร์หากมี



11

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]; สนาม
  • ของ 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    |

หมายเหตุ:

  • รายการที่ว่างเปล่าหมายถึง: "จากสถานที่ต่าง ๆ " หรือ "ไม่ว่าง"
  • index: เป็นดัชนีของx86_capabilityเช่นx86_capability[0]
  • eaxและexc: คือค่าอินพุตสำหรับ CPUID ในฐานสิบหก อินพุตที่ใช้excซึ่งน้อยกว่าจะเรียกมันว่าsubleaf (ของทรี 2 ระดับด้วยeaxที่รูท)
  • output: คือรีจิสเตอร์ที่ใช้เอาต์พุต CPUID
  • file: เป็นไฟล์ที่มีการกำหนดฟิลด์เหล่านั้น arch/x86/kernel/cpu/เส้นทางเป็นญาติกับ
  • transmeta: เป็นชื่อของผู้จำหน่ายซีพียูhttps://en.wikipedia.org/wiki/Transmetaที่โนวาโฟร่าซื้อกิจการhttps://www.crunchbase.com/organization/novafora
  • centaur: เป็นชื่อของผู้ผลิตซีพียูhttps://en.wikipedia.org/wiki/Centaur_Technologyที่ถูกซื้อกิจการโดย VIA https://en.wikipedia.org/wiki/VIA_Technologies Cyrix เป็นอีกหนึ่ง

สรุป:

  • รายการส่วนใหญ่มาจากการลงทะเบียน CPUID โดยตรงและมีการตั้งค่าcommon.cโดย:

    c->x86_capability[0] = edx;
    

    สิ่งเหล่านี้หาได้ง่ายในคู่มือ Intel สำหรับ CPUID

  • คนอื่น ๆ set_cpu_capที่มีการกระจายอยู่ทั่วทั้งแหล่งที่มาและมีการตั้งค่าทีละนิดกับ

    จะพบพวกเขาใช้ภายในgit grep X86_FEATURE_XXXarch/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ที่ไดเร็กทอรี build และอาร์เรย์ผลลัพธ์จะมีลักษณะดังนี้:

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

    ตัวอย่างเช่นX86_FEATURE_FPUสอดคล้องกับสตริง"fpu"และอื่น ๆ

  • cpu_has แบ่งออกเป็นสองกรณีด้วยรหัส:

    #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: นี่ใช้CPUIDข้อมูลจากstruct cpuinfo_x86 boot_cpu_dataทั่วโลก


3
คุณได้อธิบายถึงวิธีการเปลี่ยนจากตัวย่อเป็นชื่อที่ยาวขึ้น แต่บ่อยครั้งที่ชื่อที่ยาวขึ้นนั้นไม่สามารถเข้าใจได้มากขึ้นและcpuidใช้วิธีที่สะดวกกว่า ฉันถามคำถามนั้นเพื่อให้มีสถานที่ที่ชื่อเอกสาร
Gilles

@Gilles นี่เป็นส่วนใหญ่สำหรับผู้ที่ต้องการสร้างตาราง / ไม่สามารถค้นหาคุณลักษณะของพวกเขาในตารางเช่นฉัน :-) แต่สำหรับกรณีส่วนใหญ่เมื่อคุณดูที่จุดที่ถูกต้องของแหล่งที่มาแผนที่ไป CPUID คือ ทันทีทันใด
Ciro Santilli 新疆改造中心法轮功六四事件

10

หรือมิฉะนั้นคุณสามารถใช้cpuidโปรแกรมมันจะต้องอยู่ในพื้นที่เก็บข้อมูลเดเบียน มันจะทิ้งข้อมูลที่เป็นไปได้ทั้งหมดเกี่ยวกับ CPU ของคุณด้วยคำอธิบายบางอย่างดังนั้นคุณจะไม่ได้รับค่าสถานะที่คลุมเครือเหล่านั้น


cpuidขยายคำย่อ ฉันไม่ได้จริงๆโทรออกของคำอธิบาย การรู้นั่นhtหมายถึง“ Hyper Threading” อธิบายได้บ้าง แต่การรู้นั่นmmxหมายถึง“ ชุดคำสั่ง MMX” ไม่มากนักและนั่นmcaหมายความว่า“ สถาปัตยกรรมการตรวจสอบเครื่องจักร” แทบจะไม่
Gilles

6
@Gilles ... และ "สถาปัตยกรรมการตรวจสอบด้วยเครื่อง" เป็นคำค้นหาของ Google ที่ดีกว่า "mca";)
Alois Mahdal
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.