本地IO

深挖NUMA - 知乎 (zhihu.com)

NUMA对性能的影响 - 知乎 (zhihu.com)

NUMA的优势和陷阱 - 知乎 (zhihu.com)

一个物理内存分布导致的问题 - 知乎 (zhihu.com)

SWAP的罪与罚&&NUMA的取舍 - 李成果 - 博客园 (cnblogs.com)

单机 8 个 NUMA node 如何玩转 TiDB | TiDB Books

SWAP的罪与罚及NUMA的诅咒_freedom3959的博客-CSDN博客

SWAP的罪与罚 | 火丁笔记 (huoding.com)

十年后数据库还是不敢拥抱NUMA? - 知乎 (zhihu.com)

十年后数据库还是不敢拥抱NUMA? | plantegg

NUMA 的平衡和调度 - 知乎 (zhihu.com)

///////////////////////////////////////////////////////////////////

三、NUMA和swap的关系
可能大家已经发现了,NUMA的内存分配策略对于进程(或线程)之间来说,并不是公平的。在现有的Redhat Linux中,localalloc是默认的NUMA内存分配策略,这个配置选项导致资源独占程序很容易将某个node的内存用尽。而当某个node的内存耗尽时,Linux又刚好将这个node分配给了某个需要消耗大量内存的进程(或线程),swap就妥妥地产生了。尽管此时还有很多page cache可以释放,甚至还有很多的free内存。

四、解决swap问题
虽然NUMA的原理相对复杂,实际上解决swap却很简单:只要在启动MySQL之前使用numactl –interleave来修改NUMA策略即可。

------------------

如果你的程序是会占用大规模内存的,你大多应该选择关闭numa node的限制。因为这个时候你的程序很有几率会碰到numa陷阱。

如果你的程序并不占用大内存,而是要求更快的程序运行时间。你大多应该选择限制只访问本numa node的方法来进行处理。

-------------------

 zone_reclaim_mode

 -------------------

 

 

 

 

Socket Interleave :整个系统内几个Socket之间内存交织,也就是整个系统是一个NUMA,也就是NUMA彻底关闭。

在单插槽AMD EPYC配置下该选项不可用,而在双CPU时选择这一项就意味着系统只有1个NUMA节点。

 

Die Interleave :每个Socket内的几个Die之间内存交织,也就是一个Socket是一个NUMA

由于前面提到的设计,AMD EPYC片上多Die连接的内存有就近和局部访问优化的关系,所以就多出了一级NUMA设置。如果选择这一项,就意味着(部分)启用插槽间的NUMA优化,但在每颗CPU上的4个Die之间关闭NUMA。

 

Channel Interleave :每个Die内的几个Channel之间内存交织,也就是一个Die是一个NUMA

多个Die、插槽间全部启用NUMA优化。此时对于单颗AMD EPYC相当于4个NUMA Node,两颗CPU这个数字就是8。 

 

posted @ 2022-08-13 19:11  乌鸦嘴-raven  阅读(238)  评论(0编辑  收藏  举报