问题&解决:cgroups之cpuset中tasks无法加入新的pid

当尝试将pid加入到cgroups的cpuset中时遇到问题,原因是未正确配置cpu_node和mem_node。在NUMA架构下,必须指定可用的cpu_node和memory_node,例如设置为0号节点。完成配置后,可以成功添加新的pid到tasks。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Github-blog
优快云-blog

问题:cpuset中tasks无法加入新的pid

root@xftony:~/test/c0/c1/cputest# echo 4847 > tasks  
 -bash: echo: write error: No space left on device

原因

在添加tasks之前,cpuset.cpuscpuset.mems需要提前进行配置。cpuset.cpus中为该组cgroup中可用的cpu_node, 默认情况下,配置了所有的可用cpu。cpuset.mems中为该组cgroup中可用的mem_node,默认为空。
NUMA模式下,处理器被划分成多个“节点”(node),每个节点被分配有的本地存储器空间。 每个节点被分配有的本地存储器空间. 所有节点中的处理器都可以访问全部的系统物理存储器,但是访问本节点内的存储器所需要的时间,比访问某些远程节点内的存储器所花的时间要少得多。
同时内存也被分割成多个区域(BANK,也叫“簇”),依据簇与处理器的“距离”不同, 访问不同簇的代码也会不同. 比如,可能把内存的一个簇指派给每个处理器,或则某个簇和设备卡很近,很适合DMA,那么就指派给该设备。因此当前的多数系统会把内存系统分割成2块区域,一块是专门给CPU去访问,一块是给外围设备板卡的DMA去访问。
Linux把物理内存划分为三个层次来管理

层次 描述
### CGroups 的定义与功能 CGroups(Control Groups)是 Linux 内核提供的一种机制,用于限制进程组使用的资源(如 CPU、内存、磁盘 I/O 等),并通过将进程组划分为层次结构来实现对系统资源的统一管理和限制[^2]。 ### 资源管理中的应用 YARN 中可以通过配置 `yarn.nodemanager.linux-container-executor.resources-handler.class` 来利用 CGroups 进行容器级别的资源管理[^1]。这使得 YARN 可以更精确地控制每个容器所消耗的计算资源。 #### 实时优先级设置 在 Linux 系统中,`rtprio` 参数与实时优先级相关,Systemd 利用 CGroup 对服务或任务进行资源限制时会涉及该参数[^3]。这意味着管理员可以根据需求调整特定进程的调度优先级,从而优化系统的响应能力。 #### 移动进程新的 CGroup 要将某个具体进程迁移到一个新的 CGroup 下面只需要简单操作如下命令即可完成迁移工作: ```bash echo 30167 > /path/to/newcgroup/tasks ``` 上述例子展示了如何把 PID 为 30167 的进程转移到指定路径下的新 CGroup 当中去[^4]。 ### NUMA 架构支持 对于高性能计算环境而言,CPUs 和 Memories 经常被组织成多个独立但相互连接起来形成整个计算机体系结构的一部分——即所谓的 Non-Uniform Memory Access (NUMA) 结构。在这种情况下 cpuset 子系统允许我们进一步细化哪些 CPUs 或者 memories 应当分配给某些应用程序运行期间独占使用;同时也要注意避免不必要的跨 NUMAs 数据交换因为那通常意味着更高的延迟成本以及更低效率的操作模式[^5]。 ### 示例代码展示创建并配置基本 CGroup 下面是一个简单的 Python 脚本来演示怎样程序化地建立一个名为 'my_cgroup' 的 cpu controller 类型 cgroup 并为其设定最大可用百分比: ```python import os def create_and_configure_cgroup(cg_name, max_cpu_percent): base_path = "/sys/fs/cgroup/cpu" # 创建目录 cg_dir = f"{base_path}/{cg_name}" if not os.path.exists(cg_dir): os.mkdir(cg_dir) # 设置cpu配额 with open(f"{cg_dir}/cpu.cfs_quota_us", "w") as quota_file: quota_value = int(max_cpu_percent * 100000) quota_file.write(str(quota_value)) create_and_configure_cgroup('my_cgroup', 0.5) # 配置 my_cgroup 占用最多 50% 的 CPU 时间片 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值