首页 > 系统相关 >进程数量控制器 【ChatGPT】

进程数量控制器 【ChatGPT】

时间:2023-12-09 22:22:22浏览次数:38  
标签:sys 控制器 fs parent current cgroup 进程 ChatGPT pids

进程数量控制器

摘要

进程数量控制器用于允许 cgroup 层次结构在达到一定限制后阻止任何新任务进行 fork() 或 clone()。

由于很容易达到任务限制而不触及任何已设置的 kmemcg 限制,PID 是一种基本资源。因此,在 cgroup 层次结构的范围内,必须通过允许限制 cgroup 中任务数量的资源来防止 PID 耗尽。

用法

要使用 pids 控制器,需设置 pids.max 中的任务最大数量(出于明显的原因,根 cgroup 中不可用)。当前 cgroup 中的进程数量由 pids.current 给出。

组织操作不会受到 cgroup 策略的阻碍,因此可能出现 pids.current > pids.max 的情况。这可以通过将限制设置为小于 pids.current,或者将足够多的进程附加到 cgroup 中使得 pids.current > pids.max 来实现。但是,不可能通过 fork() 或 clone() 违反 cgroup 策略。如果创建新进程会导致违反 cgroup 策略,fork() 和 clone() 将返回 -EAGAIN。

要将 cgroup 设置为无限制,将 pids.max 设置为 "max"。这是所有新 cgroup 的默认设置(注意,PID 限制是分层的,因此遵循层次结构中最严格的限制)。

pids.current 跟踪所有子 cgroup 层次结构,因此 parent/pids.current 是 parent/child/pids.current 的超集。

pids.events 文件包含事件计数器:

  • max:因达到限制而 fork 失败的次数。

示例

首先,挂载 pids 控制器:

# mkdir -p /sys/fs/cgroup/pids
# mount -t cgroup -o pids none /sys/fs/cgroup/pids

然后创建一个层次结构,设置限制并将进程附加到其中:

# mkdir -p /sys/fs/cgroup/pids/parent/child
# echo 2 > /sys/fs/cgroup/pids/parent/pids.max
# echo $$ > /sys/fs/cgroup/pids/parent/cgroup.procs
# cat /sys/fs/cgroup/pids/parent/pids.current
2

需要注意的是,尝试突破设置的限制(在本例中为 2)将失败:

# cat /sys/fs/cgroup/pids/parent/pids.current
2
# ( /bin/echo "Here's some processes for you." | cat )
sh: fork: Resource temporary unavailable

即使我们迁移到一个没有设置限制的子 cgroup 中,也无法突破层次结构中最严格的限制(在本例中为父级的限制):

# echo $$ > /sys/fs/cgroup/pids/parent/child/cgroup.procs
# cat /sys/fs/cgroup/pids/parent/pids.current
2
# cat /sys/fs/cgroup/pids/parent/child/pids.current
2
# cat /sys/fs/cgroup/pids/parent/child/pids.max
max
# ( /bin/echo "Here's some processes for you." | cat )
sh: fork: Resource temporary unavailable

我们可以设置一个小于 pids.current 的限制,这将完全阻止任何新进程的 fork(请注意,shell 本身也计入 pids.current):

# echo 1 > /sys/fs/cgroup/pids/parent/pids.max
# /bin/echo "We can't even spawn a single process now."
sh: fork: Resource temporary unavailable
# echo 0 > /sys/fs/cgroup/pids/parent/pids.max
# /bin/echo "We can't even spawn a single process now."
sh: fork: Resource temporary unavailable

标签:sys,控制器,fs,parent,current,cgroup,进程,ChatGPT,pids
From: https://www.cnblogs.com/pengdonglin137/p/17891917.html

相关文章

  • HugeTLB 控制器 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/admin-guide/cgroup-v1/hugetlb.htmlHugeTLB控制器HugeTLB控制器可以通过首先挂载cgroup文件系统来创建。#mount-tcgroup-ohugetlbnone/sys/fs/cgroup通过上述步骤,初始或父HugeTLB组将在/sys/fs/cgroup中可见。在启动......
  • 设备白名单控制器 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/admin-guide/cgroup-v1/devices.html设备白名单控制器1.描述实现一个cgroup来跟踪和强制设备文件的打开和mknod限制。设备cgroup将设备访问白名单与每个cgroup关联起来。白名单条目有4个字段。'type'是(all)、c(字符)或......
  • Cgroup Freezer 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/admin-guide/cgroup-v1/freezer-subsystem.htmlCgroupFreezercgroup冷冻器对于批处理作业管理系统非常有用,该系统可以启动和停止一组任务,以便根据系统管理员的需求安排机器的资源。这种程序通常用于HPC集群,以安排对整个集群的访问。cgr......
  • 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的幂大小缓冲区信息的便利函数。......