在/proc/meminfo中发现,cached不等于ActiveFile + InActiveFile,我们来看看cache到底都包括啥内存

1)首先肯定包含activeFile 和 inactiveFile

58     cached = global_node_page_state(NR_FILE_PAGES) -
 59             total_swapcache_pages() - i.bufferram;
 所以在/proc/meminfo中的cache的内存就是activeFile+inactiveFile+shmMem-bufferRam

Memory availbale中的内存是啥?

那么所有的NR_FILE_PAGEa是啥子呢?

所以cache的计算公式是:nr_file_pages是怎么计算出来的,是所有的问题集

---------------------------------------

内核中的 tmpfs 就是 share memory

内核中的tmpfs就是share memory

是一个虚拟的文件系统,都是在一个share memory的文件系统中存储的,所以所有对共享内存的申请,将来都是落到tmpfs中去的,所以我们看下集中典型的内存的申请的方式:shmget和mmap的方式是不是都是从tmpfs文件系统中去分配inode,并且这种inode是不能被flush掉的,所以有三种方式来处理,shget/mmap/write /dev/shm

那么我通过mmap的方式申请内存

方式二:

ptr = mmap(NULL, 4096000, PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_SHARED, -1, 0);

这种方式的内存既会统计在share memory中,也会统计在page cache里,所以说到底,这里应该是统计到文件系统中了;

方式三:

直接向/dev/shm中写数据,share memory确实是增加了,也被统计到page cache里,匪夷所思啊

这种也是从share memory里分配的内存么?刚开始也是没有内存吧?然后真正写的时候发生缺页中断

方式四:

使用shmat之后,内存的分配

为什么释放之后,shm还没有被释放掉呢,但是

mmap发生缺页中断之后,这个page会添加到tmp的page cache里吗?

虽然在shm中的内存是在tmpfs中管理的,但是,这些内存是算到shared里的,这种是共享

在/proc/meminfo中存储的

ret = vma->vm_ops->fault(vma, &vmf);

每一段vma也都会注册一套函数,这里就是一个内存段发生缺页时会调用的函数,Call Trace:
 [<ffffffff8114668b>] shmem_getpage_gfp+0x41b/0xab0
 [<ffffffff81146de9>] shmem_fault+0x69/0x1a0
 [<ffffffff811b790c>] ? __mark_inode_dirty+0x32c/0x390
 [<ffffffff8130a8fe>] shm_fault+0x1e/0x20
 [<ffffffff81158e91>] __do_fault+0x71/0xe0
 [<ffffffff8115dc09>] handle_mm_fault+0x3b9/0xde0
 [<ffffffff8116417d>] ? do_mmap+0x44d/0x500
 [<ffffffff81046eb4>] __do_page_fault+0x244/0x4e0
 [<ffffffff8104715c>] do_page_fault+0xc/0x10
 [<ffffffff8187f362>] page_fault+0x22/0x30
shm_fault: syslogd

真正的匿名页是不会走到这里的真正的匿名页不是在虚拟的文件系统中管理的,而是直接管理,二者是在那个地方分的叉的呢?handle_pte_fault,在这里分为了两个流向了不同的防线1)do_anonymous_page2)  do_fault -->  __do_fault所以这里怎么判断一块区域到底是不是匿名页呢?是通过vma_is_aonnymous的:!vma->vm_ops,只有这种page才需要特殊的映射的方法

shm_mem_fault->shmem_getpage_gfp ---> shmem_add_to_page_cache
shm_mem_fault是大家都要经历过的一环

