sysTemd   发布时间:2019-10-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了linux cgroups 简介大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

这种机制可以根据需求把一系列系统任务及其子任务整合(或分隔)到按资源划分等级的不同组内,从而为系统资源管理提供一个统一的框架。简单说,cgroups 可以限制、记录任务组所使用的物理资源。本质上来说,cgroups 是内核附加在程序上的一系列钩子(hook),通过程序运行时对资源的调度触发相应的钩子以达到资源追踪和限制的目的。

便的限制某个容器可以使用的 CPU、内存等资源,这究竟是@R_801_10850@的呢?通过了解 cgroups 技术,我们可以窥探到 linux 系统中整个资源限制系统的脉络。从而帮助我们更好的理解和使用 linux 系统。

Task(任务) 在 linux 系统中,内核本身的调度和管理并不对进程和线程进行区分,只是根据 clone 时传入的参数的不同来从概念上区分进程和线程。这里使用 task 来表示系统的一个进程或线程。

Cgroup(控制组) cgroups 中的资源控制以 cgroup 为单位实现。Cgroup 表示按某种资源控制标准划分而成的任务组,包含一个或多个子系统。一个任务可以加入某个 cgroup,也可以从某个 cgroup 迁移到另一个 cgroup。

Subsystem(子系统) cgroups 中的子系统就是一个资源调度控制器(又叫 controllers)。比如 CPU 子系统可以控制 CPU 的时间分配,内存子系统可以限制内存的使用量。以笔者使用的 Ubuntu 16.04.3 为例,其内核版本为 4.10.0,支持的 subsystem 如下( cat /proc/cgroups):@R_450_5179@  对块设备的 IO 进行限制。@R_450_5179@    限制 CPU 时间片的分配,与 cpuacct 挂载在同一目录。     生成 cgroup 中的任务占用 CPU 资源的报告,与 cpu 挂载在同一目录。       给 cgroup 中的任务分配独立的 CPU(多处理器系统) 和内存节点。devices     允许或禁止 cgroup 中的任务访问设备。      暂停/恢复 cgroup 中的任务。     限制使用的内存页数量。@R_450_5179@       @memory    对 cgroup 中的任务的可用内存进行限制,并自动生成资源占用报告。      使用等级识别符(classid)标记网络数据包,这让 Linux 流量控制器(tc 指令)可以识别来自特定 cgroup 任务的数据包,并进行网络限制。    允许基于 cgroup 设置网络流量(netowork traffiC)的优先级。perf_event  允许使用 perf 工具来监控 cgroup。@R_450_5179@   限制任务的数量。

Hierarchy(层级) 层级有一系列 cgroup 以一个树状结构排列而成,每个层级通过绑定对应的子系统进行资源控制。层级中的 cgroup 节点可以包含零个或多个子节点,子节点继承父节点挂载的子系统。一个操作系统中可以有多个层级。

$ | cgroup

title="linux cgroups 简介" alt="linux cgroups 简介" src="https://cn.js-code.com/res/2019/02-09/09/7d95affdd20375cef659f5958303cc73.png" >

其余的挂载点则是内核支持的各个子系统的根级层级结构。

需要注意的是,在使用 systemd 系统的操作系统中,/sys/fs/cgroup 目录都是由 systemd 在系统启动的过程中挂载的,并且挂载为只读的类型。换句话说,系统是不建议我们在 /sys/fs/cgroup 目录下创建新的目录并挂载其它子系统的。这一点与之前的操作系统不太一样。

title="linux cgroups 简介" alt="linux cgroups 简介" src="https://cn.js-code.com/res/2019/02-09/09/34ccafdc2ac6667bb7b6dc5c86997084.png" >

title="linux cgroups 简介" alt="linux cgroups 简介" src="https://cn.js-code.com/res/2019/02-09/09/dc50d12fe5a68e7086b3af1232851712.png" >

ness 中保存着使用 swap 的权重等等。

我就可以通过创建或者是修改这些文件的内容来应用 cgroups。具体该怎么做呢?比如我们怎么才能限制某个进程可以使用的资源呢?接下来我们就通过简单的 demo 来演示如何使用 cgroups 限制进程可以使用的资源。

