linux内核文件cache机制,Linux内核文件Cache机制
在我们使用Linux时,使用free命令观察系统内存使用情况,如下面空间内存为66053100k。可能很多同事都遇到过一个问题,发现随着时间的推移,内存的free越来越小,而cached越来越大;于是就以为是不是自己的程序存在内存泄漏,或者是硬件、操作系统出了问题?显然,从这里看不出用户程序是否有内存泄漏,也不是内核有Bug或硬件有问题。原因是内核的文件Cache机制。实际上文件Cache的实现是页面Cache,本文后续都以页面Cache来描述。
[root@localhost ~]# free
total used free shared buffers cached
Mem: 66053100 1727572 64325528 0 242492 409440
-/+ buffers/cache: 1075640 64977460
Swap: 2097144 0 2097144
当应用程序需要读取文件中的数据时,操作系统先分配一些内存,将数据从存储设备读入到这些内存中,然后再将数据分发给应用程序;当需要往文件中写数据时,操作系统先分配内存接收用户数据,然后再将数据从内存写到磁盘上。文件Cache管理指的就是对这些由操作系统内核分配,并用来存储文件数据的内存管理。
在大部分情况下,内核在读写磁盘时都先通过页面Cache。若页面不在Cache中,新页加入到页面Cache中,并用从磁盘上读来的数据来填充页面。如果内存有足够的内存空间,该页可以在页面Cache长时间驻留,其他进程再访问该部分数据时,不需要访问磁盘。这就是free命令显示内核free值越来越小,cached值越来越大的原因。
同样,在把一页数据写到块设备之前,内核首先检查对应的页是否已经在页面Cache中;如果不在,就在页面Cache增加一个新页面,并用要写到磁盘的数据来填充。数据的I/O传输并不会立即开始执行,而是会延迟几秒左右;这样进程就有机会进一步修改写到磁盘的数据。
内核的代码和数据结构不必从磁盘读,也不必写入磁盘。因此页面Cache可能是下面的类型:
含有普通文件数据的页;
含有目录的页;
含有直接从块设备文件(跳过文件系统层)读出的数据页;
含有用户态进程数据的页,但页中的数据已被交换到磁盘;
属于特殊文件系统的页,如进程间通信中的特殊文件系统shm。
linux内核文件cache机制,Linux内核文件Cache机制相关推荐
- linux内核合并dtb文件,c – 如何修改内核DTB文件
摘要 我目前正在使用一些自定义板的自定义驱动程序编译Linux内核(内核,模块和DTB).有时我会编译内核并意识到DTB文件中的兼容性字符串不是自定义驱动程序要查找的内容.现在,我可以解决这个问题的唯 ...
- linux文件系统启动流程,linux 内核启动过程以及挂载android 根文件系统的过程
转载 作者:汕头大学-黄珠唐 时间:2009 年10 月29 日 主要介绍linux 内核启动过程以及挂载android 根文件系统的过程,以及介绍android 源代码中文件系统部分的浅析. 主要源 ...
- 树莓派Linux内核源码配置、编译、挂载(boot/kernal/根文件)、开启新内核
目录 一.树莓派Linux源码配置(适合树莓派) 总体概述 配置的三种方式 1.照搬厂家的配置(使用这种方式) 2.参考厂家的配置(感受一下) 3.完全自主配置(需要一定工作经验) 二.树莓派Linu ...
- 修改linux编译配置文件,Porting:linux内核编译、配置、修改配置文件、添加.c文件到内核...
一.linux内核 $:'uname -a $:'uanme -r // 查看linux内核版本,开发板上进入linux后是一样的命令. 早起常常使用的版本:linux 2.6.x 开发板上使用的版本 ...
- 在win10查看本机linux的文件,Windows 10变身开发者利器:内置Linux内核,轻松查看Linux子系统文件...
原标题:Windows 10变身开发者利器:内置Linux内核,轻松查看Linux子系统文件 来源:创事记 终于!在Windows里可以访问Linux文件了. 这表明,微软插入开源界的触角,越来越深入 ...
- linux内核学习6:Linux的CPU高速缓存cache和页高速缓存cache,buffer
一.CPU高速缓存(cache) 参考:https://blog.csdn.net/u014470361/article/details/80060701 参考:https://blog.csdn.n ...
- linux kernel and user space通信机制,Linux内核与用户空间通信机制研究.pdf
ISSN 1009-3044 E-mail:info@CCCC.net.CR ComputerKnowledgeandTechnology电脑知识与技术 http://www.dnzs.net.cn ...
- Linux内核概念:per-CPU,cpumask,inicall机制,通知链
Linux内核概念 per-CPU,cpumask,inicall机制,通知链 rtoax 2021年3月 在英文原文基础上,针对中文译文增加5.10.13内核源码相关内容. 1. Per-cpu 变 ...
- linux内核的配置过程,linux内核的配置机制及其编译过程
linux内核的配置机制及其编译过程. 一.配置系统的基本结构 Linux内核的配置系统由三个部分组成,分别是: 1.Makefile:分布在 Linux 内核源代码根目录及各层目录中,定义 Linu ...
最新文章
- sql 怎样 得到 的客户端的ip地址_怎样用卷发棒?正确用法大揭密-装修攻略
- 第一章·MySQL介绍及安装
- postgresql对于HashJoin算法的Data skew优化与MCV处理
- PowerDesigner从数据库导入
- c语言用指针变量输入数组的长度,C语言之数组的基础练习题(指针变量做函数参数)...
- php图片长宽处理,用php调整图片宽高 | 学步园
- 蓝桥杯青少创意编程python组
- php 隐藏地址栏,工具栏,php – 我怎么能隐藏#!在浏览器地址栏上?
- EasyUI treegrid 获取编辑状态中某字段的值 [getEditor方法获取不到editor]
- python面向对象基础知识_面向对象的一些基本知识(python)
- 手机离线地图——基于OruxMaps离线高清卫星地图制作发布
- 只需3天即可启动应用发布营销核对清单
- Python error:Compressed file ended before the end-of-stream marker was reached
- 如何爬取商品详情页中的信息
- MKL FFT简单调试
- 208. Implement Trie (Prefix Tree)(Leetcode每日一题-2021.04.14)
- 华为g9青春版连接计算机,华为G9青春版 移动4G(VNS-TL00)一键救砖教程,轻松刷回官方系统...
- 《中英双解》leetCode Arranging Coins (排列硬币)
- 基于Java+JSP+Servlet的网上商城源码案例
- Qt刷新UI界面问题
热门文章
- Facebook工程师之死,一个走钢丝的互联网中年男人
- 嘘!你与谷歌语音助手的对话,可能已经泄露……
- jenkins 启动_通过http请求启动jenkins任务
- JavaScript通用表单验证函数
- 比尔·盖茨的11条人生箴言
- 北京市通信管理局对3·15晚会曝光的北京企业作出行政处罚
- 快手推出“一站式开放平台”:千亿流量5亿现金扶持经营伙伴
- 加州“电力十足 ” iPhone12加速贬值成全“十三香”
- 滴滴更新招股书:预计定价13.5美元 最多筹集约46亿美元
- Lyft出售自动驾驶部门给丰田子公司:作价5.5亿美元