swap 预读页数
vm.page-cluster 决定 swap 换入时的预读页数,按 2 的 n 次方计算:默认 3 表示一次读 8 页,按 4KiB 页计算约 32KiB。顺序换页(内存压力下批量换入)时预读能明显减少 I/O 次数;但随机、稀疏的换页模式下预读会带来大量无用读取,反而放大 I/O 开销。取 0 表示关闭预读。判断依据应是换页模式,而不是页数本身。
基本信息
| 参数名 | vm.page-cluster |
|---|---|
| 默认值 | 3,即 2 的 3 次方等于 8 页,约 32KiB |
| 取值含义 | 0 关闭预读,数值越大预读越多 |
| 相关参数 | vm.swappiness 控制换页倾向 |
| 观测 | vmstat 的 si 与 so、/proc/vmstat 的 pswpin 与 pswpout |
典型使用场景
- swap 使用率高且磁盘压力大的机器
- 判断换页是顺序还是随机,决定是否保留预读
- 与 swappiness 一起调整,减少不必要的换页
- 排查内存压力下出现的额外磁盘读
- 在虚拟机上评估 swap 行为对性能的影响
查看与调整
查看与调整
sysctl vm.page-cluster vm.swappiness
sysctl -w vm.page-cluster=0 # 随机换页负载可关闭预读
cat /proc/vmstat | grep -E 'pswpin|pswpout'
vmstat 1 5 | tail -5 # 看 si 与 so
free -h
sysctl -w vm.swappiness=10 # 降低换页倾向,配合一起评估取值与预读量
| 取值 | 预读页数 | 适用场景 |
|---|---|---|
| 0 | 不预读 | 随机、稀疏的换页模式 |
| 1 | 2 页,约 8KiB | 轻度预读,属于折中 |
| 3(默认) | 8 页,约 32KiB | 顺序换页较多时 |
| 5 | 32 页,约 128KiB | 批量换页,但随机负载下代价很高 |
预读量随取值指数放大:设置 5 表示一次读 32 页,随机负载下 I/O 量会成倍增加。
如果 si 与 so 已经很高,优化方向是减少换页本身(降低内存压力、调整 swappiness),而不是调预读参数。
判断换页模式的方法
- 用 vmstat 观察 si 与 so 的形态:持续平稳偏高多为顺序换页,脉冲式多为随机换页
- 结合 /proc/vmstat 的 pswpin 与 pswpout 增量判断换页强度
- 若换页主要来自单个大进程,多为顺序访问;来自众多小进程则多为随机
- 内存充足时 si 与 so 接近零,此时该参数对性能几乎没有影响
关闭预读只在随机换页占主导时才有意义;如果换页呈现成片连续的形态,关闭预读反而会成倍增加 I/O 次数。