原文地址:https://blog.csdn.net/weixin_44395686/article/details/107172212
共享内存模型
多处理器环境的内存共享模型主要有3种:
- Uniform Memory Access (UMA)
- Non-uniform Memory Access (NUMA)
- Cache-only Memory Access (COMA)
UMA
UMA(一致性内存访问)的特点是多个处理器通过一条总线访问系统所有可用的内存,每个处理器访问内存的时间是一样的,所以称为一致性内存访问。
UMA存在的问题是多个处理器通过一条总线访问内存,使共享总线上负载增加。多个处理器会争用memory controller造成冲突。另外总线带宽有限,会有访问延迟。
SMP(Symmetric Multi-Processor)对称多处理器又被称为UMA。
SMP的特点就是多个处理器共享一个集中式的内存。对称的意思是处理器之间没有主从之分。SMP架构主要用于PC和移动装置领域,可以显著提高并行计算能力,但SMP不适合超大规模的服务器端场景,例如:云端计算。
NUMA
NUMA(非一致性内存访问)的特点是每个处理器都有一个本地内存。而且处理器可以访问其他处理器的本地内存(远端内存)。
也可以一小组CPU一起访问它们自己的本地内存。存在多组CPU和它们的内存组时,每组CPU和内存组就构成一个NUMA节点(node)。
NUMA的不足是处理器访问远端内存时会产生延迟。CPU访问本地内存时速度很快,当本地内存不够用时,可以使用远端内存。但是访问远端内存时延开销比较高。
COMA
COMA是ccNUMA(Cache Coherent NUMA, 缓存一致性NUMA)的一种演变。COMA可以看成是专用的NUMA,将NUMA中的分布式内存用高速缓存来取代。全局地址空间由高速缓存组成。访问远端的高速缓存借助分布式高速缓存目录进行。
Linux的NUMA node
一个node中包含多个CPU。节点和CPU的关系如下图:
Linux内核描述node的数据结构为pg_data_t。
参考资料
What is NUMA (non-uniform memory access)?