本地IO
一个物理内存分布导致的问题 - 知乎 (zhihu.com)
SWAP的罪与罚&&NUMA的取舍 - 李成果 - 博客园 (cnblogs.com)
单机 8 个 NUMA node 如何玩转 TiDB | TiDB Books
SWAP的罪与罚及NUMA的诅咒_freedom3959的博客-CSDN博客
十年后数据库还是不敢拥抱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的方法来进行处理。
-------------------
-------------------
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。