title="linux cgroups 简介" alt="linux cgroups 简介" src="https://cn.js-code.com/res/2019/02-09/09/36590ca99619fcf8ae66c6325f665c90.png" >

  • 和 /proc/cgroups 文件中的 ID 一一对应。

我就可以通过创建或者是修改这些文件的内容来应用 cgroups。具体该怎么做呢?比如我们怎么才能限制某个进程可以使用的资源呢?接下来我们就通过简单的 demo 来演示如何使用 cgroups 限制进程可以使用的资源。

$ apt cgroup-bin

$ cd /sys/fs/cgroup/ nick_cpu

title="linux cgroups 简介" alt="linux cgroups 简介" src="https://cn.js-code.com/res/2019/02-09/09/54203222ad086e1baad35172a8bd1920.png" >

$ > nick_cpu/ > nick_cpu/cpu.cfs_quota_us

》一文中介绍的 "--cpu-period=100000 --cpu-quota=200000" 就是由它们实现的。

end </span>= <span style="color: #800080"&gt;1024</span> * <span style="color: #800080"&gt;1024</span> * <span style="color: #800080"&gt;1024</span><span style="color: #000000"&gt;; </span><span style="color: #0000ff"&gt;for</span>(i = <span style="color: #800080"&gt;0</span>; i <<span style="color: #000000"&gt; end; ) { i </span>++<span style="color: #000000"&gt;; }

}

$ cputime.c - ./ cgexec -g cpu:nick_cpu ./cputime

linux cgroups 简介

$ cd /sys/fs/cgroup/ nick_memory

# 物理内存 + SWAP <= MB;** = > nick_memory/ > nick_memory/memory.swappiness

#include<.h>

<span style="color: #0000ff">#define CHUNK_SIZE 1024 1024 100

<span style="color: #0000ff">void<span style="color: #000000"> main()
{
<span style="color: #0000ff">char *<span style="color: #000000">p;
<span style="color: #0000ff">int<span style="color: #000000"> i;

</span><span style="color: #0000ff"&gt;for</span>(i = <span style="color: #800080"&gt;0</span>; i < <span style="color: #800080"&gt;5</span>; i ++<span style="color: #000000"&gt;)
{
    p </span>= <span style="color: #0000ff"&gt;malloc</span>(<span style="color: #0000ff"&gt;sizeof</span>(<span style="color: #0000ff"&gt;char</span>) *<span style="color: #000000"&gt; CHUNK_SIZE);
    </span><span style="color: #0000ff"&gt;if</span>(p ==<span style="color: #000000"&gt; NULL)
    {
        printf(</span><span style="color: #800000"&gt;"</span><span style="color: #800000"&gt;fail to malloc!</span><span style="color: #800000"&gt;"</span><span style="color: #000000"&gt;);
        </span><span style="color: #0000ff"&gt;return</span><span style="color: #000000"&gt; ;
    }
    </span><span style="color: #008000"&gt;//</span><span style="color: #008000"&gt; memset() 函数用来将指定内存的前 n 个字节设置为特定的值</span>
    memset(p,<span style="color: #800080"&gt;0</span><span style="color: #000000"&gt;,CHUNK_SIZE);
    printf(</span><span style="color: #800000"&gt;"</span><span style="color: #800000"&gt;malloc memory %d MB\n</span><span style="color: #800000"&gt;"</span>,(i + <span style="color: #800080"&gt;1</span>) * <span style="color: #800080"&gt;100</span><span style="color: #000000"&gt;);
}

}

$ mem.c -o mem

$ ./mem

$ cgexec -g memory:nick_memory ./mem

linux cgroups 简介

$ cgexec -g memory:nick_memory stress --vm --vm-bytes --vm-keep --verbose

linux cgroups 简介

$ cgexec -g cpu:nick_cpu -g memory:nick_memory ./cpumem

大佬总结

以上是大佬教程为你收集整理的linux cgroups 简介全部内容,希望文章能够帮你解决linux cgroups 简介所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:
猜你在找的sysTemd相关文章