当前位置: 首页 > ds >正文

Linux 内核中 cgroup 子系统 cpuset 是什么?

cpuset 是 Linux 内核中 cgroup(控制组) 的一个子系统,用于将一组进程(或任务)绑定到特定的 CPU 核心内存节点(NUMA 节点)上运行。它通过限制进程的 CPU 和内存资源的使用范围,优化系统性能(如减少缓存失效、提高 NUMA 本地性)或实现资源隔离(如容器场景)。


1. 核心功能

  1. CPU 绑定
    将进程限制在指定的 CPU 核心(或超线程)上运行,避免跨核心的上下文切换,提高缓存利用率。

  2. 内存节点绑定
    在 NUMA 架构中,将进程的内存分配限制在指定的 NUMA 节点,减少跨节点访问内存的延迟。

  3. 动态迁移控制
    允许或禁止进程在绑定 CPU 核心之间迁移。


2. 关键配置参数

在 cgroup 的 cpuset 子系统中,通过以下文件配置资源范围:

文件作用
cpuset.cpus指定允许使用的 CPU 核心列表(如 0-31,5)。
cpuset.mems指定允许使用的内存节点(NUMA 节点)列表(如 00-1)。
cpuset.cpu_exclusive是否独占 CPU 核心(其他 cgroup 不能使用相同的 CPU)。
cpuset.mem_exclusive是否独占内存节点(其他 cgroup 不能使用相同的内存节点)。
cpuset.memory_migrate当内存节点不可用时,是否自动迁移进程的内存到新节点。
cpuset.sched_load_balance是否允许内核在这些 CPU 上执行负载均衡(默认允许)。

3. 使用场景

  1. 容器资源隔离
    在 Docker、Kubernetes 等容器平台中,通过 cpuset 限制容器只能使用指定的 CPU 核心和内存节点,避免资源争抢。

    docker run --cpuset-cpus="0-3" --cpuset-mems="0" my_container
    
  2. 高性能计算
    将计算密集型任务绑定到专用 CPU 核心,减少上下文切换开销,提高缓存命中率。

  3. NUMA 优化
    在 NUMA 架构服务器中,将进程及其内存分配到同一 NUMA 节点,降低内存访问延迟。


4. 配置示例

1. 手动配置 cgroup
# 创建 cgroup
mkdir /sys/fs/cgroup/cpuset/my_group# 分配 CPU 0-3 和内存节点 0
echo 0-3 > /sys/fs/cgroup/cpuset/my_group/cpuset.cpus
echo 0 > /sys/fs/cgroup/cpuset/my_group/cpuset.mems# 禁止负载均衡(专用核心)
echo 0 > /sys/fs/cgroup/cpuset/my_group/cpuset.sched_load_balance# 将进程 PID 1234 加入该 cgroup
echo 1234 > /sys/fs/cgroup/cpuset/my_group/tasks
2. 通过 systemd 配置

在 systemd 服务文件中添加:

[Service]
CPUAffinity=0-3
AllowedCPUs=0-3
AllowedMemoryNodes=0

5. 注意事项

  • 父子 cgroup 继承性:子 cgroup 的 CPU 和内存范围不能超出父 cgroup 的范围。
  • 默认值:如果未设置 cpuset.mems,进程可能无法分配内存。
  • 动态迁移:若允许迁移(cpuset.memory_migrate=1),进程内存可能被迁移到新节点,但可能引入延迟。

6. cpuset vs cpu 子系统

  • cpuset:控制进程在哪些物理 CPU 核心和内存节点上运行。
  • cpu:控制进程的 CPU 时间分配(通过 CFS 或实时调度策略)。

通过 cpuset,可以精细控制进程的物理资源位置,尤其适合对性能敏感或需要严格隔离的场景(如容器、虚拟化、HPC)。

http://www.xdnf.cn/news/1328.html

相关文章:

  • nodejs模块暴露数据的方式,和引入(导入方式)方式
  • 高级java每日一道面试题-2025年4月21日-基础篇[反射篇]-如何使用反射获取一个类的所有方法?
  • 移动通信运营商对MTU的大小设置需求
  • 【codeforces思维题】前缀和的巧妙应用(2053B)
  • 【AI News | 20250422】每日AI进展
  • 计算机组成原理---总线系统的详细概述
  • HCIP-H12-821 核心知识梳理 (5)
  • 如何修改文件termsrv.dll实现多用户同时远程
  • 一个关于相对速度的假想的故事-4
  • AGI大模型(12):向量检索之关键字搜索
  • 企业战略到数字化落地 —— 第四章 SOP 的概念
  • 几种电气绝缘类型
  • Mininet--node.py源码解析
  • 学习笔记——《Java面向对象程序设计》-抽象和接口
  • 实验1python基本网络应用
  • 为TA开发人员介绍具有最新改进的Kinibi-610a
  • 【Vue3 / TypeScript】 项目兼容低版本浏览器的全面指南
  • 【MySQL】数据库基础
  • 从马拉松到格斗大赛:人形机器人撕开的万亿市场,正在改写AI规则
  • STM32单片机入门学习——第45节: [13-2] 修改频主睡眠模式停止模式待机模式
  • G1 人形机器人硬件构成与接口
  • 图像挖掘课程笔记-第一章:了解机器视觉
  • 【TeamFlow】4.3.2 细化时间单位
  • 设备预测性维护系统部署成本:技术架构与成本优化策略解析
  • Linux——基于socket编程实现简单的Tcp通信
  • Size of map written was 1, but number of entries written was 0. 异常分析
  • 进阶篇 第 7 篇 (终章):融会贯通 - 多变量、模型选择与未来之路
  • 数据可视化--数据探索性分析
  • 数据库MySQL学习——day1(创建表与数据类型)
  • win10中打开python的交互模式