Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

《Linux内核实战-Page Cache》 #4

Open
yunCrush opened this issue Nov 29, 2022 · 0 comments
Open

《Linux内核实战-Page Cache》 #4

yunCrush opened this issue Nov 29, 2022 · 0 comments

Comments

@yunCrush
Copy link
Owner

yunCrush commented Nov 29, 2022

Page Cache

image
1. 观察Page Cache
cat /proc/meminfo
等式两边的内容即Page Cache
Buffers + Cached + SwapCached = Active(file) + Inactive(file) + Shmem + SwapCached
  在 Page Cache 中,Active(file)+Inactive(file) 是 File-backed page(与文件对应的内存页),是你最需要关注的部分。因为你平时用的 mmap() 内存映射方式和 buffered I/O来消耗的内存就属于这部分。
  Page Cache存在的意义:减少I/O,提升应用的IO速度。
2. Page Cache的产生与释放
  产生的两个途径:Buffered IO 与Memory Mapped IO
image
  一个page(4kb),Page Cache存在于内核态,发生缺页中断是:已经映射到虚拟内存地址的page并不在实际的内存中,由中央处理器的内存管理单元所发出的中断。这里是内核缓冲区的page不在实际内存中,需要重新分配内存,此时page cache 产生,写文件产生的page cache有脏页,而读文件产生的page cache并不会有。
image
# 用来监测Page Cache cat /proc/vmstat | egrep "dirty|writeback"
  nr_dirty 表示当前系统中积压了多少脏页,nr_writeback 则表示有多少脏页正在回写到磁盘中,他们两个的单位都是 Page(4KB)
image
  Page Cache的回收: 直接回收,后台回收。应用在申请内存的时候,即使没有 free 内存,只要还有足够可回收的 Page
Cache,就可以通过回收 Page Cache 的方式来申请到内存。

查看如何回收的
sar -B 1    
   pgscank/s : kswapd(后台回收线程) 每秒扫描的 page 个数。    
   pgscand/s: Application 在内存申请过程中每秒直接扫描的 page 个数    
   pgsteal/s: 扫描的 page 中每秒被回收的个数。    
   %vmeff: pgsteal/(pgscank+pgscand), 回收效率,越接近 100 说明系统越安全,越接近 0 说明系统内存压力越大    

image
第一次读写某个文件,Page Cache是 Inactive 的?如何让它变成 Active 的呢?在什么情况下 Active 的又会变成 Inactive的呢?

@yunCrush yunCrush changed the title 《Linux内核实战》 《Linux内核实战-Page Cache》 Dec 6, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant