登录服务器之后,查看CPU最简单的命令是lscpu。这个命令不需要额外安装软件,输出内容直观。可以看到Architecture、CPU(s)、Thread(s) per core、Core(s) per socket、Socket(s)、Model name、CPU MHz、L3 cache这些字段。Model name就是CPU型号,例如Intel Xeon Gold 6248R或者AMD EPYC 7K62。Socket(s)代表物理CPU数量,也就是主板安装几块CPU。Core(s) per socket是单颗CPU物理核心数量。Thread(s) per core数值一般是1或者2,等于2代表开启超线程。CPU(s)这一行显示总逻辑处理器数量,等于Socket数量乘以单颗核心数乘以单核心线程数。举个例子,Socket(s)为2,Core(s) per socket是16,Thread(s) per core是2,这台机器就是双路16核,合计64个逻辑线程。

cat /proc/cpuinfo同样可以查看CPU信息,输出信息更碎片化。processor是从0开始编号的逻辑核心,physical id对应物理CPU编号,core id对应物理核心。统计不同physical id数量,就能知道物理CPU颗数。model name依旧是CPU型号,cpu MHz是当前运行频率。flags字段里面找到vmx或者svm标识,代表CPU支持虚拟化。这个文件方便脚本读取处理,但虚拟机环境读取经常不准,云主机场景可能直接返回QEMU Virtual CPU或者宿主机CPU型号,参考价值有限。
物理服务器并且拥有root权限,dmidecode -t processor获取信息最可靠。直接读取主板SMBIOS信息,返回Socket Designation、Manufacturer、Version、Core Count、Thread Count、Current Speed、Max Speed、L2/L3 Cache。Version字段就是完整CPU型号,Core Count和Thread Count是硬件层面真实参数,不会被操作系统修改。虚拟机运行这条命令,大量字段为空或者返回宿主机信息,更适合裸金属服务器。还有lshw -class processor也能查看CPU信息,只是输出内容冗余繁杂。
Windows服务器,任务管理器性能标签页可以看到CPU型号和逻辑处理器数量,但物理CPU颗数通常不展示。想要详细信息,Win+R输入msinfo32,系统摘要里面处理器一栏写明型号、核心线程。命令行输入wmic cpu get name, numberofcores, numberoflogicalprocessors, maxclockspeed,返回结果简洁,每条记录对应一颗CPU。PowerShell可以执行Get-CimInstance Win32_Processor | Format-List Name, NumberOfCores, NumberOfLogicalProcessors, MaxClockSpeed, SocketDesignation,SocketDesignation标识插槽位置,多颗CPU就返回多条记录。
服务器没有安装系统,或是没办法远程登录操作系统,可以从硬件层面查看。开机自检界面短暂展示CPU型号,来不及查看就进入BIOS或者UEFI,在Processor Information菜单查看。机架服务器一般配备带外管理,戴尔叫iDRAC,惠普叫iLO,超微和很多国产机型使用IPMI。登录带外管理界面,硬件清单列出CPU型号、颗数、核心、频率,每个插槽详细参数都能查看,比操作系统内部查询更准确。服务器上架不方便重启,带外管理就是最方便的方案。
云主机情况比较特殊。登录云服务商控制台,实例规格标注vCPU和内存,例如4核8G、8核16G。vCPU属于虚拟资源,不等于物理核心,也不代表独占硬件资源。系统内执行lscpu,可能读取到Intel Xeon Platinum 8269CY或者AMD EPYC 7K62,这是宿主机CPU型号,云厂商一般不会屏蔽。但不能依靠这个型号推算自身占用物理资源,宿主机上面运行大量云主机实例,vCPU存在超卖。评估实际性能,优先参考云厂商规格族分类,计算型、通用型、内存型,再自行跑分测试。
CPU型号解读不用死记硬背。Intel Xeon E5-2680 v4,E5是产品系列,2680第一位数字2代表双路,第二位6大致代表核心等级,v4代表第四代。Xeon Scalable系列命名变成Gold 6248R、Platinum 8260、Silver 4210,Gold、Platinum、Silver、Bronze区分产品档次,四位数字首位代表代数,后三位是SKU编号,后缀R一般支持更大内存或者专项优化,M代表大内存版本,T代表低功耗。AMD EPYC 7742,第一位7代表产品档次,第二位7代表核心区间,后两位是具体型号,7002、7003对应Zen2、Zen3架构。普通用户不用深究这么多,直接读取Model name完整字符串即可。
还有几个坑需要留意。容器环境执行lscpu,读取的可能是宿主机全部核心,并不是容器被限制的CPU配额。虚拟机环境/proc/cpuinfo的physical id可能全部是0,没办法判断物理CPU颗数。开启超线程之后逻辑线程翻倍,但物理核心数量不变,不要把64线程当成64物理核心。CPU频率是动态变化的,cpu MHz显示实时频率,轻负载数值偏低,查看额定主频需要看Max Speed或者厂商规格文档。Windows任务管理器显示的速度有时候是估算值,和实际跑分结果存在偏差。
总的来说普通用户查看服务器CPU,抓住三项信息就足够:完整型号、核心线程数量、大致主频。型号决定CPU代际与架构,核心线程决定并行处理能力,主频影响单核性能。缓存、NUMA、PCIe通道这类参数,等到性能调优或者采购硬件的时候再深入研究就可以。