本节内容
CPU我们常用的是就是对称多处理器,都是多核,每个核地位是相等的,没有主次之分,他们共享总线和内存,缺点是总的CPU数量有限,而且不好管理,因为共享总线和内存很难去做大规模计算。
在服务器这块,通常有NUMA这种架构,超级计算机由一块一块计算板组成,每块板上有很多CPU、内存条。插到NUMA架构上提高计算能力,麻烦在于每一个逻辑系统有多个核,有自己的主存,访问自己的系统时是内部总线速度很快,但是访问其他板内存数据时,这样走外部总线,速度很慢。现在服务器使用NUMA架构很多,NUMA会引发大量的问题,例如MySql部署时NUMA带来很大的麻烦。
我们在程序中看到的核都是超线程的,称之为逻辑核。一个CPU内部集成了两个物理核心,但是程序显示为4个。其中有2个核是由超线程带来的,超线程和物理核还是有些差别的,因为这主要涉及三级缓存的问题。
查看核数量
- $ nproc
除了寄存器之外,缓存分为L1、L2、L3,L1又分为数据和指令两块。L1、L2是每个物理核有自己的,L3是同一个CPU共享的。L1是接近核心会很快,L2、L3越来越大速度越来越慢。
超线程带来的问题是两个超线程核共享L1、L2,有时会造成L1、L2数据被频繁刷掉,造成缓存命中率会很低。超线程并不能总是让你程序变快,有些时候会变慢。通常做法把程序绑定到不同的物理核上。
查看CPU相关信息
- $ lscpu
这对我们写并发程序有一定的影响,我们可能需要做一些底层的控制让我们部署到不同的物理核上,而不是在一个核上去竞争L1和L2缓存,这样有时候会变得很慢。这东西知道就行了,因为我们编程时候没有办法控制L1-L3的使用,但是我们部署的时候可以比如像Docker就有一些控制指令让两个进程分别绑到不同的物理核上避免它们相互竞争。
来源: http://www.cnblogs.com/lyj/p/foundation_06_processor.html