首页
社区
课程
招聘
[求助]winxp系统如何查询cpu的逻辑号码
发表于: 2014-7-10 17:31 4806

[求助]winxp系统如何查询cpu的逻辑号码

2014-7-10 17:31
4806
如何查询当前线程运行所在的cpu的physical id,logical id,core id等等信息啊。cpuid的指令没找到怎么查询 physical id,logical id,core id啊。

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 8
活跃值: (233)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
2
通过找百度,只能找到linux系统下查询physical id,logical id,core id的命令,更本找不到
windows查询的方法。郁闷的是,linux也是命令查询,根本没有c语言程序查询。这么一个简单
的功能百度都找不到?干嘛的?
另,怎么 google不能用了?

浅析在Linux系统下如何获取CPU数量

作者: 文章来源:www.upzxt.com 发布时间:2014-07-11 00:06点击:2次
  

     想要在Linux系统下获取cpu的数量,那么首先就要知道使用什么的办法!那么对于检测cpu数量我们一般都是用命令程序来判断的。现在我们一起去看看具体的内容吧!
#include <unistd.h>
long num = sysconf(_SC_NPROCESSORS_ONLN);

便可以获得当前CPU的数量。。。

判断依据:
1.具有相同core id的cpu是同一个core的超线程。
2.具有相同physical id的cpu是同一颗cpu封装的线程或者cores。

英文版:
1.Physical id and core id are not necessarily consecutive but they are unique. Any cpu with the same core id are hyperthreads in the same core.
2.Any cpu with the same physical id are threads or cores in the same physical socket.

实例:

LunarPages的CPU信息:

processor : 0
vendor_id : GenuineIntel
cpu family : 15
model : 4
model name : Intel(R) Xeon(TM) CPU 3.00GHz
stepping : 3
cpu MHz : 3000.881
cache size : 2048 KB
physical id : 0
siblings : 2
core id : 0
cpu cores : 1
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 5
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe lm constant_tsc pni monitor ds_cpl cid xtpr
bogomips : 6006.73

processor : 1
vendor_id : GenuineIntel
cpu family : 15
model : 4
model name : Intel(R) Xeon(TM) CPU 3.00GHz
stepping : 3
cpu MHz : 3000.881
cache size : 2048 KB
physical id : 0
siblings : 2
core id : 0
cpu cores : 1
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 5
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe lm constant_tsc pni monitor ds_cpl cid xtpr
bogomips : 5999.40

processor : 2
vendor_id : GenuineIntel
cpu family : 15
model : 4
model name : Intel(R) Xeon(TM) CPU 3.00GHz
stepping : 3
cpu MHz : 3000.881
cache size : 2048 KB
physical id : 3
siblings : 2
core id : 3
cpu cores : 1
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 5
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe lm constant_tsc pni monitor ds_cpl cid xtpr
bogomips : 5999.08
processor : 3
vendor_id : GenuineIntel
cpu family : 15
model : 4
model name : Intel(R) Xeon(TM) CPU 3.00GHz
stepping : 3
cpu MHz : 3000.881
cache size : 2048 KB
physical id : 3
siblings : 2
core id : 3
cpu cores : 1
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 5
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe lm constant_tsc pni monitor ds_cpl cid xtpr
bogomips : 5999.55

    显示4个逻辑CPU,通过physical id,前面两个逻辑cpu的相同,后面两个的相同,所以有两个物理CPU。前面两个的 core id相同,后面的两个core ID相同,说明这两个CPU都是单核。也就是说两个单核cpu,启用了超线程技术。
通过intel的cpu的参数可以初步判断 使用的是两个 Xeon奔腾4CPU ,有点差。。。。
如何获得CPU的详细信息:

linux命令:

#cat /proc/cpuinfo

用命令判断几个物理CPU,几个核等:

逻辑CPU个数:
# cat /proc/cpuinfo | grep 'processor' | wc -l

物理CPU个数:
# cat /proc/cpuinfo | grep 'physical id' | sort | uniq | wc -l

每个物理CPU中Core的个数:
# cat /proc/cpuinfo | grep 'cpu cores' | wc -l

是否为超线程?
如果有两个逻辑CPU具有相同的”core id”,那么超线程是打开的。

每个物理CPU中逻辑CPU(可能是core, threads或both)的个数:
# cat /proc/cpuinfo | grep 'siblings'
其他特征:

目前intel新的多核心cpu都会在后面显示具体的型号数字,例如:

model name : Intel(R) Xeon(R) CPU           X3230   @ 2.66GHz

说明是 Xeon 3230的cpu,而不显示型号的具体数字的,大部分都是奔腾的CPU

很多主机商都骗人,用奔腾的cpu,却说是多核心的CPU。

探针看到的数据:

