模块机制
可加载模块的概念
微内核:只保留核心模块,易维护、低性能
内核许可声明
协议分类

Page Cache
Page Cache 就是内核为了加速文件读写而在内存中保留的文件页。你每次 read/write 文件时,其实不是直接访问硬盘,而是在和 Page Cache 互动。
产生
调用
write(fd, buffer, len);
这个时候你只是拿着一个缓冲区(Userspace Page),把数据交给内核。
内核检查:
- 文件在该 offset 对应的 page cache 是否存在?
- 如果不存在 → 会触发缺页(page fault)并分配 page cache 页。
meian@ubuntu200406:~/work/MyProject/study$ sar -B 1
Linux 5.4.0-153-generic (ubuntu200406) 11/13/2025 _x86_64_ (8 CPU)
07:23:57 PM pgpgin/s pgpgout/s fault/s majflt/s pgfree/s pgscank/s pgscand/s pgsteal/s %vmeff
07:23:58 PM 0.00 0.00 9.00 0.00 15.00 0.00 0.00 0.00 0.00
07:23:59 PM 0.00 0.00 8.00 0.00 16.00 0.00 0.00 0.00 0.00
07:24:00 PM 0.00 0.00 15.00 0.00 15.00 0.00 0.00 0.00 0.00
07:24:01 PM 0.00 40.00 33.00 0.00 28.00 0.00 0.00 0.00 0.00
07:24:02 PM 0.00 0.00 22.00 0.00 15.00 0.00 0.00 0.00 0.00
07:24:03 PM 0.00 404.00 11.00 0.00 15.00 0.00 0.00 0.00 0.00
07:24:04 PM 0.00 0.00 12.00 0.00 15.00 0.00 0.00 0.00 0.00
07:24:05 PM 0.00 0.00 16.00 0.00 15.00 0.00 0.00 0.00 0.00
07:24:06 PM 0.00 44.00 150.00 0.00 252.00 0.00 0.00 0.00 0.00
07:24:07 PM 0.00 0.00 25.00 0.00 15.00 0.00 0.00 0.00 0.00
- pgpgin/s Page cache 读入量(KB/s)
定义:从磁盘读入 page cache 的速率(KB/s)。
你的程序读磁盘 → 系统把数据读到 Page Cache → pgpgin/s 就会上升。
- pgpgout/s — Page cache 写出量(KB/s)
定义:把 page cache 写回磁盘的速率(KB/s)。
你的程序 write 文件 → 内核把 dirty page 刷到磁盘 → pgpgout/s 上升。
- fault/s — minor page faults(轻微缺页)
定义:轻微缺页次数(不需要读磁盘的 page fault)。
访问了一块不在进程页表里的内存,但数据已经在 RAM 中(比如 page cache),只是缺少映射。
- majflt/s — major page faults(严重缺页)
定义:必须从磁盘读数据才能满足的缺页。
内存里没有对应内容 → 必须读硬盘 → 最慢的那种 page fault。
- pgscank/s — kswapd 扫描的页数(后台扫描)
定义:kswapd(后台内存回收线程)扫描的页数量(per-second)。
系统检测到内存压力 → 内核后台回收线程试图找可以回收的内存。
- pgscand/s — direct reclaim 扫描的页数(应用线程主动扫描)
定义:应用进程在内存不足时,被迫参与内存回收所扫描的页数。
进程自己在扫描内存 → 内存已经很紧张 → 接近 OOM。
- pgsteal/s — 每秒成功回收的 page 数
定义:通过扫描找到并回收掉的 page 数量。
系统正在回收 page cache 或匿名页。