内存cgroup的值都是从哪里来的呀

page_counter_charge是增加page_counter的计数,

try_charge函数和mem_cgroup_migrate函数是增加普通进程内存统计的重要方法;

try_charge<---mem_cgroup_try_charge<----

然后在许多缺页中断的路径上会会增加这个计数值

/proc/<pid>/status 中包含的值包括

VmSize中包含一个进程的信息,这个信息怎么和cgroup相关联呢?

------------2017.10.29----------------

//  一个进程的内存包括RSS等信息,这个信息的相关设置位于是在/fs/proc/中,不是kernel也不是mm

hiwater_rss = total_rss = anon + file + shmem;

代码中是如何设置的VmRSS值的?就是上面的公式,其中

  29     anon = get_mm_counter(mm, MM_ANONPAGES);
30 file = get_mm_counter(mm, MM_FILEPAGES);
31 shmem = get_mm_counter(mm, MM_SHMEMPAGES);

其中就包括我一个程序包含的匿名页,那么这几个值都是从哪里来的呢?

在3.10的内核里,这个值只会包含MM_ANONPAGES和 MM_FILEPAGES两个数值,不包括 MM_SHMEMPAGES

那这俩值都是怎么设置的捏?为什么MM_ANONPAGES的值不是实时更新的呀?

就是不是实时更新,也应该是走在前面的我理解,但是现在更新却是极度的慢,我理解是每一次都会有一次缺页的呀。这一个要怎么解释咧?

为什么都是阶跃式的呢?是因为用户态页表一次就映射一个page吗?还是说每次会增加一个大页?

为啥一次就出现一次缺页中断:这个值是咋更新的嘛

VmData: 是实际虚拟内存空间增长的值,

并且mmap和malloc的行为也不是一样的,当使用mmap去映射内存时,VmData值一直是增长的; 但是使用malloc去映射内存时,VmData值却是一直不变的,oh my gosh,颠覆三观

mmap是从虚拟地址空间,自高向低分配空间;

malloc是从虚拟地址空间开始,自低向高分配空间;

在调用mmap和munmap的过程中VmData是实时更新的。。。。但是使用malloc就没有这个规律[并且好像其他的值也没有变化]

为啥没有发生缺页呢?

关键函数是:mm_

add_mm_counter_fast

这个函数中并没有及时地把进程的匿名页的数据实时更新到: mm_struct -> mm_rss_stat -->count[NR_MM_COUNTERS]  MM_FILEPAGES / MM_ANONPAGES / MM_SWAPIN_PAGES

34e55232e59f7b19050267a05ff1226e5cd122a5

