CPU 物理架构

2017-03-01 Wednesday     linux

简介

最初 CPU 的频率越高,则性能越好,而频率与制程密切相关,但是制程存在一个天花板,目前一般到 10nm;为了提升性能, cpu 开始采用多核,即在一个封装里放多个 core,而且又发明了超线程技术 Hyper-threading 。

CPU 制程技术最小能做到多少纳米?

其实从科技发展的角度来说,并没有绝对的极限,我们能确定的是,芯片制程越小,单位体积的集成度越高,就意味着处理效率和发热量越小。但受制于切割工艺的极限,以目前的情况来看,理论上的制程极限我们还是可以简单的分析出来的。

我们知道,硅原子大小半径为110皮米,也就是0.11纳米,直径0.22nm。虽然3D晶体管的出现已经让芯片不再全部依赖制程大小,而制程工艺的提升,也意味着会决定3D晶体管横面积大小,不过,在不破坏硅原子本身的前提下,芯片制造目前还是有理论极限的,在0.5nm左右,之所以不是0.2nm,是因为本身硅原子之间也要保持一定的距离。而从实际角度上看,Intel在9nm制程上已经出现了切割良品率低和漏电率低的问题,所以0.5nm这个理论极限在目前的科学技术上看,几乎是不可能的。

其中有常见的概念,直接复制 WikiPedia 中的解释。

SMP(Symmetric multiprocessing), involves a multiprocessor computer hardware architecture where two or more identical processors are connected to a single shared main memory and are controlled by a single OS instance.

NUMA(Non-Uniform Memory Access), is a computer memory design used in multiprocessing, where the memory access time depends on the memory location relative to a processor. Under NUMA, a processor can access its own local memory faster than non-local memory, that is, memory local to another processor or memory shared between processors. NUMA architectures logically follow in scaling from symmetric multiprocessing (SMP) architectures.

下图展示了这些术语之间的逻辑关系。

cpu topology

一个 NUMA node 包括一个或者多个 Socket,以及与之相连的 local memory;一个多核的 Socket 有多个 Core,如果 CPU 支持 HT,OS 还会把这个 Core 看成 2 个 Logical Processor。

NUMA 常见问题可参考 Frequently Asked Questions About NUMA,或者 本地文档

内存模型

通常有两种不同的内存管理方式:

  • UMA(Uniform Memory Acess),将可用的内存以连续的方式组织起来,可能有小的缺口,每个处理器访问各个内存区的速度都是一样的;
  • NUMA(Non-Uniform Memory Access),系统中每个处理器都有本地内存,可以支持特别快速的访问,各个处理器之间通过总线连接起来,以支持对其他的处理器的内存访问。

在 CentOS 中可以通过如下命令查看是否为 NUMA。

# yum install numactl -y             # 安装numactl命令
# numactl --hardware
available: 2 nodes (0-1)             # 当前机器有2个NUMA node,编号0-1
node 0 cpus: 0 1 2 3
node 0 size: 8113 MB                 # node 0物理内存大小
node 0 free: 182 MB
node distances:                      # node距离,可简单认为是CPU本node内存访问和跨node内存访问的成本
node   0   1                         # 可知跨node的内存访问成本(20)是本地node内存(10)的2倍
  0:  10  20
  1:  20  10

$ grep -i numa /var/log/dmesg
[xxxxx] No NUMA configuration found  # 非NUMA,否则是

当然如果开机时间过长,可能会导致日志已经被覆盖,此时可以通过如下方式查看。

$ cat /proc/cpuinfo | grep "physical id" | wc -l     # 查看当前计算机中的物理核个数
$ ls /sys/devices/system/node/ | grep node | wc -l   # 有多少个node

$ lscpu -p                                           # 查看CPU架构

在 /proc/cpuinfo 中的 physical id,描述的就是 Socket 的编号。

如果物理核数目有多个,而且 node 的个数也有多个,说明这是一个 NUMA 系统,每个目录内部有多个文件和子目录描述该 node 内 cpu、内存等信息,比如说 node0/meminfo 描述了 node0 内存相关信息;如果 node 的个数只有 1 个,说明这是一个 SMP 系统。

关于 NUMA 的详细信息可以通过 dmidecode 查看。

内核数

通过 /proc/cpuinfo 可以查看跟 core 相关的信息,这里包括了 socket、物理核、逻辑核的概念。

# cat /proc/cpuinfo | grep "physical id" | sort -u | wc -l   # 显示socket的数目

# cat /proc/cpuinfo
... ...
    cpu cores : 4              # 一个socket有4个物理核
    core id   : 1              # 一个core在socket内的编号,同样是物理核编码
... ...

# cat /proc/cpuinfo | grep "cpu cores" | uniq | cut -d: -f2  # 每个socket的物理核数目

# cat /proc/cpuinfo | grep processor                         # 查看有多少个逻辑核

Cache

关于 CPU 中的 Cache 信息,可以通过 /proc/cpuinfo 查看,分为 L1、L2、L3,其中 L1 又分为独立的指令 cache 和数据 cache。

processor       : 0
cache size      : 12288 KB     # L3 Cache的总大小
cache_alignment : 64

详细的 cache 信息可以通过 sysfs 查看,也即在 /sys/devices/system/cpu/ 目录下,其中 cpu 目录下的编号是逻辑 cpu,且该目录下包括了 index0 (L1数据cache)、index1 (L1指令cache)、index2 (L2 cache)、index3 (L3 cache,对应cpuinfo里的cache) 。

参考

关于 CPU 的顶层布局可以参考 玩转CPU Topology,或者 本地文档;另外一个可以参考的是 13 种在 Linux 系统上检测 CPU 信息的工具,或者 本地文档check-cpu-info-linux.pdf

LIKWID 工具介绍可参考 Lightweight performance tools 或者 本地文档,源码查看 Github



如果喜欢这里的文章,而且又不差钱的话,欢迎打赏个早餐 ^_^


About This Blog

Recent Posts

Categories

Related Links

  • RTEMS
    RTEMS
  • GNU
  • Linux Kernel
  • Arduino

Search


This Site was built by Jin Yang, generated with Jekyll, and hosted on GitHub Pages
©2013-2019 – Jin Yang