存储服务器配置步骤 Cgroupsmemory子系统

作者:小菜 更新时间:2023-02-28 点击数:
简介:Cgroupsmemory子系统本文是一系列对cgroup说明的文档,已期望说明cgroup子系统涉及的所有子系统,本文只对memory进行说明

【菜科解读】

什么是cgroup memory ?

cgroup memory是如何实现的?

cgroup memory是如何调用的?

1 什么是cgroup memory ?

cgroup memory子系统又称为Memory Resource Controller,通过为每个cgroup维护一个内存管理机制,控制处于所有属于该cgroup的进程对内存的使用方式。

cgroup mem有以下控制内存使用的目录内容:

tasks # 关联的任务线程 cgroup.procs # 关联的任务进程 cgroup.event_control # an interface for event_fd() memory.usage_in_cytes # 当前已使用的内存 memory.memsw.usage_in_cytes # 当前已使用的内存,菜叶说说,swap memory.limit_in_cytes # 当前限制的内存使用 memory.memsw.limit_in_cytes # 当前限制的内存、swap memory.failcnt # 当前达到内存阈值的次数 memory.memsw.failcnt # 当前达到内存、swap阈值的次数 memory.max_usage_in_cytes # 查看内存使用的最大值 memory.memsw.max_usage_in_cytes # 查看内存、swap使用的最大值 memory.soft_limit_in_cytes # 设置/查看 soft limit of memory usage memory.stat # 查看元数据 memory.use_hierarchy # 设置/查看 hierarchical account enabled memory.force_empty # trigger forced page reclaim memory.pressure_level # set memory pressure notifications memory.swappiness # set/show swappiness parameter of vmscan memory.move_charge_at_immigrate # set/show controls of moving charges memory.oom_control # 设置/查看 oom 控制 memory.numa_stat # show the number of memory usage per numa node memory.kmem.limit_in_cytes # 设置/查看内核内存的硬件限制 memory.kmem.usage_in_cytes # 查看当前内核内存分配 memory.kmem.failcnt # 查看内核内存达到限制次数 memory.kmem.max_usage_in_cytes # 查看内核内存最大使用量 memory.kmem.tcp.limit_in_cytes # 查看/设置 tcp 缓存内存硬件限制 memory.kmem.tcp.usage_in_cytes # 查看当前tcp 使用 memory.kmem.tcp.failcnt # 查看当前tcp达到内存限制次数 memory.kmem.tcp.max_usage_in_cytes # 查看当前tcp buf内存使用最大限制

以使用为例,使用linux mem提供的文件系统方式为例

# 限制内存使用 $ echo 4M > /sys/fs/cgroup/memory/test/memory.limit_in_cytes # 查看内存使用 $ cat /sys/fs/cgroup/memory/test/memory.limit_in_cytes 4194304 # 查看已使用内存 $ cat /sys/fs/cgroup/memory/test/memory.usage_in_cytes 1216512

2 cgroup memory是如何实现的 ?

存储服务器配置步骤(Cgroupsmemory子系统)(1)

图1 查看控制器抽象结构

内存控制器的核心在于设计的page_counter,page_counter追踪当前的内存使用量以及进程内存的限制量。

由mem_cgroup对每个关联的cgroup进行控制。

内存控制器工作原理:

每个cgroup都会发生Accounting操作。

每个mm_struct归属一个cgroup。

每个page有一个指向page_cgroup的指针。

Accounting操作流程为:

调用mem_cgroup_charge_common() 设置必要的数据结构来检查内存是否超出使用限制。

如果超出使用限制,reclaim被调用。

如果没有超出使用限制,page_cgroup被更新,page_cgroup以LRU方式管理

3 cgroup memory 是如何调用的?

目前的常见的容器技术docker底层其实是runc的调用实现,

runc对内存的限制正是通过cgroup来实现的,以容器运行时中runc中的设置mem权限逻辑为例

查看swap、mem是否需要更新0则不用更新

swap写入memory.memsw.limit_in_cytes 文件,memory写入memory.limit_in_cytes 文件

相应的,查看对应的日志以及文件

[debug] write cgroup proc, dir=http://www.studyofnet.com/sys/fs/cgroup/memory/user.slice/user-0.slice/session-537.scope/a, CgroupProcesses=cgroup.procs, pid=105820 [debug] cgroup set swap writer file path=http://www.studyofnet.com/sys/fs/cgroup/memory/user.slice/user-0.slice/session-537.scope/a/memory.limit_in_cytes val=0 [debug] cgroup set swap writer file path=http://www.studyofnet.com/sys/fs/cgroup/memory/user.slice/user-0.slice/session-537.scope/a/memory.memsw.limit_in_cytes val=0 cat /sys/fs/cgroup/memory/user.slice/user-0.slice/session-537.scope/a/memory.limit_in_cytes 9223372036854771712 cat /sys/fs/cgroup/memory/user.slice/user-0.slice/session-537.scope/a/memory.memsw.limit_in_cytes 9223372036854771712

参考文献

cgroup memory说明1 https://www.kernel.org/doc/Documentation/cgroup-v1/memory.cy

docker底层资源限制实现 https://www.slideshare.net/Docker/container-performance-analysis-brendan-gregg-netflix

剪映音乐分割如何前移

剪映这款短视频剪辑的软件中我们在使用的过程中分割段落后想向前移动该怎么来操作呢,下面小编就来将详细的教程分享给大家,一起来往下看看吧。

剪映音乐分割后怎么前移?剪映音乐分割后前移方法1、首先打开剪映,长按分割后需要往前移的音乐。

2、然后拖动直前一段音乐的下方。

3、接着长按前一段音乐后移。

4、最后长按下方的音乐往上移即可。

谢谢大家阅读观看,希望本文能帮到大家!———想要了解更多资讯就请继续关注zi7吧!

百词斩计划如何切换

百词斩这款软件我们在使用的过程中是可以来随时切换计划的,下面小编就来将百词斩切换计划的具体教程分享给大家,一起来具体看看吧。

百词斩怎么切换计划?百词斩切换计划教程1、首先打开百词斩app,点击右上角调整计划进入。

2、然后点击右上角切换计划进入。

3、最后点击想要切换的计划,确认即可。

以上这篇文章就是百词斩计划怎么切换的全部内容了,更多教程尽在ZI7吧。

———想要了解更多资讯就请继续关注zi7吧!

加入收藏
               

存储服务器配置步骤 Cgroupsmemory子系统

点击下载文档

格式为doc格式

  • 账号登录
社交账号登录