Linux中的numactl命令指南

假设我们想控制线程如何被分配到处理器核心,或者选择我们想分配数据的位置,那么numactl命令就适合此类任务。在这篇文章中,我们讨论了如何使用numactl命令执行此类操作。

目录:

  1. 介绍
  2. 语法
  3. 命令
  4. 总结
  5. 参考文献

简介

现代处理器采用*非统一内存访问(NUMA)*的方式进行硬件设计。

有时我们想控制线程如何被分配到处理器内核上,以避免使用超线程,而是使用硬件线程,或者确保一个任务不会频繁迁移。

在Linux中,numactl被用来完成这样的任务,它能够选择我们想要执行任务的内核,也能够选择我们想要分配数据的地方,这要感谢两个策略,NUMA调度策略NUMA内存放置策略

语法。

语法如下:

numactl [ --interleave nodes ] [ --preferred node ] [ --membind nodes ] [ --cpunodebind nodes ] [ --physcpubind cpus ] [ --localalloc ] command {arguments ...}

各种策略的设置是:

--interleave=nodes, --i nodes设置内存交错策略,内存将使用循环机制在节点上分配,当它不能在当前的交错上分配时,目标将回到其他节点上。
我们可以指定*'all',这将意味着当前集合中的所有节点。
要指定节点,我们写
n,n,nn-n,n-n,
例如0-4,指定0到4的节点。
要指定相对节点,我们可以写,
+n,n,n+n-n+n,n*-n,其中*+*表示节点数字是相对于进程在当前cpuset中允许的节点集合而言的。

反过来说,我们可以写*!n-n来表示除n-n*节点之外的所有节点。

--preferred=node指定我们希望在可能的情况下分配到指定的节点上,否则就退到其他节点上。这里也可以使用相对符号。

--membind=nodes,-m nodes表示我们只从节点分配内存。当节点上没有足够的内存可用时,分配将失败。

--cpunodebind=nodes, -N nodes意思是只在指定节点的CPU上执行命令。节点可能由几个CPU组成。

--physcpubind=cpus, -C cpus意味着只在指定的cpus上执行进程。这将采用*/proc/cpuinfo*文件中描述的cpu编号或相对于当前cpuset的相对cpus。

要查看活动的cpus列表,我们写道:

cat /proc/cpuinfo

指定cpus类似于之前描述的关于*-interleave=nodes的规范,-i nodes*

--localalloc -l,当我们想在当前节点上进行分配时使用:

numactl [ --huge ] [ --offset offset ] [ --shmmode shmmode ] [ --length length ] [ --strict ] [ --shmid id ] --shm shmkeyfile | --file tmpfsfile [ --touch ] [ --dump ] [ --dump-nodes ]

--huge, 用于在创建SYSV共享内存段时使用巨大的页面。

--offset offset, 用于指定共享内存段的偏移量,例如m代表MB,g代表GB,k代表KB,默认为0,如果没有指定,则以字节为单位。

--shmmode shmmode, 在 --shmid 或 --shm 之前有效,在创建共享内存段时,我们将其设置为shmmode数字模式。

--length长度,指定新段的长度,例如m代表MB,k代表KB,g代表GB,默认值是字节。

--strict, 当共享内存段中具有策略的区域中的一个页面与一个冲突的策略发生故障时,产生一个错误。默认情况下,这被默默地忽略。

--shmid id, 用于创建或使用一个具有指定数字id的共享内存段。

--shm shmkeyfile, 用来创建或使用一个共享内存段,其ID是用shmkeyfile的ftok生成的。

--file tmpfsfile, 为tmpfs或hugetlbfs中的一个文件设置策略。

--touch, 触摸页面,以便尽早执行策略。当应用程序映射和访问一个页面时,策略就会被应用。默认情况下,这些页面不被触及。

--dump, 用于指定范围内的转储策略。

--dump-nodes, 转储指定范围内的所有节点。

要查看系统的NUMA架构,请写:

numactl --hardware

要查看当前进程的NUMA策略,请写:

numactl --show

要查看NUMA内存命中率统计,请写。

cat /sys/devices/system/node/node*/numastat

命令

要在cpu 0上使用节点0和1的内存运行一个程序testProg,我们写:

