首页 > 系统相关 >Linux工具之numactl

Linux工具之numactl

时间:2023-07-13 16:23:58浏览次数:45  
标签:node Node numactl -- 内存 Linux 工具 CPU

 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状态:

root@dc-skyeye:/usr/bin# numactl --hardware
available: 2 nodes (0-1)
node 0 cpus: 0 1 2 3 4 5 6 7 16 17 18 19 20 21 22 23
node 0 size: 131037 MB
node 0 free: 3019 MB
node 1 cpus: 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31
node 1 size: 131071 MB
node 1 free: 9799 MB
node 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状态

# numastat
 node0 node1
numa_hit 1775216830 6808979012
numa_miss 4091495 494235148
numa_foreign 494235148 4091495
interleave_hit 52909 53004
local_node 1775205816 6808927908
other_node 4102509 494286252

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

NUNA与SMP

  NUMA(Non-Uniform Memory Access,非一致性内存访问)和SMP(Symmetric Multi-Processor,对称多处理器系统)是两种不同的CPU硬件体系架构。
  SMP的主要特征是共享,所有的CPU共享使用全部资源,例如内存、总线和I/O,多个CPU对称工作,彼此之间没有主次之分,平等地访问共享的资源,这样势必引入资源的竞争问题,从而导致它的扩展内力非常有限。
  NUMA技术将CPU划分成不同的组(Node),每个Node由多个CPU组成,并且有独立的本地内存、I/O等资源。Node之间通过互联模块连接和沟通,因此除了本地内存外,每个CPU仍可以访问远端Node的内存,只不过效率会比访问本地内存差一些,我们用Node之间的距离(Distance,抽象的概念)来定义各个Node之间互访资源的开销。

Node->Socket->Core->Processor

随着多核技术的发展,将多个CPU封装在一起,这个封装被称为插槽Socket;Core是socket上独立的硬件单元;通过intel的超线程HT技术进一步提升CPU的处理能力,OS看到的逻辑上的核数Processor。

socket = node

socket是物理概念,指的是主板上CPU插槽;node是逻辑概念,对应于socket。

core = 物理CPU

core是物理概念,一个独立的硬件执行单元,对应于物理CPU;

thread = 逻辑CPU = Processor

thread是逻辑CPU,也就是Processor。 

标签:node,Node,numactl,--,内存,Linux,工具,CPU
From: https://www.cnblogs.com/gaoyanbing/p/17551237.html

相关文章

  • 远程连接工具xshell上用vi/vim小键盘无法使用的解决办法
    1、https://www.cnblogs.com/my-first-blog-lgz/p/17361128.html问题:后台开发人员经常使用Xshell来访问远程服务器,在用vim(或vi)编辑文件的时,使用小键盘数字键的时候,可能会输入一堆字母和换行,并不是数字。修改:1.修改会话属性2.选择类别“终端”-VT模式3.选择“初始数字键盘模......
  • linux 中 M-cM-^@M-^@M-cM-^@M-^@特殊字符的处理
     001、[root@PC1test01]#lstest.txt[root@PC1test01]#cat-Atest.txt##存在特殊字符 M-cM-^@M-^@M-cM-^@M-^@TomM-cM-^@M-^@M-cM-^@M-^@2012-12-11car53000$JohnM-cM-^@M-^@M-cM-^@M-^@2013-01-13bike41000$TomM-cM-^@M-^@M-cM-^@M-......
  • 清理.git文件夹过大出现臃肿问题-filter-branch和BFG工具
    Git开发手册git一些不常用的命令记不住,可以查看git开发手册(https://m.php.cn/manual/view/34957.html)1、.git/objects/pack文件过大今天从git拉取项目进行开发的时候克隆的很慢,还以为是网速的问题。查看了一些git命令框的拉取网络速度发现网速也很快,克隆下来后才发现是.git文......
  • RestCloud ETL 工具使用教程
    一:准备阶段安装数据库和RestCloud下载安装后续出教程二:使用阶段1.登录 初始用户名和密码是admin,pass  并且输入对应服务器的ip和端口即可登录2.登录进来后就是首页  3.建立数据管理源  点击新建数据源 选择对应数据库(一般是分源端和目的端,在根据......
  • Altair SimSolid三维结构分析工具 衡祖仿真
    1、不需要对几何图形进行简化这个功能可以说是非常强大。众所周知,有限元结构仿真最花时间的莫过于在几何的前处理上。很多时候,要么CAD文件是一个巨大的组装件,成千上万个零件。你需要对组装件进行必要的简化和取舍,不然根本没法跑分析。有时候CAD文件本身就有很多几何错误,经......
  • Linux资源管理
    Linux资源管理Linux进程检测与控制linux中对需要运维去管理、去查看的资源信息,如下:内存资源、使用率free磁盘资源、使用率dfCPU资源、使用率tophtop#yuminstall-yhtopglances#yuminstall-yglances进程资源、使用率pspstreepidof网络资源、使用......
  • 处理.git文件夹过大出现臃肿问题-filter-branch和BFG工具
    Git开发手册git一些不常用的命令记不住,可以查看git开发手册(https://m.php.cn/manual/view/34957.html)1、.git/objects/pack文件过大今天从git拉取项目进行开发的时候克隆的很慢,还以为是网速的问题。查看了一些git命令框的拉取网络速度发现网速也很快,克隆下来后才发现是.git文......
  • Kubernetes轻量级日志工具Loki安装及踩坑记录
    Loki简介Loki是Grafana出品的一个轻量级日志系统,熟悉ELK的都知道ELK使用起来的成本,而且仅仅是日志检索使用ELK的话有点大材小用了。Loki8技术栈中使用了以下组件。Promtail用来将容器日志发送到Loki或者Grafana服务上的日志收集工具,该工具主要包括发现采集目标以及给日志......
  • linux查看网络端口是万兆还是千兆
    1、ethtoolethtool网络接口名#ethtoolem4(网络接口名)Settingsforem4:Supportedports:[TP]Supportedlinkmodes:10baseT/Half10baseT/Full100baseT/Half100baseT/Full1000baseT/FullSupportsauto-negotiation:YesAdvertisedlinkmodes:10baseT/Half10baseT/Full1......
  • linux系统ntp服务器
    1、https://zhuanlan.zhihu.com/p/572638416https://blog.csdn.net/thunderLZM/article/details/125996390 修改ntp服务配置文件,添加时间服务vim/etc/ntp.conf,按i进入编辑内容,编译完成后按Esc退出编译状态,之后:wq保存并退出。配置文件需要修改和理解的内容分为几个部分......