原文请参考我的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”,由回写进程周期性刷到磁盘
“脏页”这个词有误导性,实际上脏的是磁盘上的数据而不是缓存中的数据。准确讲应该叫“未同步的页”。

更多相关文章

  1. Linux内核分析-9/进程的调度时机
  2. repcached与mysql缓存測试
  3. Retrofit2,okhttp3 通过拦截器(Interceptor)两种缓存(离线和在线)
  4. android版本与linux内核版本对应关系
  5. Android图片缓存处理
  6. 编译Android4.3内核源代码
  7. 使用drawables的IntelliJ Android缓存构建忽略了更改
  8. Android Studio Gradle 缓存文件夹设置
  9. android NDK 实用学习(四)-类缓存

随机推荐

  1. Android 之 SQLite数据库的使用
  2. android fitsSystemWindows的使用
  3. 深入探讨 Android(安卓)传感器随处监控您
  4. Android 百度地图 简单实现--- 美食搜索
  5. android的ListView图文混搭
  6. ANDROID常用权限记录
  7. Android Studio builde.gradle 配置说明
  8. Android 并发之CAS(原子操作)简单介绍(五)
  9. Android搜索自动提示功能 AutocompleteTe
  10. Android系统应用不支持读写存储