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

Github-blog
CSDN-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把物理内存划分为三个层次来管理

层次描述
存储节点(Node)CPU被划分为多个节点(node), 内存则被分簇, 每个CPU对应一个本地物理内存, 即一个CPU-node对应一个内存簇bank,即每个内存簇被认为是一个节点
管理区(Zone)每个物理内存节点node被划分为多个内存管理区域, 用于表示不同范围的内存, 内核可以使用不同的映射方式映射物理内存
页面(Page)内存被细分为多个页面帧, 页面是最基本的页面分配的单位

memory node详细介绍

解决

为其指定特定的memory_node,例如指定0号内存节点:

echo 0 > cpuset.mems

此时,tasks就可以添加新的pid:

echo 4847 > tasks 

以上~

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值