首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏田飞雨的专栏

    blkio cgroup

    blkio cgroup 基本功能 blkio 是 cgroup v1 中的一个子系统,使用 cgroup v1 blkio 子系统主要是为了减少进程之间共同读写同一块磁盘时相互干扰的问题。 而 blkio cgroup 作用在通用块管理层。 的 root 组中进行限制,而不能在其他cgroup 中进行限制,root cgroup 一般也是不做限制的。 cgroup 能分别控制某个进程的资源使用量,但是blkio cgroup 对进程资源限制的时候无法感知 memory cgroup 中进程资源的使用量,导致对 Buffered I/O 的限制一直没有实现 cgroup v1 结构如下所示: cgroup v1 因为有很多缺陷也导致了 linux 的开发者重新设计了 cgroup,也就有了 cgroup v2,在 cgroup v2 中就可以解决 Buffered

    3.1K40发布于 2021-09-08
  • 来自专栏云计算之 网络&操作系统

    Cgroup 学习

    资源统计:cgoups 可以统计系统的资源使用量 任务控制:cgroups 可以对任务执行挂起、恢复等 task task 表示进程或者线程 Cgroup 一个任务可以加入某一个cgroup 也可以从一个cgroup 迁移到另外一个cgroup Subsystem [image.png] bikio cpu cpuacct cpuset devices freezer hugetlb memory net_cls/net_prio TC可以识别特定cgroup 数据包,并进行网络限制。

    1K30发布于 2020-03-05
  • 来自专栏k-cloud-labs

    Cgroup泄露2

    kernel memory 在内核4.0以下的版本是一个实验特性,存在使用后不能删除cgroup的问题,造成cgroup泄漏。 当正常在cgroup创建一个group的目录时,条目数就加1 .我们遇到的情况就是因为开启了kmem accounting功能,虽然cgroup的目录删除了,但是条目没有回收。 这样后面就无法创建65535个cgroup了。也就是说,在当前内核版本下,开启了kmem accounting功能,会导致memory cgroup的条目泄漏无法回收。 cgroup迁移 下面对于memory cgroup子系统,简称为memcg 。对于已经泄漏的memcg,新创建的容器会继承父group,所以会加剧这个问题。 cgroup 本身是支持cgroup迁移功能的 4.2 Task migration When a task migrates from one cgroup to another, its charge

    1K00编辑于 2023-03-28
  • 来自专栏TopCoder

    Linux Cgroup浅析

    cgroup_subsys_state { struct cgroup *cgroup; atomic_t refcnt; unsigned long flags; struct css_id *id; }; cgroup 指针指向了一个 cgroup 结构,也就是进程属于的 cgroup,进程受到子系统控制就是加入到特定的cgroup来实现的,就是对应这里的cgroup,由此看出进程和 *subsys[CGROUP_SUBSYS_COUNT]; struct cgroupfs_root *root; struct cgroup *top_cgroup; struct 多个cgroup形成一个层级结构(树形结构),cgroup树上的子节点cgroup是父节点cgroup的孩子,继承父cgroup的特定的属性。 注意cgroups资源限制是针对cgroup为单位的,不管cgroup下是有一个进程还是多个进程。

    2.5K20发布于 2020-01-15
  • 来自专栏Linux内核那些事

    CGroup 介绍

    子系统 是 CGroup 用于控制某种资源(如内存或者CPU等)使用的逻辑或者算法 CGroup 使用了 虚拟文件系统 来进行管理限制的资源信息和被限制的进程列表等,例如要创建一个限制内存使用的 CGroup 然后我们使用下面命令在这个目录下面创建一个新的目录 test, $ mkdir /sys/fs/cgroup/memory/test 这样就在内存子系统的根 CGroup 下创建了一个子 CGroupCGroup 基本概念 在介绍 CGroup 原理前,先介绍一下 CGroup 几个相关的概念,因为要理解 CGroup 就必须要理解他们: 任务(task)。 CGroup 操作规则 使用 CGroup 时,必须按照 CGroup 一些操作规则来进行操作,否则会出错。 关于 CGroup 的介绍和使用就到这里,接下来我们来分析一下内核是怎么实现 CGroup 的。

    1.6K41发布于 2020-08-25
  • 来自专栏k-cloud-labs

    Cgroup泄露1

    k8s节点创建容器时提示"no space left on device",为已知问题,参考 https://tencentcloudcontainerteam.github.io/2018/12/29/cgroup-leaking limits, because // kmem.limit_in_bytes can only be set when the cgroup is empty. _, err = d.join 由于线上docker和cgroup使用的cgroup-driver为cgroupfs而不是systemd**,所以这里并没有修改systemd****对应文件里有关KernelMemory****的代码 ,只重启kubelet时此目录依然存在,因为容器业务进程还在使用着相关的cgroup。 新创建的Pod会以继承此目录下的cgroup的配置,所以需要重启宿主才能关闭kmem。 总结 本篇是一种快速暴力的解决问题手段,后经过调研测试,有不需要重启宿主的方案,在这一篇中介绍

    43000编辑于 2023-03-28
  • 来自专栏大数据进阶

    【转】cgroup的使用

    相同点 - 分层结构,子进程/cgroup继承父进程/cgroup 不同点 - 进程是一个单根树状结构(pid=0为根),而cgroup整体来看是一个多树的森林结构(hierarchy为根)。 /hierarchy; 命令行操作 mount -t cgroup -o subsystems name /cgroup/name 取消挂载 umount /cgroup/name eg = /cgroup/cpu_and_mem; cpu = /cgroup/cpu_and_mem; cpuacct = /cgroup/cpu_and_mem; 在cgroup中启动进程 cgexec -g subsystems:path_to_cgroup command arguments 在cgroup中启动服务 echo 'CGROUP_DAEMON= 统计cgroup等待总时间(需要CONFIG_DEBUG_BLK_CGROUP=y, 单位ns) blkio.empty_time - 统计cgroup无等待io总时间(需要CONFIG_DEBUG_BLK_CGROUP

    1.3K30发布于 2019-09-17
  • 来自专栏蓝天

    cgroup初步分析(1)

    原文地址:cgroup初步分析(1) 作者:哭泣的土地 cgroup的功能和作用不废话,直说一下cgroup的几条设计准则,有了几条设计准则的约束,就比较容易理解其中的数据结构和函数,至于源代码cgroup.c ,无非是两个内容,一是task_struct、cgroup、css_set三个数据结构互相关联,而是cgroup文件系统的实现。 对应于多个cgroup 一个cgroup可以对应多个css_set; 一个css_set可以对应多个cgroup; 一个task只对应唯一一个css_set )的cgroup(每个层级都有一个唯一的top cgroup通过对比cgroup cgroup来判断是否属于该层级)。 struct cgroup_subsys_state变量,其中有个指针,指向该子系统对应的cgroup

    1K10发布于 2018-08-07
  • 来自专栏Kubernetes

    runC源码分析——cgroup

    cgroup settings for the various subsystems // Returns cgroup paths to save in a state file *configs.Cgroup, pid int) error { // This might happen if we have no cpu cgroup mounted. *configs.Cgroup) error { if cgroup.Resources.CpuRtPeriod ! *configs.Cgroup) error { if cgroup.Resources.CpuShares ! fs/cgroup/cpuset/user.slice/container1", "devices": "/sys/fs/cgroup/devices/user.slice/container1

    1.7K71发布于 2018-04-13
  • 来自专栏01ZOO

    linux namespace and cgroup

    一个任务可以加入某个cgroup,也可以从某个cgroup迁移到另外一个cgroup。 /cgroup/cpuset type cgroup (rw,relatime,cpuset) cgroup on /sys/fs/cgroup/cpu type cgroup (rw,relatime ,cpu) cgroup on /sys/fs/cgroup/cpuacct type cgroup (rw,relatime,cpuacct) cgroup on /sys/fs/cgroup/memory cgroup on /sys/fs/cgroup/freezer type cgroup (rw,relatime,freezer) cgroup on /sys/fs/cgroup/blkio type cgroup (rw,relatime,blkio) cgroup on /sys/fs/cgroup/net_prio type cgroup (rw,net_prio) cgroup on /sys

    4.4K40发布于 2019-05-28
  • 来自专栏linux QOS

    linux Cgroup使用介绍

    用户级的代码可以创建或者销毁vfs中的cgroup,指定或者查询task的cgroup归属,可以列出一个cgroup下所有task的pid。 cgroup本身只是实现任务的跟踪划分。 如果没有child cgroup,这个hierarchy将会被去激活。 对cgroup没有增加新的系统调用,对于cgroup查询和修改的支持都是通过cgroup文件系统实现的。 每个cgroup都被呈现为cgroup文件系统下的一个目录,并且包含下面的文件来描述这个cgroup: - tasks:关联到这个cgroup的task的pid列表。 如果想在 /sys/fs/cgroup/rg1下创建新的cgroup: # cd /sys/fs/cgroup/rg1 # mkdir my_cgroup 如果想操作这个cgroup,进入后可以看到一些文件 子系统可以通过cgroup_loack()/cgroup_unlock来持有/释放cgroup_mutex。

    5.9K60发布于 2019-02-21
  • 来自专栏WebDeveloper

    Docker的cgroup讲解

    ---- 概念 cgroup ,控制组,它提供了一套机制用于控制一组特定进程对资源的使用。cgroup绑定一个进程集合到一个或多个子系统上。 cgroupfs是用户管理操纵cgroup的主要接口:通过在cgroupfs文件系统中创建目录,实现cgroup的创建;通过向目录下的属性文件写入内容,设置cgroup对资源的控制;向task属性文件写入进程 ID,可以将进程绑定到某个cgroup,以此达到控制进程资源使用的目的;也可以列出cgroup包含的进程pid。 对于cgroup,其本身的作用只是任务跟踪。但其它系统(比如cpusets,cpuacct),可以利用cgroup的这个功能实现一些新的属性,比如统计或者控制一个cgroup中进程可以访问的资源。 如果未理解跳过往下看,回头再看 讲解 /proc/[pid]/cgroup进程的cgroup信息,如下图: ?

    96310发布于 2021-01-18
  • 来自专栏k-cloud-labs

    cgroup mount destination: unknown

    start sandbox container for pod “xxx-sf-32c80-0”: Error response from daemon: cgroups: cannot find cgroup mount destination: unknown 之前遇到过cgroup相关问题,但是这个问题还是头一次见,网上搜索了关键字,社区有类似报错的issue,如cgroups: cannot found cgroup mount destination: unknown,联系最近做过的线上变更及问题,怀疑跟某自定义组件有关,详细背景参考这篇。 paths for an existing process running inside a cgroup // This is commonly used for the Load function /proc/id/cgroup还是存在cpu_mirror相关信息而/proc/id/mountinfo中已经不存在了,在容器重新创建的时候进行检查进而报错。

    4.1K20编辑于 2023-03-06
  • 来自专栏运维小路

    kvm-资源控制cgroup

    我们在讲Linux系统-sys虚拟文件系统的时候讲过,可以通过cgroup来限制cpu和内存使用。实际上kvm也是通过cgroup来限制的资源。 这个使用的版本是cgroup的v2版本。 #返回cgroup2fs则是v2 #返回tmpfs则是v1 stat -fc %T /sys/fs/cgroup/ 在centos7.9里面是以资源目录来区分,这个使用的版本是cgroup的v1版本。 # cgroupv1,注意替换虚拟机名字 /sys/fs/cgroup/cpu/machine.slice/machine-qemuxx.scope/emulator /sys/fs/cgroup/memory emulator #可以看到进程编号 cat tasks #但是看不到限制的资源的值,这里的值都显示不限制 cat cpu.cfs_quota_us cat memory.limit_in_bytes #cgroup

    24410编辑于 2024-11-15
  • Linux cgroup技术浅解

    cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)cgroup on /sys/fs/cgroup/devices type cgroup (rw, ,cpu)cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)cgroup on /sys /fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb)cgroup on /sys/fs/cgroup/freezer type cgroup (rw 第四步,写入 tasks 文件,将进程交给某个 cgroup 进行管理,因为 tasks 文件也是一个 cgroup 文件,统一会调用文件系统的操作函数进而调用 cgroup 子系统的操作函数,将 cgroup

    27400编辑于 2025-01-24
  • 来自专栏阶梯计划

    了解Linux的cgroup

    cgroup对进程内存控制主要控制如下: 限制cgroup中所有进程使用的内存总量 限制cgroup中所有进程使用的物理内容+swap交换总量 限制cgroup中所有进程所能使用的内核内存总量及其它一些内核资源 7 限制cgoup的进程数 cgroup中有一个subsystem叫pids,功能是限制cgroup及其所有子孙cgroup里面能创建的总的task数量。 之前cgroup树是已经挂载好的,这里就直接创建子cgroup,取名为test。 命令如下图所示: 再来看看test目录下的文件: 其中pids.current表示当前cgroup和其所有孙子cgroup现有的总的进程数量: pids.max 当前cgroup和其所有孙子cgroup 了,所以创建进程失败: 当前cgroup中的pids.current和pids.max代表了当前cgroup及所有子孙cgroup的所有进程,所以子孙cgroup中的pids.max大小不能超过父cgroup

    2.1K11编辑于 2024-11-12
  • 来自专栏ikubernetes

    容器cgroup资源限制

    docker 利用 Linux 内核的 cgroup 功能,实现对容器的资源使用限制,通过将容器内的进程 PID号 加入同一个以容器ID为开头命名的cgroup控制组内,实现容器进程的资源限制 验证cgroup 对CPU资源的限制 验证当前主机已挂载cgroup mount -t cgroup image.png 创建控制组 demo cd /sys/fs/cgroup/cpu mkdir demo ls 验证进程CPU占用是否降低到20% image.png top image.png Docker对容器的资源限制 Docker会在每个可使用cgroup限制的资源内创建一个docker目录(相当于创建一个

    1.4K30发布于 2021-10-09
  • 来自专栏云原生实验室

    cgroup 挂载失败是什么鬼???

    start sandbox container for pod “xxx-sf-32c80-0”: Error response from daemon: cgroups: cannot find cgroup mount destination: unknown 之前遇到过 cgroup 相关问题,但是这个问题还是头一次见,网上搜索了关键字,社区有类似报错的 issue,如cgroups: cannot found cgroup mount destination: unknown[1],联系最近做过的线上变更及问题,怀疑跟某自定义组件有关,详细背景参考这篇[2]。 paths for an existing process running inside a cgroup // This is commonly used for the Load function ,但是 umount 之后/proc/id/cgroup 还是存在 cpu_mirror 相关信息而/proc/id/mountinfo 中已经不存在了,在容器重新创建的时候进行检查进而报错。

    1.7K10发布于 2021-04-02
  • 来自专栏小手冰凉

    Docker 之NameSpace与Cgroup

    二、NameSpace和Cgroup的概念与作用 Docker中有三个核心概念,分别是镜像、容器、仓库。 3、Cgroup Cgroup作用:控制程序对资源的占用。 Cgroup的具体作用如下: 限制资源的使用:Cgroup可以对进程组使用的资源总额进行限制; 优先级控制:通过分配CPU时间片数量及磁盘IO带宽大小,实际上就是相当于控制子进程运行的优先级。 资源统计:Cgroup可以统计系统资源使用量,比如CPU使用时间,内存使用量等。可用于按量计费。 进程控制:恢复执行进程; 使用Cgroup,我们可以更具体地控制对系统资源的分配、优先顺序、拒绝、管理和监控。

    3.7K20发布于 2020-08-02
  • 来自专栏皮振伟的专栏

    Cgroup CPU Quota技术的不足

    前言 cgroup作为Linux上广泛应用的一个功能,用来限制、控制与分离一个进程组群的资源。 _ CONFIG_CGROUP_WRITEBACK=y CONFIG_CGROUP_SCHED=y CONFIG_CGROUP_PIDS=y # CONFIG_CGROUP_RDMA is not set CONFIG_CGROUP_FREEZER=y # CONFIG_CGROUP_HUGETLB is not set CONFIG_CGROUP_DEVICE=y CONFIG_CGROUP_CPUACCT =y CONFIG_CGROUP_PERF=y CONFIG_CGROUP_BPF=y # CONFIG_CGROUP_DEBUG is not set CONFIG_CGROUP_NET_PRIO=y > /sys/fs/cgroup/cpu/loading-bench/cgroup.clone_children"); sprintf(cmd, "echo %d > /sys/fs/cgroup

    3.4K20发布于 2019-03-07
领券