中国领先的IT技术网站
|
|

1.3.2 认识Cgroups

《Docker从入门到实战》本书从Docker的相关概念与基础知识讲起,结合实际应用,通过不同开发环境的实战例子,详细介绍了Docker的基础知识与进阶实战的相关内容,以引领读者快速入门并提高。本节为大家介绍Cgroups。

作者:黄靖钧来源:机械工业出版社|2017-10-17 18:09

CTO训练营 | 12月3-5日,深圳,是时候成为优秀的技术管理者了


1.3.2  认识Cgroups

Cgrous是Linux内核提供的一种可以限制、记录、隔离进程组(process groups)所使用的物理资源(如CPU,内存,I/O等)的机制。最初由Google公司的工程师提出,后来被整合进Linux内核。Cgroups也是LXC为实现虚拟化所使用的资源管理手段,可以说没有Cgroups就没有LXC。

目前,Cgroups有一套进程分组框架,不同资源由不同子系统控制。一个子系统就是一个资源控制器,比如CPU子系统就是控制CPU时间分配的一个控制器。子系统必须附加(attach)到一个层级上才能起作用,一个子系统附加到某个层级以后,这个层级上的所有控制族群(control groups)都受到这个子系统的控制。

Croups各个子系统作用如下。

Blkio:为块设备设定输入/输出限制,比如物理设备(磁盘、固态硬盘、USB等)。

Cpu:提供对CPU的Cgroups任务访问。

Cpuacct:生成Cgroups中任务所使用的CPU报告。

Cpuset:为Cgroups中的任务分配独立CPU(在多核系统)和内存节点。

Devices:允许或者拒绝Cgroups中的任务访问设备。

Freezer:挂起或者恢复Cgroups中的任务。

Memory:设定Cgroups中任务使用的内存限制,并自动生成由那些任务使用的内存资源报告。

Net_cls:使用等级识别符(classid)标记网络数据包,可允许Linux流量控制程序(tc)识别从具体Cgroup中生成的数据包。

Net_prio:设置进程的网络流量优先级。

Huge_tlb:限制HugeTLB的使用。

Perf_event:允许Perf工具基于Cgroups分组做性能监测。

这样说理解起来也很吃力,下面就通过命令来挂载Cgroupfs。

  1. # mount -t cgroup -o cpuset cpuset /sys/fs/cgroup/cpuset 

这个动作一般情况下已经在Linux启动的时候做了。

查看Cgroupfs:

  1. # cpuset ls  
  2. cgroup.clone_children    cpuset.memory_pressure_enabled  
  3. cgroup.procs             cpuset.memory_spread_page  
  4. cgroup.sane_behavior    cpuset.memory_spread_slab  
  5. cpuset.cpu_exclusive     cpuset.mems  
  6. cpuset.cpus              cpuset.sched_load_balance  
  7. cpuset.effective_cpus     cpuset.sched_relax_domain_level  
  8. cpuset.effective_mems   docker  
  9. cpuset.mem_exclusive    notify_on_release  
  10. cpuset.mem_hardwall     release_agent  
  11. cpuset.memory_migrate   tasks  
  12. cpuset.memory_pressure 

在主流Linux发行版下,都可以通过/etc/cgconfig.conf或者cgroup-bin的相关指令来配置Cgroups。

  1. mount {  
  2.     cpuset = /sys/fs/cgroup/cpuset;  
  3.     momory = /sys/fs/cgroup/momory;  
  4. }  
  5. group cnsworder/test {  
  6.    perm {  
  7.         task {  
  8.                uid = root;  
  9.                gid = root;  
  10.         }  
  11.         admin {  
  12.               uid = root;  
  13.               gid = root;  
  14.         }  
  15.    }  
  16.     cpu {  
  17.          cpu.shares = 1000;  
  18.    }  
  19. }  

然后通过命令行把一个进程移动到这个Cgroups之中。

  1. # mount -t group -o cpu cpu /sys/fs/cgroup/cpuset  
  2. # cgcreate -g cpu,momory:/cnsworder  
  3. # chown root:root /sys/fs/cgroup/cpuset/cnsworder/test/*  
  4. # chown root:root /sys/fs/cgroup/cpuset/cnsworder/test/task  
  5. # cgrun -g cpu,momory:/cnsworder/test bash 

关于Cgroups子系统,本书不再过多讲述,读者可以扫描以下二维码找到很不错的学习资料,了解更多内容。

喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:365934973

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢
24H热文
一周话题
本月最赞

读 书 +更多

超级网管员——网络服务

本书全面介绍了Windows Server 2003 R2中最常用的各种服务,包括域名服务、动态IP地址服务、Windows名称服务、活动目录服务、Web服务、FTP...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊
× Phthon,最神奇好玩的编程语言