上面这个patch中解释了这个问题,为了解决多线程的问题,每次更新都是在线程内不更新,不去动全局的mm_struct,所以通过mm_struct的统计量,可能会有64*4k=256k的误差。[那这里就哟一个疑问了,如果一个进程创建了1000个线程,每个线程都malloc了32*4k的内存,那么会导致32*1000*4k没有被统计在/proc/VmRSS计数里么 128M都没有被统计在里面?是这样的

内存cgroup的更多相关文章

  1. cgroup 分析之CPU和内存部分

    https://ggaaooppeenngg.github.io/zh-CN/2017/05/07/cgroups-%E5%88%86%E6%9E%90%E4%B9%8B%E5%86%85%E5%AD ...

  2. docker cgroup 技术之memory(首篇)

    测试环境centos7 ,内核版本4.20 内核使用cgroup对进程进行分组,并限制进程资源和对进程进行跟踪.内核通过名为cgroupfs类型的虚拟文件系统来提供cgroup功能接口.cgroup有 ...

  3. 深入理解Kubernetes资源限制:内存

    写在前面 当我开始大范围使用Kubernetes的时候,我开始考虑一个我做实验时没有遇到的问题:当集群里的节点没有足够资源的时候,Pod会卡在Pending状态.你是没有办法给节点增加CPU或者内存的 ...

  4. Systemd简介与使用

    按下电源键,随着风扇转动的声音,显示器上开启的图标亮起.之后,只需要静静等待几秒钟,登录界面显示,输入密码,即可愉快的玩耍了. 这是我们大概每天都做的事情.那么中间到底发生了什么? 简单地说,从BIO ...

  5. 深入理解 Kubernetes 资源限制:CPU

    原文地址:https://www.yangcs.net/posts/understanding-resource-limits-in-kubernetes-cpu-time/ 在关于 Kubernet ...

  6. 理解k8s资源限制系列(二):cpu time

    本文介绍几种在K8S中限制资源使用的几种方法. 资源类型 在K8S中可以对两类资源进行限制:cpu和内存. CPU的单位有: 正实数,代表分配几颗CPU,可以是小数点,比如0.5代表0.5颗CPU,意 ...

  7. Cgroup - Linux 内存资源管理

    Hi ,我是 Zorro .这是我的微博地址,我会不定期在这里更新文章,如果你有兴趣,可以来关注我呦. 另外,我的其他联系方式: Email: mini.jerry@gmail.com QQ: 300 ...

  8. cgroup限制内存

    cgroup有个memory子系统,有两组对应的文件,一组带 memsw ,另一组不带. # docker ps -a # cd /sys/fs/cgroup/memory/docker/4b5619 ...

  9. 《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #12 使用Memory Cgroup限制内存使用量

    HACK #12 使用Memory Cgroup限制内存使用量 Memory Cgroup是Cgroup的资源限制功能之一,可以控制特定进程可以使用的内存量.Memory CgroupMemory C ...

随机推荐

  1. Spring3声明式事务处理事务无法回滚rollback分析(annotation与xml配置混用)

    新项目试运行,DBA提示生产数据库一个表的事务20分钟都未提交,分析过程如下: 1.查看日志log文件,最近20分钟是否有error日志: 2.发现某表有insert错误日志,初步判断由该表插入异常, ...

  2. 清除ie10+浏览器的input输入框后面会出现的x号和闭眼logo

    x号:::-ms-clear{display:none;} 闭眼logo: ::-ms-reveal{display:none;} tips:如果在外部引用的css里面没有作用,可以在写本页面的< ...

  3. C#如何表格型数据导出到Excel?

    代码如下: int intDataCount = myData.Tables[0].Rows.Count; Microsoft.Office.Interop.Excel.Application app ...

  4. SpringBoot学习8:springboot整合freemarker

    1.创建maven项目,添加pom依赖 <!--springboot项目依赖的父项目--> <parent> <groupId>org.springframewor ...

  5. 调整JVM占用内存空间方法

    JVM默认占用空间为64M 调整方法如下图 在虚拟机参数中调整为80M 调试可以用 Byte[] arr=new Byte[1024*1024*64];

  6. 开发必看 | iOS开发常用设计模式!

    ios开发学习中,经常弄不清楚ios的开发模式,今天我们就来进行简单的总结和探讨~(一)代理模式 应用场景:当一个类的某些功能需要由别的类来实现,但是又不确定具体会是哪个类实现.优势:解耦合敏捷原则: ...

  7. 远程桌面连接失败,提示CredSSP加密Oracel修正问题解决

    今天远程桌面的时候失败了,出现以下提示 于是上网找解决办法,经过测试,该方法是可行的. 首先,在控制台中输入regedit,打开注册表

  8. mysql中列属性

    mysql列属性包括:NULL .default.comment.primary key.unique key 一.NULL定义方式:NULL(默认) NOT NULL 空属性有2个值,mysql数据 ...

  9. IntelliJ IDEA 方法注释教程

    首先Ctrl +Alt +S ,打开Settings ,找到Live Template,然后点击右侧的绿色的“+”,选择Template Group 然后给新建的Group随便命个名 选中自己刚才创建 ...

  10. opencms研究笔记

    最近公司一新产品,众多选型之后: 最后还是准备在用opencms 在opencms的基础上,进行二次开发: 有一起研究的没 欢迎交流: