numactl命令介绍

numactl命令介绍Linux 系统中 numactl 工具介绍 numactl

大家好,欢迎来到IT知识分享网。

一、介绍

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

numactl命令介绍

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

numactl命令介绍

–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上

numactl命令介绍

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

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

numactl -m 0 ./t

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

numactl命令介绍

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

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

numactl -N 0 ./t

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

numactl命令介绍

numactl -N 8 ./t

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

numactl命令介绍

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

指定进程t运行在cpu12上

numactl -C 12 ./t

numactl命令介绍

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

numactl -C 11-14 ./t

numactl命令介绍

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

numactl -C 8.12-14 ./t

numactl命令介绍

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

numactl -C !0-126 ./t

numactl命令介绍

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

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

numactl -l ./t

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

numactl命令介绍

–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

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/114743.html

(0)
上一篇 2025-12-06 22:45
下一篇 2025-12-07 07:10

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信