numactl命令介绍

6 篇文章 0 订阅
5 篇文章 0 订阅

一、介绍

numactl命令用于在NUMA架构下进行系统拓扑结构的查看,进程NUMA策略的设定。numactl通过一个指定的numa调度策略或者内存分配策略来控制应用程序的行为,对程序的设置将会被所有的子进程锁继承。numactl也可以控制共享内存段或者文件。

numactl使用的所有nodes参数可以以N或者N,N或者N-N或者+N的任意组合形式来表示,其中+N表示在当前默认的cpuset的基础上增加的偏移,同时也支持使用!作为取反操作。

所有使用nodes参数的位置都可以替换为如下值:

netdev:mydev node指定为网络设备mydev所在的node

file:PATH node指定为路径块设备对应的node

ip:HOST host网络设备所在的node

block:PATH 指定路径块设备所在的node

pci:[seg:]bus:dev[:func]:PCI设备所在的node

二、参数

--hardware,-H:用于显示系统上所有nodes的列表,包括每个node拥有的cpu,内存总量,空闲内存,以及node之间拓扑结构的相对距离distance

--show,-s:显示了当前系统下numa的设置

--all,-a:取消所有的cpuset设置,这样就可以使用policy的所有可用CPUs/nodes

--interleave=nodes, -i nodes:交织内存分配策略。应用程序使用的内存将会在指定的nodes节点上交织分配,如果某个node节点上不能够分配内存,将会使用其他节点的内存。

例如我们指定一个测试程序t在node0和node8上交织分配内存

numactl --interleave 0,8 ./t

通过numastat命令查看进程t在node上内存的使用情况能够看到t使用的内存被平均分配到了两个node上

--membind=nodes, -m nodes:指定进程只在指定的node上分配内存,如果指定节点上的node内存不够则会出现分配失败的错误

例如我们指定进程t在node0上分配内存

numactl -m 0 ./t

通过numastat能够看到进程t使用的内存都分布在node0上

--cpunodebind=nodes,-N nodes:在指定的node上运行程序

例如当前系统中有两个node,分别是node0和node8,有一个简单的测试程序t,执行

numactl -N 0 ./t

通过top查看进程t运行的cpu,能够看到t运行在cpu2上,属于node0的cpu

numactl -N 8 ./t

通过top查看进程t运行的cpu,能够看到t运行在cpu85上,属于node8的cpu

--physcpubind=cpus,-C cpus:指定当前进程能够运行的cpu列表,可以指定单个CPU,也可以指定一个CPU集合。例如

指定进程t运行在cpu12上

numactl -C 12 ./t

指定进程运行在11-14这些cpu上

numactl -C 11-14 ./t

指定进程t只能运行在8,12-14这些cpu上

numactl -C 8.12-14 ./t

指定进程t不允许运行在0-126号cpu上,由于我们当前的系统只有0-127的cpu,所以这意味着t要运行在cpu127上

numactl -C !0-126 ./t

--localalloc,-l:只允许进程在运行进程所在的node上分配内存

例如我们通过-l参数运行进程t

numactl -l ./t

通过top命令查看进程t运行在cpu64上,通过numastat查看进程t分配的内存,能够看到进程t分配的内存在node8上。

--preferred=node:内存分配偏向的node,但是一旦该node的内存分配失败,可以使用其他node上的内存

三、使用方式

下面是一些使用的实例

numactl --physcpubind=+0-4,8-12 进程允许运行在当前cpuset的0-4,8-12这些cpu上

numactl --interleave=all bigdatabase 运行big database,它使用的内存交织分配在所有node上

numactl --cpunodebind=1 --membind=0,1 process 进程运行在node1上,内存可以分配在node0和node1上

numactl --cpunodebind=0,--membind=0,1, -- process -l 和上面的类似,但是因为添加了-l参数,造成了冲突,所以这条指令无法执行

numactl --cpunodebind=netdev:eth0 --membind=netdev:eth0 network-server 运行network-server在网络设备eth0所在的node上,同时内存也分配在该node上

在/dev/shm中创建一个A文件,此文件的一半内存分配在node2上,一半内存分配在node3上

numactl --membind=2 dd if=/dev/zero of=/dev/shm/A bs=1M count=1024

numactl --membind=3 dd if=/dev/zero of=/dev/shm/A seek=1024 bs=1M count=1024

  • 24
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

aolitianya

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值