您的位置:首页 > 运维架构 > Linux

Linux下区分物理CPU、逻辑CPU和CPU核数

2015-12-14 17:25 330 查看
㈠ 概念
           ① 物理CPU
               

              实际Server中插槽上的CPU个数

              物理cpu数量,可以数不重复的 physical id 有几个           

           ② 逻辑CPU               

              Linux用户对 /proc/cpuinfo 这个文件肯定不陌生. 它是用来存储cpu硬件信息的

              信息内容分别列出了processor 0 – n 的规格。这里需要注意,如果你认为n就是真实的cpu数的话, 就大错特错了

              一般情况,我们认为一颗cpu可以有多核,加上intel的超线程技术(HT), 可以在逻辑上再分一倍数量的cpu core出来

              逻辑CPU数量=物理cpu数量 x cpu cores 这个规格值 x 2(如果支持并开启ht)

              备注一下:Linux下top查看的CPU也是逻辑CPU个数              

           ③ CPU核数           

              一块CPU上面能处理数据的芯片组的数量、比如现在的i5 760,是双核心四线程的CPU、而 i5 2250 是四核心四线程的CPU              

              一般来说,物理CPU个数×每颗核数就应该等于逻辑CPU的个数,如果不相等的话,则表示服务器的CPU支持超线程技术 
  逻辑CPU的个数 =
物理CPU个数×每颗核数×超线程数


㈡ 查看CPU信息          

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

          processor     包括这一逻辑处理器的唯一标识符。

          physical id   包括每个物理封装的唯一标识符。

          core id       保存每个内核的唯一标识符。

          siblings      列出了位于相同物理封装中的逻辑处理器的数量。

          cpu cores     包含位于相同物理封装中的内核数量。
         1. 拥有相同 physical id 的所有逻辑处理器共享同一个物理插座,每个 physical id 代表一个唯一的物理封装。

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

         3. 每个 core id 均代表一个唯一的处理器内核,所有带有相同 core id 的逻辑处理器均位于同一个处理器内核上。简单的说:“siblings”指的是一个物理CPU有几个逻辑 CPU,”cpu cores“指的是一个物理CPU有几个核。

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

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

        ① 查看物理CPU的个数

#cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc -l
2


   ② 查看逻辑CPU的个数

#cat /proc/cpuinfo |grep "processor"|wc -l
24


 ③ 查看CPU是几核

#cat /proc/cpuinfo |grep "cores"|uniq
6
 我这里应该是2个CPU,每个CPU有6个core,应该是Intel的CPU,支持超线程,所以显示24

-------------------------------------------------------------我是分割线--------------------------------------------------
多内核指处理器拥有多个物理内核,就是在一个封装好的单个芯片上存在多个核心。当然,也可以将多个单核芯片,封装在一个处理器上。
超线程指物理内核+逻辑内核,芯片上只存在一个物理内核,但是这个物理内核可以模拟出一个逻辑内核,于是系统信息就显示了两个内核,一真一假。

如果我们选择多个单核CPU,那么每一个CPU都需要有较为独立的电路支持,有自己的Cache,而他们之间通过板上的总线进行通信。
假如在这样的架构上,我们要跑一个多线程的程序(常见典型情况),不考虑超线程,那么每一个线程就要跑在一个独立的CPU上,
线程间的所有协作都要走总线,而共享的数据更是有可能要在好几个Cache里同时存在。这样的话,总线开销相比较而言是很大的,
怎么办?那么多Cache,即使我们不心疼存储能力的浪费,一致性怎么保证?如果真正做出来,还要在主板上占多块地盘,
给布局布线带来更大的挑战,怎么搞定?

如果我们选择多核单CPU,那么我们只需要一套芯片组,一套存储,多核之间通过芯片内部总线进行通信,共享使用内存。在这样的架构上,
如果我们跑一个多线程的程序,那么线程间通信将比上一种情形更快。如果最终实现出来,对板上空间的占用较小,布局布线的压力也较小。

多核可以通过软件封装让普通用户看成一个处理器,这样原来在单机上跑的程序设计基本不用更改就能获得不错的性能
最初的目的是提升普通PC计算能力的同时不增加原有程序的复杂性。但是在研究领域这是一个很好地研究方向,未来可能前景不错。

多个CPU则由于排名第一说的那些总线带宽等原因,最终形成分布式系统(当然,其实多核从内部看也是分布式结构的,
但从外部看就可以简单认为是单个处理器了)
,从而必然面临的数据一致性,以及一些主从关系控制,可靠性保障之类的问题,一般人搞不来这种程序,
因为调试,运行,故障等等问题太多。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: