numactl

本文深入解析了NUMA技术的工作原理及如何通过numactl命令控制进程与共享存储之间的交互。涵盖了numactl命令的各种参数,如--interleave、--membind、--cpunodebind等,并提供了实际应用场景示例。

 

相关命令:暂无相关命令

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 特性全都会被移除

最后更新 2016-01-31 16:03:24
合作编辑者如下:poto456

有误,我来改正
(0)

正确
(0)

收藏
(0)

例1


 
# 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 

最后更新 2016-01-31 16:03:24 - 合作编辑者如下:张映

有误,我来改正
(0)

正确
(3)

### 解决 `numactl not found` 的方法 当系统提示 `numactl: command not found` 时,通常是因为该命令所在的软件包尚未安装或者环境变量配置不正确。以下是可能的原因以及解决方案: #### 原因分析 1. **Numactl 软件包未安装** Numactl 是一个用于管理 NUMA(Non-Uniform Memory Access)架构的工具集。如果操作系统中没有安装此软件包,则会报错 `command not found`。 2. **路径问题** 即使已安装 numactl 工具,但如果其可执行文件所在目录不在系统的 PATH 环境变量中,也会导致类似的错误。 --- #### 安装 Numactl 软件包 在大多数基于 Linux 的发行版中,可以通过包管理器来安装 numactl。 ##### 对于 CentOS/RHEL/Fedora 发行版: 运行以下命令以安装 numactl 软件包: ```bash yum install numactl -y ``` ##### 对于 Ubuntu/Debian 发行版: 运行以下命令以安装 numactl 软件包: ```bash apt-get update && apt-get install numactl -y ``` 完成安装后,可以验证是否成功通过以下命令: ```bash which numactl ``` 如果没有返回为空的结果,则说明已经正确安装并可用[^3]。 --- #### 配置环境变量 (PATH) 如果确认 numactl 已经被安装但仍显示找不到命令的情况,可能是由于它的二进制文件位置并未包含在当前用户的 PATH 中。此时需要手动将其添加到 PATH 变量里。 假设 numactl 存在于 `/usr/bin/numactl` 或其他自定义路径下,可以在 `.bashrc`, `.zshrc` 文件末尾追加如下内容: ```bash export PATH=$PATH:/path/to/your/numactl/directory ``` 之后重新加载 shell 配置文件即可生效: ```bash source ~/.bashrc # 或者对于 zsh 用户来说 source ~/.zshrc ``` --- #### 检查依赖库缺失情况 有时即使安装好了 numactl 自身程序本身,但由于某些动态链接库丢失也可能引发功能异常甚至完全不可用的现象。比如之前提到过的 mysql 启动失败就是因为缺少了一个名为 libaio.so.1 的共享对象文件[^2] 。因此建议检查是否存在类似的问题。 使用 ldd 来查看是否有任何未解析的依赖项: ```bash ldd $(which numactl) ``` 如果有输出类似于下面这样的警告信息: ``` libfoo.so => not found ``` 则表明还需要额外安装对应的开发版本或其他关联组件才能让整个应用程序正常运作起来。 --- ### 总结 综上所述,要彻底解决 `numactl not found` 这一现象可以从以下几个方面入手:一是确保基础服务端口开放;二是核查客户端连接参数设置无误;三是排查防火墙策略干扰通讯链路建立过程中的阻碍因素。最后再按照上述指导逐一排除潜在隐患直至恢复正常状态为止[^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值