Chinaunix首页 | 论坛 | 博客
  • 博客访问: 292510
  • 博文数量: 84
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: -10
  • 用 户 组: 普通用户
  • 注册时间: 2016-07-05 09:11
文章分类
文章存档

2015年(1)

2014年(6)

2013年(8)

2012年(1)

2011年(6)

2010年(2)

2009年(16)

2008年(44)

我的朋友

分类: LINUX

2008-06-16 10:13:56


朋友来信,说起最近装了一台双核双CPU服务器,Linux版本用的是 RHEL 3 update 8,启动后执行 top 命令一看,居然只能看到四个CPU。照理说,每颗物理CPU有两个核(Dual core),每个核有两个超线程(Hyper thread),如此算来,2颗物理CPU * 2个核 * 2个超线程,应该能在系统里看到8个逻辑CPU才对。这儿只有4个CPU,那么另外4个难道被JS匿下了不成?大惑不解,故来信询问。

远程登录那台服务器,执行`dmesg | grep CPU`,发现启动时确实只能探测到4个CPU:

  CPU0: Intel(R) Xeon(R) CPU      5110 @ 1.60GHz stepping 06
  CPU1: Intel(R) Xeon(R) CPU      5110 @ 1.60GHz stepping 06
  CPU2: Intel(R) Xeon(R) CPU      5110 @ 1.60GHz stepping 06
  CPU3: Intel(R) Xeon(R) CPU      5110 @ 1.60GHz stepping 06
  Brought up 4 CPUs

再执行`cat /proc/cpuinfo`,也同样只能看到4个CPU,并且每个CPU的信息里都有:

  siblings   : 2
  cpu cores  : 2
  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 nx lm pni monitor ds_cpl tm2 xtpr

双核CPU,支持超线程(ht),没错啊。还不放心,再执行`dmidecode | grep -A 40 Processor`,赫然显示:

  Flags:
     HTT (Hyper-threading technology)

没天理了,现在的JS连这种双核CPU都能使猫腻,良心都被狗吃了么?且慢,为了抓个确证,再到Intel官方网站上查查这种CPU的spec: 怪了,这种CPU的 Support features 里居然没有 Hyper-Threading Technology。那么前面 cpuinfo 里看到的 "ht" 和 dmidecode 里看到的 “HTT (Hyper-threading technology)” 是怎么回事呢?

无奈只好写信给Kernel List求教,随即,著名Kernel Hacker,Arjan van de Ven(原Red Hat Linux Kernel项目负责人,去年跳槽到Intel,这个问题他最有发言权)就回信说:

  the "ht" flag there ONLY means "we support reporting the number of
  threads/cores/etc via the MSRs". It does not mean that you actually have
  hyperthreading, only that your cpu knows how to report what it
  supports...

原来如此,这些 flag 只是说明CPU支持通过 MSRs(Model Specific Register) 报告这些东东的数量,并非说它支持 Hyper-threading ,实在是太诡异了。这么算下来,看到 2颗物理CPU * 2个核 = 4 个逻辑CPU,是正常的。

为什么双核CPU不支持超线程呢?8个逻辑CPU总比4个跑得快吧,再说超线程也是Intel比较成熟的技术了,应该不会有什么问题。于是又去查资料,发现双核技术与超线程技术之间并非 2 * 2 = 4 的关系。以前在单核CPU上跑超线程,确实可以带来并发性能的提升,但由于超线程追根究底还是跑在一个物理CPU上,因此两个超线程之间需要共享同一份资源,而对于共享资源的争用,正是超线程在高负载环境下不仅不能提升性能,反而会导致CPU性能严重下降的原因。由此才出现了双核技术,两个物理的核封装在同一个物理CPU内,各吃各碗里的,友好合作,互不争抢,和谐双赢,使得CPU性能在高负载下表现得更好。因此,双核技术是超线程技术的替代者,不用超线程,服务器跑得更快。

note:
5110的CPU是不支持超线程的,正如现在的酷睿2不支持超线程是一样的。
 
=================================================
 
[root@prmdbrw01 ~]# cat /proc/cpuinfo |grep 'physical id'
physical id     : 0
physical id     : 0
physical id     : 3
physical id     : 3
[root@prmdbrw01 ~]#
[root@prmdbrw01 ~]# cat /proc/cpuinfo |grep 'cpu cores'
cpu cores       : 2
cpu cores       : 2
cpu cores       : 2
cpu cores       : 2
 
上面信息代表有两块cpu,每块cpu两个核
=====================================================
[root@prmail01 ~ 20:44:53]# cat /proc/cpuinfo |grep cores
cpu cores       : 1
cpu cores       : 1

[root@prmail01 ~ 20:44:57]# cat /proc/cpuinfo |grep 'physical id'
physical id     : 0
physical id     : 0

[root@prmail01 ~ 20:44:59]# cat /proc/cpuinfo |grep 'sse2'
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 syscall nx lm pni monitor ds_cpl cid cx16 xtpr
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 syscall nx lm pni monitor ds_cpl cid cx16 xtpr
 
[root@prmail01 ~ 20:46:05]# top
Cpu0  :  4.3% us, 16.2% sy,  0.0% ni, 76.2% id,  3.3% wa,  0.0% hi,  0.0% si
Cpu1  :  4.3% us, 18.1% sy,  0.0% ni, 74.0% id,  3.3% wa,  0.0% hi,  0.3% si
以上代表一个cpu,单核,超线程
=======================================================
今天在网上看到一个关于看linux系统有几个处理器的文章,感觉不错就转载过来.
源地址:http://blog.chinaunix.net/u/25264/showart_1980008.html
 
逻辑CPU个数:cat /proc/cpuinfo | grep "processor" | wc -l
物理CPU个数:cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l

“siblings”指的是一个物理CPU有几个逻辑CPU
”cpu cores“指的是一个物理CPU有几个核

不应该按照flags里是否有 ht 标志来判断系统是否有超线程能力,而应该:
如果“siblings”和“cpu cores”一致,则说明不支持超线程,或者超线程未打开。
如果“siblings”是“cpu cores”的两倍,则说明支持超线程,并且超线程已打开。
================================================
 
阅读(1242) | 评论(0) | 转发(0) |
0

上一篇:IMAP 安装

下一篇:MySQL5触发器

给主人留下些什么吧!~~