首页 > 其他分享 >Cgroup Freezer 【ChatGPT】

Cgroup Freezer 【ChatGPT】

时间:2023-12-09 22:00:12浏览次数:39  
标签:Cgroup state THAWED Freezer sys 任务 freezer cgroup ChatGPT

Cgroup Freezer

cgroup冷冻器对于批处理作业管理系统非常有用,该系统可以启动和停止一组任务,以便根据系统管理员的需求安排机器的资源。这种程序通常用于HPC集群,以安排对整个集群的访问。cgroup冷冻器使用cgroups来描述批处理作业管理系统要启动/停止的任务集。它还提供了一种启动和停止组成作业的任务的方法。

cgroup冷冻器还可用于对运行中的任务组进行检查点。冷冻器允许检查点代码通过尝试将cgroup中的任务强制转换为静止状态来获得任务的一致图像。一旦任务处于静止状态,另一个任务就可以遍历/proc或调用内核接口来收集有关已静止任务的信息。检查点任务可以在以后重新启动,以防发生可恢复的错误。这还允许将检查点任务在集群中的节点之间迁移,方法是将收集到的信息复制到另一个节点,并在那里重新启动任务。

SIGSTOP和SIGCONT的序列并不总是足以停止和恢复用户空间的任务。这两个信号都可以从我们希望冻结的任务内部观察到。虽然SIGSTOP无法被捕获、阻塞或忽略,但它可以被等待或ptrace父任务看到。SIGCONT特别不适合,因为它可以被任务捕获。任何旨在监视SIGSTOP和SIGCONT的程序都可能因尝试使用SIGSTOP和SIGCONT来停止和恢复任务而出现问题。我们可以使用嵌套的bash shell来演示这个问题:

$ echo $$
16644
$ bash
$ echo $$
16690

从第二个不相关的bash shell:

$ kill -SIGSTOP 16690
$ kill -SIGCONT 16690

<此时16690退出并导致16644也退出>

这是因为bash可以观察到这两个信号并选择如何对其做出响应。

另一个捕获并响应这些信号的程序的例子是gdb。实际上,任何旨在使用ptrace的程序都可能在停止和恢复任务的方法上出现问题。

相比之下,cgroup冷冻器使用内核冷冻器代码来防止冻结/解冻周期对被冻结的任务变得可见。这允许上述bash示例和gdb按预期运行。

cgroup冷冻器是分层的。冻结一个cgroup会冻结属于该cgroup及其所有后代cgroup的所有任务。每个cgroup都有自己的状态(self-state)和从父级继承的状态(parent-state)。只有当这两个状态都是THAWED时,cgroup才是THAWED。

cgroup冷冻器创建了以下cgroupfs文件。

  • freezer.state:读写。

    • 读取时,返回cgroup的有效状态 - "THAWED"、"FREEZING"或"FROZEN"。这是自身状态和父状态的组合。如果任何一个正在冻结,cgroup就处于冻结状态(FREEZING或FROZEN)。

    • 当写入时,设置cgroup的自身状态。允许两个值 - "FROZEN"和"THAWED"。如果写入了FROZEN,则cgroup(如果尚未冻结)进入FREEZING状态,以及其所有后代cgroup。

    • 如果写入了THAWED,则cgroup的自身状态将更改为THAWED。请注意,如果父状态仍在冻结,有效状态可能不会更改为THAWED。如果cgroup的有效状态变为THAWED,则因为该cgroup而处于冻结状态的所有后代也将离开冻结状态。

  • freezer.self_freezing:只读。

    • 显示自身状态。如果自身状态为THAWED,则为0;否则为1。如果最后一次对freezer.state的写入是"FROZEN",则该值为1。
  • freezer.parent_freezing:只读。

    • 显示父状态。如果cgroup的祖先中没有一个被冻结,则为0;否则为1。

根cgroup是不可冻结的,上述接口文件不存在。

使用示例:

# mkdir /sys/fs/cgroup/freezer
# mount -t cgroup -ofreezer freezer /sys/fs/cgroup/freezer
# mkdir /sys/fs/cgroup/freezer/0
# echo $some_pid > /sys/fs/cgroup/freezer/0/tasks

