numa架构是并行处理器环境的产物。
之前通过卷cpu频率的方式无法满足更高计算性能的情况下,cpu向着多socket多core多socket的方式发展,这种架构设计下,总线发生争用,不再适合并行的需求,于是,出现了这种新的架构设计,每个socket独占一部分内存空间,这样就出现了针对某个socket的本地内存和远程内存之分。访问本地内存的效率会高于远程内存。
之前的单cpu架构下的内存方式机制为UMA(uniform Memory Access):CPU通过内存控制器再通过总线访问内存。
新的多CPU架构下,内存控制器被继承到每个socket中,访问内存方式变为NUMA(non-uniform memory access)。
这种架构的好处是,很好的解决了并行多处理环境下总线的性能瓶颈问题,但是内存的访问效率变得不固定,如果跨socket访问远端内存,效率会有折扣。
对于不频繁申请内存的应用来说,访问内存总是在本地,所以效率很高,但是对于内存申请量比较大的应用,比如MYSQL,会频繁申请内存,如果本地内存不够,会尝试清理无用的部分(许久没有用的部分),导致内存页面的置换,造成性能抖动。
Linux下可以使用numactl来查看内存的分配和使用(可以注意到远端和本地内存及访问失效矩阵)。
标签:架构,socket,访问,理解,NUMA,本地,内存 From: https://www.cnblogs.com/zongzw/p/18225937