有时为了获取当前工作或实验平台的架构信息,仅仅依靠win下的设备管理器是不够的。而windows提供了Windows Management Instrumentation Command Line,简称WMIC命令来查看和管理系统,ubuntu则可以打印/proc/cpuinfo来查看,但两者在形式上区别很大,因此作者选用lenovo xiaoxin 300,分别在主机和虚拟机中对比两者获取的信息量。
- 实验平台
个人联想笔记本,xiaoxin 300。
单socket双核四线程i7处理器,稳定频率在2.5GHz,三级缓冲。
- WMIC命令获取的信息
WMIC获取的项目包括地址宽度、架构编号、FMS、当前电压、当前CPU频率、数据宽度、DeviceID、第二级缓冲大小、负载百分比、制造厂商、最大时钟频率、是否支持电源管理、processor id、processor type、版本号、socket编号、当前状态等等。从打印出来的项目看,很多都是空的,而且仅仅将一个socket视为一个cpu,没有分析每个core或超线程下的SMPT信息,cache也只是展示出第2级缓冲的信息,应该说有用的信息并不是很多。
如果要获取所有级别的cache信息,只能键入memcache子命令查看了:
这里从cache info中多少能推测出socket内有两个核心数了,各自使用64k的L1 cache,而公用512K的L2 cache以及4M的L3 cache。
- cat指令查看的信息
可以看到4个线程核的详细信息:
处理器编号从0~3,厂商为Intel,cpu family为6,model 78,stepping 3,cpu频率相比使用WMIC更加精确,选用L3 cache大小作为cache size,socket id均为0,core id和apic id从0~3编号,支持fpu以及fpu异常,执行cpuid指令前,eax寄存器中的值,是否支持写保护,当前cpu支持的指令集,cache以64字节对齐,采用40位物理地址,48位虚拟地址等等,只是没有信息表明当前有几级cache,其他信息都较为清晰了。
- 总结
linux相比windows下获取到的cpu信息更加直观,结合两个环境下打印的信息更容易逆向分析出cpu的socket/core/cache之间的从属结构与关系。