NUMA架构的个人理解

numa架构是并行处理器环境的产物。
之前通过卷cpu频率的方式无法满足更高计算性能的情况下,cpu向着多socket多core多thread的方式发展。
这种架构设计下,总线发生争用,不再适合并行的需求。
于是,出现了这种新的架构设计,每个socket独占一部分内存空间,这样就出现了针对某个socket的本地内存和远程内存之分。
访问本地内存的效率会高于远程内存。

之前的单cpu架构下的内存方式机制为UMA(uniform Memory Access):CPU通过内存控制器再通过总线访问内存。
新的多CPU架构下,内存控制器被继承到每个socket中,访问内存方式变为NUMA(non-uniform memory access)。
这种架构的好处是,很好的解决了并行多处理环境下总线的性能瓶颈问题,但是内存的访问效率变得不固定,如果跨socket访问远端内存,效率会有折扣。
对于不频繁申请内存的应用来说,访问内存总是在本地,所以效率很高。
但是对于内存申请量比较大的应用,比如MYSQL,会频繁申请内存,如果本地内存不够,会尝试清理无用的部分(许久没有用的部分),导致内存页面的置换,造成性能抖动。

CPU通过MESI状态机机制保证数据写入的一致性。

Linux下可以使用numactl来查看内存的分配和使用(可以注意到远端和本地内存及访问失效矩阵)。

posted @   zongzw  阅读(54)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
点击右上角即可分享
微信分享提示