绝大部分信息使用的CPUID指令读出来的,极少部分信息通过OS的API直接读取CPU的信息,而制程工艺这种只能通过打表,维护一个字典,把制程和型号对应出来(老版本的CPU-Z显示不了新CPU的制程工艺,但是能显示所有Flags);还有一部分特贵的CPU会有一个Processor Information ROM,把信息烧录在里面,可以存更多信息,也可以用Intel开放的方式读取出来,但是这个ROM的信息对于OS来讲不是必须要存在的(i5,i7就没有,依然运行的好好的,你把i9的这个ROM不小心弄坏了,也不会影响i9本身的运行,CPU-Z到底有没有读取这个ROM里面的信息,无法确定)。比如i9就有:
i5,i7基本都没有:
你可以这么想, 主板BIOS其实不知道你安装了什么CPU,它就是通过CPUID来读取的,CPU固有的有用的信息都能读出来,这些与什么操作系统都无关。有的信息直接就读取出来,有的信息需要计算一下再出来,再加上读取方式多种,所以你打开CPU-Z,虽然只有3MB大小,但是一般都会执行一小会儿你才能看到结果。
比如我正在用的机器:
用就旧版本的1.78.1的CPU-Z就不显示工艺,因为预存表里面没有,连codename都没有,因为我这台机器的CPU在这个版本里面还没有对应的信息,但是CPUID执行是OK的
而在新版本的1.98.0的CPU-Z里面就显示了工艺,
因为CPU-Z把作业补上了,
Microsoft这里有个文档,可以大致浏览一眼:
比微软那篇文档更多信息的:
自己获取CPU的信息(OS实际上也是用CPUID读出来的):
Windows 中可以在Powershell中获取:
get-wmiobject -class win32_processor Caption : Intel64 Family 6 Model 165 Stepping 2 DeviceID : CPU0 Manufacturer : GenuineIntel MaxClockSpeed : 2712 Name : Intel(R) Core(TM) i7-10850H CPU @ 2.70GHz SocketDesignation : U3E1
在Linux里面可以用 cat /proc/cpuinfo 来获取,比如:
processor : 39 vendor_id : GenuineIntel cpu family : 6 model : 62 model name : Intel(R) Xeon(R) CPU E5-2650L v2 @ 1.70GHz stepping : 4 microcode : 1064 cpu MHz : 1695.751 cache size : 25600 KB physical id : 1 siblings : 20 core id : 12 cpu cores : 10 apicid : 57 initial apicid : 57 fpu : yes fpu_exception : yes cpuid level : 13 wp : yes 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 rdt scp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmp erf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pci d dca sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx f16c rdrand l ahf_lm arat epb xsaveopt pln pts dts tpr_shadow vnmi flexpriority ept vpid fsgsb ase smep erms bogomips : 3391.45 clflush size : 64 cache_alignment : 64 address sizes : 46 bits physical, 48 bits virtual power management:
又比如:
processor : 3 vendor_id : GenuineIntel cpu family : 6 model : 85 model name : Intel(R) Xeon(R) Silver 4216 CPU @ 2.10GHz stepping : 7 microcode : 0xffffffff cpu MHz : 2095.079 cache size : 22528 KB physical id : 0 siblings : 4 core id : 3 cpu cores : 4 apicid : 3 initial apicid : 3 fpu : yes fpu_exception : yes cpuid level : 13 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx lm constant_tsc rep_good nopl pni pclmulqdq ssse3 fma cx16 sse4_1 sse4_2 movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch kaiser fsgsbase bmi1 hle avx2 smep bmi2 erms rtm xsaveopt bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds bogomips : 4190.15 clflush size : 64 cache_alignment : 64 address sizes : 42 bits physical, 48 bits virtual power management:
Linux上面也可以用 dmidecode 获取CPU的信息,比如我们一台Hadoop节点上面执行的结果