numactl命令用于控制进程与共享存储的NUMA技术机制。
语法
numactl [–interleave nodes] [–preferred node] [–membind nodes] [–cpunodebind nodes] [–physcpubind cpus] [–localalloc] [–] {arguments …}
numactl –show
numactl –hardware
numactl [–huge] [–offset offset] [–shmmode shmmode] [–length length] [–strict]
[–shmid id] –shm shmkeyfile | –file tmpfsfile
[–touch] [–dump] [–dump-nodes] memory policy
参数
–interleave=nodes, -i nodes
这个选项用于设定内存的交织分配模式。也就是说系统在为多个节点分配内存空间的时候,将会以轮询分发的方式被分配给这多个节点。
如果在当前众多的交织分配内存节点中的目标节点无法正确的分配内存空间的话,内存空间将会由其他的节点来分配。
–membind=nodes, -m nodes
选项 ‘–membind’ 仅用来从节点中分配内存空间所用。如果在这些节点中无法分配出所请求的空间大小的话该分配操作将会失败。
上述命令中指定需要分配空间的 nodes 的方式可以遵照上述 N,N,N , N-N ,N 这种方式来指定。
–cpunodebind=nodes, -N nodes
上述命令仅用于施加在运行与 cpu 上的进程。这个命令用于显示 cpu 的个数,cpu 数目信息同样记录在系统中的存放处理器领域信息的 /proc/cpuinfo 文件夹下,或者是按照关联的中央处理器信息 在当前的中央处理器集中所存放。
–localalloc , -l
这个命令选项通常是为当前的节点分配内存的。
–preferred=node
该命令由于指定优先分配内存空间的节点,如果无法将空间分配给该节点的话,应该分配给该节点上的空间将会被分发到其他的节点上该命令选项后面仅接收一个单独的节点标号。相关的表示方式也可以使用。
–show,-s
该命令用于显示 NUMA 机制作用在当前运行的那些进程上。
–hardware , -H
该命令用于显示当前系统中有多少个可用的节点。
–huge
当创建一个基于大内存页面的系统级的共享内存段的时候,使用 –huge 这个选项。
–huge
选项仅在 –shmid 或是 –shm 命令的后面使用才有效.
–offset
该参数选项用于指定共享内存段中的位移量的偏移。 默认的情况下偏移量是 0 。 有效的偏移量单位是 m (用于表示 MB)
g (用于表示 GB) , k (用于表示 KB ), 其他没有指定的被认为是以字节为单位.
–strict
这个参数选项当施加了 NUMA 调度机制的共享内存段区域的页面被施加了另一个机制而导致错误的时候,使用 –strict 选项将会把错误信息显示出来. 默认情况是不使用该选项的。
–shmmode shmmode
该选项仅在 –shmid 或是 –shm 之前使用才会生效。当创建一个共享内存段的时候,通过整型数值来指定共享内存的共享的模式类型.
–length length
Apply policy to length range in the shared memory segment or make the segment length long Default is to use the remaining length Required when a shared memory segment is created and specifies the length of the new segment then .Valid units are m ( for MB ) , g( for GB) , k ( for KB) , otherwise it specifies bytes.
–shmid id
通过ID 号码来创建或使用一个共享内存段。
(如果共享内存段已经存在,那么通过 shmid 来指定下面要使用某个 ID 的共享内存段; 如果该 ID 对应的共享内存段并不存在的话,那么就创建一个)
–shm shmkeyfile
通过存放在 shmkeyfile(共享内存-键文件)中的 ID 号码来创建或者是使用一个共享内存段。访问 shmkeyfile 文件的进程是通过 fork(3 arguments) 方法来实现的.
–file tmpfsfile
将 numa 机制施加于文件上面,这个文件属于 tmpfs或者是 hugetlbfs 这种特殊的文件系统
–touch
通过将 numa 机制施加于刚刚页面上来实现内存的早期 numa 化。
默认情况下是不使用该选项,如果存在映射或是访问页面的应用的话,将会使用该早期实行 NUMA 机制的这种方法.
–dump
该选项用于废除将已经 numa 化的特定区域上的 NUMA性质.
(–dump ) 选项后,有效指定 node 的书写方式
all 用于将所有的节点上的 NUMA 特性移除
number 通过指定 node 后接的数值来废除该数字对应的 node
number1(number2) node number1(node number2)上的 NUMA 特性将会被移除
number1-number2 node number1 — node number2 区间上的所有存在的 node 的 NUMA 特性将会被移除
!nodes 除了 nodes 所指定的节点以外的所有节点上的 NUMA 特性全都会被移除
实例
# numactl –hardware #共有2个node,各领取16个CPU和128G内存
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
# numactl –cpubind=0 –membind=0 python param #python在node0中执行
# numactl –cpubind=1 –membind=1 java param #java在node1中执行
# numactl –interleave=all mongod -f /etc/mongod.conf #分配所有的node供mongodb使用
# numastat #通过numastat命令可以查看numa状态
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