numactl --cpubind=0 --membind=0,1 testProg

要在当前cpu组的cpu0-4和8-12上运行一个应用程序testApp,我们写道:

numactl --physcpubind=+0-4,8-12 testApp arguments

为了运行一个进程bigProcess并在所有CPU上交错使用其内存,我们写道:

numactl --interleave=all bigProcess arguments

要在首选节点1上运行一个进程,并显示结果状态,我们写道:

numactl --preferred=1 numactl --show

要在节点4上运行一个进程并在节点4和5上分配内存,我们写道:

numactl --cpubind=4 --membind=4,5 process

要在numa节点2、3、4上执行process:

numactl -N 2,3,4 -l process

总结

numactl是一个Linux函数,它以指定的NUMA调度或内存放置策略运行进程。

它将进程与Linux NUMA超级计算机上的处理器绑定。
使用numactl 的目的是将进程限制在一个numa池或CPU节点上,而不是特定的CPU核。

通过numactl,我们可以绑定CPU的内存位置,以防止跨NUMA池/内存节点的跳转。

参考资料

  1. man numactl.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/673414.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QGIS编译(跨平台编译)之五十一:Shapelib编译(Windows、Linux、MacOS环境下编译)

文章目录 一、Shapelib介绍二、Shapelib下载三、Windows下编译四、Linux下编译五、MacOS下编译一、Shapelib介绍 Shapelib是一个开源的C/C++库,用于读取、写入和处理ESRI Shapefile格式的空间数据。Shapefile是一种常用的GIS数据格式,包含矢量数据,如点、线、面等。Shapeli…

rkmedia使用记录

1.函数 1) RK_MPI_VI_SetChnAttr _CAPI RK_S32 RK_MPI_VI_SetChnAttr(VI_PIPE ViPipe, VI_CHN ViChn,const VI_CHN_ATTR_S *pstChnAttr); /*VI通道属性结构体指针1)pcVideoNode:video节点路径2)u32BufCnt:VI捕获视频…

ROS学习笔记13:导航相关消息

前言 本人ROS小白,利用寒假时间学习ROS,在此以笔记的方式记录自己每天的学习过程。争取写满20篇(13/20)。 环境:Ubuntu20.04、ROS1:noetic 环境配置:严格按照下方学习链接的教程配置,基本一次成功。 学习链…

VBA技术资料MF116:测试操作系统是否为64位

我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。我的教程一共九套,分为初级、中级、高级三大部分。是对VBA的系统讲解,从简单的入门,到…

洛谷P1039 [NOIP2003提高组]侦探推理

题目描述 明明同学最近迷上了侦探漫画《柯南》并沉醉于推理游戏之中,于是他召集了一群同学玩推理游戏。游戏的内容是这样的,明明的同学们先商量好由其中的一个人充当罪犯(在明明不知情的情况下),明明的任务就是找出这…

Android Studio 2022.3.1版本 引入包、maven等需要注意的问题

普通包 以前: // okhttp3 implementation com.squareup.okhttp3:okhttp:3.10.0 新版本: implementation("com.github.bumptech.glide:glide:3.7.0") libs文件夹中的包 以前: android {******sourceSets.main{jniLibs.srcDir…

使用SM4国密加密算法对Spring Boot项目数据库连接信息以及yaml文件配置属性进行加密配置(读取时自动解密)

一、前言 在业务系统开发过程中,我们必不可少的会使用数据库,在应用开发过程中,数据库连接信息往往都是以明文的方式配置到yaml配置文件中的,这样有密码泄露的风险,那么有没有什么方式可以避免呢?方案当然是有的,就是对数据库密码配置的时候进行加密,然后读取的时候再…

人工智能|推荐系统——基于tensorflow的个性化电影推荐系统实战(有前端)

代码下载: 基于tensorflow的个性化电影推荐系统实战(有前端).zip资源-CSDN文库 项目简介: dl_re_web : Web 项目的文件夹re_sys: Web app model:百度云下载之后,把model放到该文件夹下recommend: 网络模型相…

Python在小型无人机

Python在小型无人机的发展和研发中具有重要性。以下是几个原因: 简单易学:Python是一种简单易学的编程语言,具有简洁的语法和易于理解的语言结构。这使得开发人员可以更快速地理解和编写代码,从而加快了研发的进程。 多用途性&am…

Android 自定义BaseActivity

直接上代码: BaseActivity代码: package com.example.custom.activity;import android.annotation.SuppressLint; import android.app.Activity; import android.content.pm.ActivityInfo; import android.os.Bundle; import android.os.Looper; impor…

寒假作业-day5

1>现有无序序列数组为23,24,12,5,33,5347&#xff0c;请使用以下排序实现编程 函数1:请使用冒泡排序实现升序排序 函数2:请使用简单选择排序实现升序排序 函数3:请使用直接插入排序实现升序排序 函数4:请使用插入排序实现升序排序 代码&#xff1a; #include<stdio.h&g…

macbook电脑如何永久删除app软件?

在使用MacBook的过程中&#xff0c;我们经常会下载各种App来满足日常的工作和娱乐需求。然而&#xff0c;随着时间的积累&#xff0c;这些App不仅占据了宝贵的硬盘空间&#xff0c;还可能拖慢电脑的运行速度。那么&#xff0c;如何有效地管理和删除这些不再需要的App呢&#xf…

如何使用websocket

如何使用websocket 之前看到过一个面试题&#xff1a;吃饭点餐的小程序里&#xff0c;同一桌的用户点餐菜单如何做到的实时同步&#xff1f; 答案就是&#xff1a;使用websocket使数据变动时服务端实时推送消息给其他用户。 最近在我们自己的项目中我也遇到了类似问题&#xf…

使用CMSIS-DSP库进行嵌入式音频信号处理

在嵌入式环境下&#xff0c;使用CMSIS-DSP库进行音频信号处理是一种常见的应用场景。通过CMSIS-DSP库&#xff0c;开发人员可以利用嵌入式系统的处理能力来实现各种数字信号处理&#xff08;DSP&#xff09;功能&#xff0c;例如音频滤波、均衡器、噪音消除等。本文将介绍如何在…

问题 | IT行业有哪些证书含金量高?

IT行业有哪些证书含金量高? Cisco认证&#xff08;CCNA&#xff0c;CCNP&#xff0c;CCIE&#xff09;&#xff1a;思科是全球最大的网络设备供应商之一&#xff0c;它的认证证书在网络和通信领域被广泛认可。CCNA是初级认证&#xff0c;CCNP是高级认证&#xff0c;而CCIE是专…

NLP_Seq2Seq编码器-解码器架构

文章目录 Seq2Seq架构构建简单Seq2Seq架构1.构建实验语料库和词汇表2.生成Seq2Seq训练数据3. 定义编码器和解码器类4.定义Seq2Seq架构5. 训练Seq2Seq架构6.测试Seq2Seq架构 归纳Seq2Seq编码器-解码器架构小结 Seq2Seq架构 起初&#xff0c;人们尝试使用一个独立的RNN来解决这种…

CentOS7搭建Hadoop集群

准备工作 1、准备三台虚拟机&#xff0c;参考&#xff1a;CentOS7集群环境搭建&#xff08;3台&#xff09;-CSDN博客 2、配置虚拟机之间免密登录&#xff0c;参考&#xff1a;CentOS7集群配置免密登录-CSDN博客 3、虚拟机分别安装jdk&#xff0c;参考&#xff1a;CentOS7集…

【51单片机】实现一个动静态数码管显示项目(前置知识铺垫,代码&图演示)(5)

前言 大家好吖&#xff0c;欢迎来到 YY 滴单片机 系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过单片机的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY…

vue electron应用调exe程序

描述 用Python写了一个本地服务编译成exe程序&#xff0c;在electron程序启动后&#xff0c;自动执行exe程序 实现 1. 使用node的child_process模块可以执行windows执行&#xff0c;通过指令调exe程序 // electron/index.js var cp require("child_process"); /…

.NET Core 实现 JWT 认证

写在前面 JWT&#xff08;JSON Web Token&#xff09;是一种开放标准, 由三部分组成&#xff0c;分别是Header、Payload和Signature&#xff0c;它以 JSON 对象的方式在各方之间安全地传输信息。通俗的说&#xff0c;就是通过数字签名算法生产一个字符串&#xff0c;然后在网络…