类型:Intel(R) Xeon(TM) CPU 2.80GHz 缓存:1024 KB
类型:Intel(R) Xeon(TM) CPU 2.80GHz 缓存:1024 KB
类型:Intel(R) Xeon(TM) CPU 2.80GHz 缓存:1024 KB
类型:Intel(R) Xeon(TM) CPU 2.80GHz 缓存:1024 KB

没有具体的型号,缓存1M,一般都是奔腾系列的cpu,或者是intel假双核的cpu,具体要根据上面说的去判断。新的多核心cpu都能看到具体的型号。
另外多核心的xeon的CPU,一般主频都不高,达到2.8和3.0的只有很少的几个高端CPU型号,一般主机商不会用这么好的。

一些操作系统的最新版本已经更新了 /proc/cpuinfo 文件,以支持多路平台。如果您的系统中的 /proc/cpuinfo 文件能够正确地反映出处理器信息,那么就不需要执行上述步骤。反之,可采用本文中的信息进行解释。

/proc/cpuinfo 文件包含系统上每个处理器的数据段落。/proc/cpuinfo 描述中有 6 个条目适用于多内核和超线程(HT)技术检查:processor, vendor id, physical id, siblings, core id 和 cpu cores。

processor 条目包括这一逻辑处理器的唯一标识符。
physical id 条目包括每个物理封装的唯一标识符。
core id 条目保存每个内核的唯一标识符。
siblings 条目列出了位于相同物理封装中的逻辑处理器的数量。
cpu cores 条目包含位于相同物理封装中的内核数量。

如果处理器为英特尔处理器,则 vendor id 条目中的字符串是 GenuineIntel。

1.拥有相同 physical id 的所有逻辑处理器共享同一个物理插座。每个 physical id 代表一个唯一的物理封装。

2.Siblings 表示位于这一物理封装上的逻辑处理器的数量。它们可能支持也可能不支持超线程(HT)技术。

3.每个 core id 均代表一个唯一的处理器内核。所有带有相同 core id 的逻辑处理器均位于同一个处理器内核上。

4.如果有一个以上逻辑处理器拥有相同的 core id 和 physical id,则说明系统支持超线程(HT)技术。

5.如果有两个或两个以上的逻辑处理器拥有相同的 physical id,但是 core id 不同,则说明这是一个多内核处理器。cpu cores 条目也可以表示是否支持多内核。

    例如,如果系统包含两个物理封装,每个封装中又包含两个支持超线程(HT)技术的处理器内核,则 /proc/cpuinfo 文件将包含此数据。
    以上就是在Linux系统下用命令程序判断cpu数量的具体内容,虽然看起来很是复杂,但是网友们仔细了解后,还是能学到一些知识的哦!有兴趣的网友可以去看看哦!
(责任编辑:admin)
2014-7-11 10:19
0
雪    币: 952
活跃值: (1821)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
cpuid 指令 或者wmi
2014-7-11 11:53
0
雪    币: 8
活跃值: (233)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
4
Cpuid指令我査了,没找到如何返回Core id的信息,是我太笨了吗?
到底怎么查?WMI如何查?愿闻其详

我就是要查询 当前线程运行在 哪个物理封装 的哪个核上面,或者 这个核上是超线程,有2个逻辑核,也要查出来。
确实对应的就是 physical id,core id,logical processor.但是 那篇文章是 linux的,求windows下的答案啊。
我不是要查cpu的唯一序列号,那个已经不支持了我知道。
2014-7-11 13:11
0
雪    币: 8
活跃值: (233)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
5
软件可以探测CPUID扩展拓扑枚举分枝(0BH)的能力,通过执行两个步骤:

1、通过执行CPUID,让EAX = 0,来检查基本CPUID信息的最大输入值。如果CPUID.0H:EAX大于等于11(0BH),那么处理下一步。

2、检查CPUID.EAX=0BH, ECX=0H:EBX为非0。

如果上述条件都为真,扩展拓扑枚举分枝可用。注意,在一个处理器中CPUID分枝0BH的存在不能保证支持本地APIC支持x2APIC。如果CPUID.(EAX=0BH, ECX=0H):EBX返回0,并且基本CPUID信息的最大输入值大于0BH,那么CPUID.0BH分枝在那个处理器上不被支持。

如果不支持 cupid.eax=0BH,那么用apic的方式探测 逻辑cpu号和 SMT编号。
如果支持 cupid.eax=0BH,那么要用 x2apic的方式 探测 逻辑cpu号和 SMT编号。

汗,这么复杂,我以前还没想到要有这么多步骤,什么APIC和 x2APIC 的区别,我还根本不知道
2014-7-11 20:37
0
游客
登录 | 注册 方可回帖
返回
//