获取冷冻器子系统的状态:

# cat /sys/fs/cgroup/freezer/0/freezer.state
THAWED

冻结容器中的所有任务:

# echo FROZEN > /sys/fs/cgroup/freezer/0/freezer.state
# cat /sys/fs/cgroup/freezer/0/freezer.state
FREEZING
# cat /sys/fs/cgroup/freezer/0/freezer.state
FROZEN

解冻容器中的所有任务:

# echo THAWED > /sys/fs/cgroup/freezer/0/freezer.state
# cat /sys/fs/cgroup/freezer/0/freezer.state
THAWED

这是在简单场景中为用户空间任务执行正确操作的基本机制。

标签:Cgroup,state,THAWED,Freezer,sys,任务,freezer,cgroup,ChatGPT
From: https://www.cnblogs.com/pengdonglin137/p/17891785.html

相关文章

  • CPUSETS 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/admin-guide/cgroup-v1/cpusets.htmlCPUSETS1.Cpusets1.1什么是cpusets?Cpusets提供了一种机制,用于将一组CPU和内存节点分配给一组任务。在本文档中,“内存节点”指的是包含内存的在线节点。Cpusets限制了任务的CPU和内存放置......
  • 控制组 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/admin-guide/cgroup-v1/cgroups.html控制组由[email protected]编写,基于CPUSETS来自CPUSETS的原始版权声明:部分版权所有(C)2004BULLSA。部分版权所有(c)2004-2006SiliconGraphics,Inc.由[email protected]修改......
  • Block IO 控制器 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/admin-guide/cgroup-v1/blkio-controller.htmlBlockIO控制器概述cgroup子系统"blkio"实现了块IO控制器。在存储层次结构中,似乎需要各种类型的IO控制策略(如比例带宽、最大带宽),无论是在叶节点还是在中间节点都需要。计划是使用......
  • CPU核算控制器 【ChatGPT】
    原文:https://www.kernel.org/doc/html/v6.6/admin-guide/cgroup-v1/cpuacct.htmlCPU核算控制器CPU核算控制器用于使用cgroups对任务进行分组,并核算这些任务组的CPU使用情况。CPU核算控制器支持多层级分组。一个核算组累积其所有子组和直接存在于其组中的任务的CPU使用情况。可......
  • RCU补丁审查清单 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/RCU/checklist.htmlRCU补丁审查清单本文档包含了一个用于生成和审查使用RCU的补丁的清单。违反以下列出的任何规则都会导致与省略锁原语相同类型的问题。这份清单基于审查这类补丁的经验,经历了相当长的一段时间,但总是欢迎改进!RCU是否......
  • Linux通用中断处理 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/core-api/genericirq.htmlLinux通用中断处理版权©2005-2010:ThomasGleixner©2005-2006:IngoMolnar简介通用中断处理层旨在为设备驱动程序提供完整的中断处理抽象。它能够处理所有不同类型的中断控制器硬件。设备驱动程序使用......
  • 循环缓冲区 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/core-api/circular-buffers.html循环缓冲区作者[email protected]@linux.ibm.comLinux提供了许多功能,可用于实现循环缓冲区。有两组这样的功能:用于确定2的幂大小缓冲区信息的便利函数。......
  • Linux中的红黑树(rbtree)【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/core-api/rbtree.html红黑树(rbtree)在Linux中日期2007年1月18日作者[email protected]红黑树是什么,它们有什么作用?红黑树是一种自平衡的二叉搜索树,用于存储可排序的键/值数据对。这与基数树(用于高效存储稀疏数组,因......
  • 本地原子操作的语义和行为 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/core-api/local_ops.html这篇文档介绍了本地原子操作的语义和行为,以及如何在任何给定的架构中实现它们,并展示了它们如何被正确地使用。它还强调了在读取这些本地变量时必须采取的预防措施,特别是当内存写入的顺序很重要时。注意请注意,......
  • 为内核对象添加引用计数器(krefs)【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/core-api/kref.html为内核对象添加引用计数器(krefs)作者[email protected]作者[email protected]其中很多内容都是从GregKroah-Hartman的2004年OLS论文和关于krefs的演示中借鉴而来的,可以在......