【转帖】Linux的NUMA机制

【转帖】Linux的NUMA机制,第1张

概述Linux的NUMA机制 http://www.litrin.net/2014/06/18/linux的numa机制/   NUMA(Non-Uniform Memory Access)字面直译为“非一致性内存访问”,对于Linux内核来说最早出现在2.6.7版本上。这种特性对于当下大内存+多CPU为潮流的X86平台来说确实会有不少的性能提升,但相反的,如果配置不当的话,也是一个很大的坑。本文就从 linux的NUMA机制
http://www.litrin.net/2014/06/18/linux的numa机制/

 

NUMA(Non-Uniform Memory Access)字面直译为“非一致性内存访问”,对于linux内核来说最早出现在2.6.7版本上。这种特性对于当下大内存+多cpu为潮流的X86平台来说确实会有不少的性能提升,但相反的,如果配置不当的话,也是一个很大的坑。本文就从头开始说说linux下关于cpu NUMA特性的配置和调优。

 

最早Intel在Nehalem架构上实现了NUMA,取代了在此之前一直使用的FSB前端总线的架构,用以对抗AMD的HyperTransport技术。一方面这个架构的特点是内存控制器从传统的北桥中移到了cpu中,排除了商业战略方向的考虑之外,这样做的方法同样是为了实现NUMA。

在SMP多cpu架构中,传统上多cpu对于内存的访问是总线方式。是总线就会存在资源争用和一致性问题,而且如果不断的增加cpu数量,总线的争用会愈演愈烈,这就体现在4核cpu的跑分性能达不到2核cpu的2倍,甚至1.5倍!理论上来说这种方式实现12core以上的cpu已经没有太大的意义。
Intel的NUMA解决方案,litrin始终认为它来自本家的安藤。他的模型有点类似于MapReduce。放弃总线的访问方式,将cpu划分到多个Node中,每个node有自己独立的内存空间。各个node之间通过高速互联通讯,通讯通道被成为QuickPath Interconnect即QPI。

这个架构带来的问题也很明显,如果一个进程所需的内存超过了node的边界,那就意味着需要通过QPI获取另一node中的资源,尽管QPI的理论带宽远高于传统的FSB,比如当下流行的内存数据库,在这种情况下就很被动了。

linux提供了一个一个手工调优的命令numactl(默认不安装),首先你可以通过它查看系统的numa状态

[email protected]:/usr/bin# numactl --harDWareavailable: 2 nodes (0-1)node 0 cpus: 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23node 0 size: 131037 MBnode 0 free: 3019 MBnode 1 cpus: 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31node 1 size: 131071 MBnode 1 free: 9799 MBnode distances:node 0 1 0: 10 20 1: 20 10

此系统共有2个node,各领取16个cpu和128G内存。

这里假设我要执行一个java param命令,此命令需要120G内存,一个python param命令,需要16G内存。最好的优化方案时python在node0中执行,而java在node1中执行,那命令是:

#numactl --cpubind=0 --membind=0 python param#numactl --cpubind=1 --membind=1 java param

当然,也可以自找没趣

#numactl --cpubind=0 --membind=0,1 java param

对于一口气吃掉内存大半的MongoDB,我的配置是:

numactl --interleave=all mongod -f /etc/mongod.conf

即分配所有的node供其使用,这也是官方推荐的用法。

通过numastat命令可以查看numa状态

[email protected]:/var/log/mongodb# numastat node0 node1numa_hit 1775216830 6808979012numa_miss 4091495 494235148numa_foreign 494235148 4091495interleave_hit 52909 53004local_node 1775205816 6808927908other_node 4102509 494286252

other_node过高意味着需要重新规划numa.

PS:建议您阅读这篇,获得更多关于NUMA的详细内容!

总结

以上是内存溢出为你收集整理的【转帖】Linux的NUMA机制全部内容,希望文章能够帮你解决【转帖】Linux的NUMA机制所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/1022210.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存