shmem:的更多相关文章

  1. Linux主机内存评估手册-从零到无

    --时间:2020年10月22日 --作者:飞翔的小胖猪 文档基于Centos Linux操作系统作为生产服务器运行环境.实时的查看分析当前系统内存的使用情况是否存在内存瓶颈,结合应用及现行业务需求分 ...

  2. java web 开发三剑客 -------电子书

    Internet,人们通常称为因特网,是当今世界上覆盖面最大和应用最广泛的网络.根据英语构词法,Internet是Inter + net,Inter-作为前缀在英语中表示“在一起,交互”,由此可知In ...

  3. 所有selenium相关的库

    通过爬虫 获取 官方文档库 如果想获取 相应的库 修改对应配置即可 代码如下 from urllib.parse import urljoin import requests from lxml im ...

  4. Nginx学习笔记(四) 源码分析&socket/UDP/shmem

    源码分析 在茫茫的源码中,看到了几个好像挺熟悉的名字(socket/UDP/shmem).那就来看看这个文件吧!从简单的开始~~~ src/os/unix/Ngx_socket.h&Ngx_s ...

  5. 戴文的Linux内核专题:07内核配置(3)

    转自Linux中国 OK,我们还继续配置内核.还有更多功能等待着去配置. 下一个问题(Enable ELF core dumps (ELF_CORE))询问的是内核是否可以生成内核转储文件.这会使内核 ...

  6. PostgreSQL的存储系统二:REDOLOG文件存储结构二

    REDOLOG文件里的用户数据和数据文件里的用户数据存储结构相同 几个月前同事给台湾一家公司培训<pg9 ad admin>时,有个学员提及WAL里记录的内容为Query时的SQL语句(比 ...

  7. warn_alloc():page allocation failure问题分析

    关键词:warn_alloc().__GFP_XXX.order.CMA等等. 在内存申请的时候经常会遇到类似“ xxx: page allocation failure: order:10...”类 ...

  8. linux 内存查看方法:meminfo\maps\smaps\status 文件解析

    linux 下面查看内存有多种渠道,比如通过命令 ps ,top,free 等,比如通过/proc系统,一般需要比较详细和精确地知道整机内存/某个进程内存的使用情况,最好通过/proc 系统,下面介绍 ...

  9. Linux性能优化实战学习笔记:第十六讲

    一.free数据的来源 1.碰到看不明白的指标时该怎么办吗? 不懂就去查手册.用 man 命令查询 free 的文档.就可以找到对应指标的详细说明.比如,我们执行 man fre... 2.free数 ...

随机推荐

  1. Vi中进行多行指定内容替换

    1.先按Esc进入命令模式,然后在打出‘:’(英文输入模式下) 2.输入格式:  首行数,末行数s/要替换的字符串/替换的字符串/g    (不加g只替换每行的一个要替换的字符串,后面的不会替换) e ...

  2. C语言调整数组使奇数全部都位于偶数前面

    //输入一个整数数组,实现一个函数,//来调整该数组中数字的顺序使得数组中所有的奇数 位于数组的前半部分,//所有偶数 位于数组的后半部分. #include<stdio.h>#inclu ...

  3. Python CSV模块简介

    Table of Contents 1. CSV 1.1. 简介 1.2. 字典方式地读写 1.3. 其它 2. 参考资料 CSV csv文件格式是一种通用的电子表格和数据库导入导出格式.最近我调用R ...

  4. 20145209 2016-2017-2 《Java程序设计》第3周学习总结

    20145209 2016-2017-2 <Java程序设计>第3周学习总结 教材学习内容总结 1.构造方法决定类生成对象的方式 用this将已存在的参数的值指定给此参数. 用new建立新 ...

  5. 苏州Uber优步司机奖励政策(12月28日到1月3日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  6. 【caffe范例详解】 - 1.Classification分类

    1. 安装 首先,导入numpy和matplotlib库 # numpy是常用的科学计算库,matplot是常用的绘图库 import numpy as np import matplotlib.py ...

  7. LWM2M的DISCOVER操作

    1. 先看下DISCOVER的数据流,工作服务器下发的指令到设备客户端 2. 解释,这个操作是用来发现Object, Object Instances, and Resources的属性,同时可以发现 ...

  8. Hive支持行级update、delete时遇到的问题

    Hive从0.14版本开始支持事务和行级更新,但缺省是不支持的,需要一些附加的配置.要想支持行级insert.update.delete,需要配置Hive支持事务.(行级的insert好像不配置也能运 ...

  9. 「日常温习」Hungary算法解决二分图相关问题

    前言 二分图的重点在于建模.以下的题目大家可以清晰的看出来这一点.代码相似度很高,但是思路基本上是各不相同. 题目 HDU 1179 Ollivanders: Makers of Fine Wands ...

  10. SVG Sprite 使用Symbol元素制作ICON

    介绍 SVG是一种全新的使用方式,应该说这才是未来的主流,也是平台目前推荐的用法.之前写过两篇关于CSS icon在页面显示的博客,后来了解到现在大多数前端团队和项目都在使用SVG Sprite这种方 ...