Linux基础 -- 使用 cgroups 变更进程的CPU亲和性绑核

使用 cgroups 设置 CPU 绑定的教学文档

1. 使用 cgroups 设置 CPU 绑定

在 Linux 中,使用 cgroups 可以对进程进行 CPU 绑定,从而控制它们在哪些 CPU 核心上运行。以下是基本步骤:

  1. 创建 cgroup

    mkdir /sys/fs/cgroup/cpuset/mygroup
    echo 0-3 > /sys/fs/cgroup/cpuset/mygroup/cpuset.cpus  # 将 CPU 核心 0 到 3 分配给 mygroup
    echo 0 > /sys/fs/cgroup/cpuset/mygroup/cpuset.mems    # 分配内存节点 0
    
  2. 将进程加入 cgroup

    echo 559 > /sys/fs/cgroup/cpuset/mygroup/tasks
    

2. 处理 “No space left on device” 错误

在执行上述命令时,如果出现 -sh: echo: write error: No space left on device 错误,可能有以下几种原因:

2.1 CPU 或内存节点未配置

确保 cpuset.cpuscpuset.mems 已正确配置:

cat /sys/fs/cgroup/cpuset/mygroup/cpuset.cpus  # 应显示已分配的 CPU 核心编号
cat /sys/fs/cgroup/cpuset/mygroup/cpuset.mems  # 应显示已分配的内存节点

如果为空,则需要进行配置:

echo 0-3 > /sys/fs/cgroup/cpuset/mygroup/cpuset.cpus
echo 0 > /sys/fs/cgroup/cpuset/mygroup/cpuset.mems

2.2 父 cgroup 配置不当

子 cgroup 只能分配父 cgroup 已分配的资源。确保父 cgroup 中已正确配置 CPU 和内存节点:

cat /sys/fs/cgroup/cpuset/cpuset.cpus
cat /sys/fs/cgroup/cpuset/cpuset.mems

2.3 任务已绑定到其他 cgroup

确保目标进程的当前资源配置与新 cgroup 兼容。可以使用 /proc/<PID>/cgroup 来查看进程当前的 cgroup。

2.4 任务数量限制

某些 cgroup 可能对任务数量有限制,检查任务数量是否超出限制:

cat /sys/fs/cgroup/cpuset/mygroup/tasks

2.5 重新配置 cgroup

如果问题无法解决,可以删除并重新创建 cgroup:

rmdir /sys/fs/cgroup/cpuset/mygroup
mkdir /sys/fs/cgroup/cpuset/mygroup
echo 0-3 > /sys/fs/cgroup/cpuset/mygroup/cpuset.cpus
echo 0 > /sys/fs/cgroup/cpuset/mygroup/cpuset.mems

3. 查看进程是否成功绑定到 cgroup

要确认进程是否成功加入指定的 cgroup,可以使用以下方法:

3.1 查看 cgroup 中的任务列表

cat /sys/fs/cgroup/cpuset/mygroup/tasks

如果看到目标进程的 PID,说明进程已成功加入该 cgroup。

3.2 查看进程的 cgroup 信息

cat /proc/<PID>/cgroup

如果输出中包含 cpuset:/mygroup,说明进程已成功绑定到 mygroup cgroup。

4. 查看进程是否成功绑定到特定 CPU 核心

4.1 使用 ps 命令查看

在某些系统上,可以使用以下命令查看进程在哪个 CPU 核心上运行:

ps -o pid,psr,comm
  • psr 列表示进程当前运行的 CPU 核心编号。

4.2 使用 tophtop

  • top:运行 top,按 f 键,然后选择 P 列 (Last used CPU (SMP)),确认后会显示进程在哪个 CPU 核心上运行。
  • htop:启动 htop,默认显示每个进程的 CPU 核心信息。

4.3 查看 /proc/<PID>/stat

通过读取 /proc/<PID>/stat 文件可以找到进程运行的 CPU 核:

cat /proc/<PID>/stat
  • 第 39 个字段表示该进程最近使用的 CPU 核心编号。

4.4 使用 taskset 验证

使用 taskset 查看进程的 CPU 亲和性:

taskset -p <PID>

例如:

taskset -p 559

输出类似于:

pid 559's current affinity mask: 3

这里的 affinity mask 表示进程可能运行的 CPU 核心集合(以二进制位表示)。例如,3 表示可以在 CPU 核心 01 上运行。

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

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

相关文章

Docker实践与应用举例

目录 1. 引言 2. Docker的基本概念 2.1 什么是Docker容器 2.2 Docker镜像 2.3 Docker架构 3. Docker的应用场景 3.1 开发与测试环境的隔离 3.2 持续集成与持续交付&#xff08;CI/CD&#xff09; 3.3 微服务架构 4. Docker的实践案例 4.1 部署Nginx反向代理 4.2 使用…

研发线上事故风险解读之缓存篇

专业在线打字练习平台-巧手打字通&#xff0c;只输出有价值的知识。 一 前言 本文继续基于《线上事故案例集》&#xff0c;进一步深入梳理线上事故缓存使用方面的问题点&#xff0c;重点关注缓存在使用和优化过程中可能出现的问题&#xff0c;旨在为读者提供具有实践指导意义的…

学习如何将Spring Boot Jar包注册成Windows服务

​ 博客主页: 南来_北往 系列专栏&#xff1a;Spring Boot实战 在开发Spring Boot应用时&#xff0c;我们通常通过命令行或IDE手动启动项目。然而&#xff0c;在生产环境中&#xff0c;为了提升效率和稳定性&#xff0c;我们更希望应用能够自动启动&#xff0c;并且作为Wi…

OpenCV高级图形用户界面(5)获取指定滑动条(trackbar)的当前位置函数getTrackbarPos()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 返回滑动条的位置。 该函数返回指定滑动条的当前位置。 cv::getTrackbarPos() 函数用于获取指定滑动条&#xff08;trackbar&#xff09;的当前…

【H2O2|全栈】JS入门知识(二)

目录 JS 前言 准备工作 运算符 算数运算符 比较运算符 自增、自减运算符 逻辑运算符 运算符的优先级 分支语句 if-else语句 switch语句 三元表达式 结束语 JS 前言 本系列博客主要分享JavaScript的基础语法知识&#xff0c;本期为第二期&#xff0c;包含一些简…

Linux基础命令系列一小白必掌握

前言 为了有一个大概的复习框架所以先给出总的思维导图&#xff0c;如图&#xff1a; 目录 1.Linux的目录结构&#xff1f;Linux命令与命令行是什么&#xff1f;Linux命令基础格式&#xff1f; 2.ls命令 3.cd命令 4.mkdir命令 5.touch命令 6.cat命令 7.cp命令 8.mv命令…

大数据开发电脑千元配置清单

大数据开发电脑配置清单 电脑型号HUANANZHI 台式电脑操作系统Windows 11 专业版 64位&#xff08;Version 23H2 / DirectX 12&#xff09;处理器英特尔 Xeon(至强) E5-2673 v3 2.40GHz主板HUANANZHI X99-P4T&#xff08;P55 芯片组&#xff09;显卡NVIDIA GeForce GT 610 ( 2…

PLM预训练语言模型Pre-trained Language Model

预训练语言模型&#xff08;Pre-trained Language Model&#xff0c;PLM&#xff09; gpt就是一个典型的例子 一、PLM 的定义与概念 预训练语言模型是一种在大规模文本数据上进行无监督学习得到的语言模型。它通过学习语言的统计规律、语法结构和语义表示&#xff0c;为各种自…

模板方法模式、策略模式(C++)

模板方法模式&#xff1a; 定义&#xff1a;定义一个操作算法的框架&#xff0c;实现步骤延迟到子类中去实现 策略模式&#xff1a; 定义&#xff1a;定义一系列的算法&#xff0c;把它们一个个封装起来&#xff0c;并且使它们可相互替换。该模式使得算法可独立于使用它的客户…

开源GenImage的图片检测工具使用指南

引言 GenImage是一款开源的图片检测工具&#xff0c;旨在帮助用户在各种应用场景中进行图像处理和分析。该工具具有灵活性、可扩展性和高效性&#xff0c;适合从事计算机视觉、图像处理和深度学习的研究人员和开发者使用。本文将详细介绍如何安装、配置和使用GenImage进行图片…

深入剖析递归算法:原理、特点、应用与优化策略

在上一篇文章&#x1f449;【剖析十大经典二叉树题目】中&#xff0c;运用到了大量的递归算法&#xff0c;故本文将解析递归算法。 目录 &#x1f4af;引言 &#x1f4af;递归算法的定义与原理 ⭐定义 ⭐原理 &#x1f4af;递归算法的特点 ⭐简洁性 ⭐可读性 ⭐通用性 …

linux下编译鸿蒙版boost库

我在上一篇文章中介绍了curl和openssl的编译方式&#xff08;linux下编译鸿蒙版curl、openssl-CSDN博客&#xff09;&#xff0c;这篇再介绍一下boost库的编译。 一.环境准备 1.鸿蒙NDK 下载安装方式可以参考上篇文章&#xff0c;完毕后NDK的路径为&#xff1a;/home/ubuntu…

Java学习Day47:戏耍黑手道人(项目记录)

1.项目背景 2.技术选择 3.环境搭建 1.创建空项目 创建health_parent父文件用来控制依赖&#xff0c;类型为quickStart 打包方式为&#xff0c;pom&#xff1a;用在父级工程或聚合工程中&#xff0c;用来做jar包的版本控制&#xff0c;必须指明这个聚合工程的打包方式为pom。…

信息抽取数据集处理——RAMS

引言 RAMS数据集&#xff08;RAMS&#xff1a;Richly Annotated Multilingual Schema-guided Event Structure&#xff09;由约翰斯霍普金斯大学于2020年发布&#xff0c;是一个以新闻为基础的事件抽取数据集。它标注了9,124个事件&#xff0c;涵盖了139种不同的事件类型和65种…

服务端技术架构演进之路

服务端技术架构演进之路 目录 服务端技术架构演进之路 0.架构中常见概念及理解 1.单机架构 2.应用数据分离架构 3.应用服务器集群架构 4.读写分离/主从分离架构 5.冷热分离架构 6.垂直分库架构 7.微服务架构 8.容器编排架构 本文以一个 " 电子商务 " 应…

Android 未来可能支持 Linux 应用,Linux 终端可能登陆 Android 平台

近日&#xff0c;根据 android authority 的消息&#xff0c;Google 正在开发适用于 Android 的 Linux 终端应用&#xff0c;而终端应用可以通过开发人员选项启用&#xff0c;并将 Debian 安装在虚拟机中。 在几周前&#xff0c;Google 的工程师开始为 Android 开发新的 Termi…

R语言绘图——文本注释

在R语言中&#xff0c;文本注释通常用于向图形中添加注释或说明&#xff0c;可以通过一些函数在图形上添加文字、标签等。以下是R中处理文本注释的常见函数和方法。 0x01 text()函数 一、常见语法 text() 函数允许你在绘图的指定位置上添加文字注释。其常用语法如下&#xf…

应急实战(10):Linux后门帐号

目录 1. Prepare 1.1 部署安全设备 2. Detect 2.1 设备产生告警 3. Contain 4. Eradicate 4.1 删除后门帐号 4.2 加固弱口令帐号 5. Recover 5.1 恢复帐号登录 6. Follow-Up 6.1 修改登录端口 6.2 开启命令记录 1. Prepare 1.1 部署安全设备 部署主机安全产品&#xff1a;牧云H…

自定义多级联动选择器指南(uni-app)

多端支持&#xff1a;可以运行在H5、APP、微信小程序还是支付宝小程序&#xff0c;都可以轻松使用改组件。自定义配置&#xff1a;您可以根据需要配置选择器的级数&#xff0c;使其适应不同的数据结构和用例。无限级联&#xff1a;此组件支持无限级联选择&#xff0c;使您能够创…

类和对象(完结)

文章目录 一对构造函数的补充1初始化链表2必须在初始化链表定义的情况3对于在类中成员变量初始化的总结4总结二类型转换1格式2规则三static成员1规则四友元1定义2 两种例子五匿名对象1格式2特殊情况 一对构造函数的补充 1初始化链表 结构&#xff1a;类名&#xff08;参数&…