CGroup系列七CPUSET子系统

Posted 高桐@BILL

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CGroup系列七CPUSET子系统相关的知识,希望对你有一定的参考价值。

写在前面

cpuset子系统提供了一种机制为进程分配CPU和内存结点,内存节点包括网络内内存节点。

它可以限制当前层级中的进程使用CPU和内存。与其他子系统一样,cpuset子系统通过在虚拟文件系统中创建层级目录以及参数文件的方式进行管理。这些文件和层级实际上就是存在于内核中的一些钩子,通过这些钩子来管理系统资源。

系统进程通过sched_setaffinity(2) 系统调用包含CPU资源到其CPU关联掩码中。再通过mbind(2)和set_mempolicy(2)系统调用来包含内存结点到其内存策略中。它们都是通过cpuset进行过滤,过滤掉那些应该在进程cpuset中的cpu和内存结点。调度器不会在不属于进程cpus_allowed向量中的cpu上调度该进程。内核的内存页分配器也同样不会在不属于进程的mems_allowed向量的内存结点上为进程分配内存。

用户空间代码可以通过在CGroup虚拟文件系统中挂载cpuset子系统,创建和销毁cpuset控制组,管理分配CPU和Memory资源给这些cpuset控制组的属性和权限,设置和查询这些控制组附加了哪些进程,列出所有附加到cpuset控制组上的进程pid等。

cpuset子系统的地位不言而喻,一台设备最贵的硬件就是其最大的瓶颈,比如车船航天器中的发动机。服务器,手机,车机里的cpu资源就是发动机,因为资源有限,要合适的分配资源,达到资源最优配置,提高资源利用率。

一、实现原理

内核已经实现了调度亲和力机制(sched_setappinity)来指定进程调度在哪个核上,通过mbind(set_mempolicy)进程运行在哪个内存节点上。cpuset对这两种机制做了一些拓展。

  • cpuset子系统就是linux内核已知的可用可访问cpu和内存资源的抽象;
  • cp

以上是关于CGroup系列七CPUSET子系统的主要内容,如果未能解决你的问题,请参考以下文章

CGroup原理篇V11.2 CGroup的用法

CGroup系列三CGroup使用指南

docker cgroup技术之cpu和cpuset

CGroup系列六CPUACCT子系统

CGroup系列十FREEZER子系统

Docker通过Cgroup 资源配置