Linux缓存相关知识整理(史上最全!!)
16lz
2021-01-22
原文请参考我的csdn博客:
https://blog.csdn.net/icycode/article/details/80211207
1.相关概念
页
页缓存和块缓存概念
页缓存(pagecache)
块缓存(buffercache)
缓存机制的利弊
写缓存
2.数据同步(刷缓存)
flush内核线程
可调参数
flush/sync/fsync系列API及命令介绍
sync系统命令
sync()
fsync()
fdatasync()
open()之O_SYNC/O_DSYNC选项
msync()
fflush()
3.页面回收(pagereclaim)
缓存回收策略
双LRU
系统触发页面回收
手动清理缓存
应用
4.相关工具
查看缓存中的文件
free命令
free命令各个指标含义
/proc/meminfo
5.参考资料
11 个解决方案
#1
1.相关概念
页
页的概念:内核把物理页作为内存管理的基本单位.通常32位系统页大小为4KB,64位是8KB
如何查看当前系统页大小:
#getconfPAGESIZE
4096
1
2
页缓存和块缓存概念
内核为块设备提供两种通用缓存方案:
页缓存(pagecache)
缓存的是内存页面,缓存中的页来自于对正规文件、块设备文件和内存映射文件的读写。也就是说页缓存中包含最近被访问的文件数据块。我们通常所说的系统cache主要就是指页缓存。
在进行一个读操作前(如read),内核会检查数据是否已经在页缓存中,如果在,就可以从内存中快速返回所需的页,而不是从磁盘上读取。
块缓存(buffercache)
以块(块设备的block)为操作单位。在进行IO操作时,存取的单位是单个块设备的各个块,而不是整个内存页。
早期版本写文件,先经过页缓存,刷盘时再同步到块缓存最后再落盘.即:如果用dd写裸盘,则不经过页缓存。
从linux内核2.4开始二者统一起来了,缓存用页映射块,块缓存实际上就在页缓存中了。
缓存机制的利弊
好处:
提高性能(且对应用程序透明)
写缓存,可将零碎IO聚齐起来
……
负面影响:
物理内存通常远小于块设备,必须仔细挑选缓存哪些数据
缓存在一定程度上会影响应用程序实际可用的内存容量
如果系统崩溃,缓存的数据可能来不及刷回块设备(硬盘/ssd等),造成数据丢失
写缓存
通常缓存有三种实现策略:
不缓存(很少使用)
写透缓存(write-throughcache):写操作会立刻穿透缓存存到磁盘中
回写(writeback):即linux采取的策略,写操作后将对应缓存页面标记为“dirty”,由回写进程周期性刷到磁盘
“脏页”这个词有误导性,实际上脏的是磁盘上的数据而不是缓存中的数据。准确讲应该叫“未同步的页”。
更多相关文章
- Linux内核分析-9/进程的调度时机
- repcached与mysql缓存測试
- Retrofit2,okhttp3 通过拦截器(Interceptor)两种缓存(离线和在线)
- android版本与linux内核版本对应关系
- Android图片缓存处理
- 编译Android4.3内核源代码
- 使用drawables的IntelliJ Android缓存构建忽略了更改
- Android Studio Gradle 缓存文件夹设置
- android NDK 实用学习(四)-类缓存