浅谈Linux页面缓存
💡
原文中文,约5000字,阅读约需12分钟。
📝
内容提要
本文介绍了Linux页面缓存的逐出策略、清除方法和内存控制器cgroup的作用,同时介绍了mmap()和cgroup v2的特点,以及如何使用/sys/fs/cgroup文件来查看cgroup限制和统计数据。最后,提到了关闭交换空间对某些Java应用程序的影响。
🎯
关键要点
- Linux页面缓存是虚拟文件系统的一部分,旨在改善IO延迟。
- 页面缓存的核心是回写式缓存算法,使用页面作为最小存储单位。
- 读取数据时,内核首先检查页面缓存,如果缓存中存在则直接返回,避免磁盘IO。
- 写入数据时,内核更新页面缓存,实际的磁盘IO操作是异步的。
- 脏页面是包含未刷新的数据的页面,fsync()等系统调用可确保数据持久化。
- 理解页面缓存有助于容量规划、调试内存和IO密集型应用程序。
- Linux页面缓存的逐出策略基于LRU算法,使用活动和非活动列表管理页面。
- cgroup子系统用于控制和保护应用程序的内存和IO资源。
- 内核通过vm.swappiness参数控制内存回收策略,影响页面的逐出顺序。
- mmap()是Linux的内存映射功能,允许处理超出物理内存的文件。
- cgroup v2提供了更好的资源分配和统计信息,改进了页面缓存的管理。
- 可以通过/sys/fs/cgroup文件查看cgroup限制和统计数据。
➡️