Linux内核工程导论

cgroup子系统

cgroup是现代andriod的基础,最初提出也是andriod内部的人员提出的,后来被实现在linux内核内。通过cgroup可以将定额的系统资源(如CPU、内存等)分配给特定的一组进程。默认情况下编译内核时打开cgroup的系统中所有进程位于同一个cgroup,就是根,这个cgroup享有所有的系统资源。

你可以通过cgroup文件系统建立一个新的cgroup,然后配置这个新的cgroup,,配置的内容包括为其分配进程,分配资源等。这个创建和分配的所有的过程都是通过cgroup文件系统通过shell echo写进文件完成的。

在用户端使用cgroup

详细的在kernelhack 里有。

我们知道实时进程对CPU的使用很可能是独占的,内核为我们提供了不从调度算法本身,而是通过使用cgroup限制实时进程使用CPU的方法:RT Scheduling和RT Throttling。这个为何不在调度本身设计?因为实时的概念只是尽快的抢占CPU,而不涉及什么时候释放(直到更实时的)。实时的策略是对的,但是如果出现了bug,将有很大概率导致系统卡死。在cgroup文件系统中,使用cpu.rt_period_us和cput.rt_runtime_us可以限制本组的实时进程的CPU占用。

还可以使用cgroup将用户端的进程分成一个个组,然后以组为单位设置调度方法。例如使用Fair Group Scheduling(该机制利用内核的CFS调度机制),实现各个分组之间的公平调度算法。

还可以使用cgroup的cpuset功能为每个进程组规定使用哪些cpu,以及每个cpu的亲和度。还可以针对特定的程序组对他们的内存进行限制、统计和强制释放。还可以针对IO操作,设置分组的IO优先级。将后台执行磁盘操作的程序放到较低优先级的分组,前台需要高响应速度的放在较高优先级分组。如此既可以有效的利用IO吞吐量,又可以不影响前台软件的使用性能。(echo 100 > /cgroup/low/blkio.weight)

版权声明:本文为博主原创文章,未经博主允许不得转载。

我想有一天和你去旅行。去那没有去过的地方,

Linux内核工程导论

相关文章:

你感兴趣的文章:

标签云: