首页/系统/Linux 内核与性能调优速查/vm.page-cluster swap 预读页数
sysctl 内核参数72 条

vm.page-cluster swap 预读页数

swap 预读的页数按 2 的 n 次方计(默认 3 → 8 页 ≈ 32KiB);顺序换页时提升效率,随机负载下可能放大读开销。

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不预读随机、稀疏的换页模式
12 页,约 8KiB轻度预读,属于折中
3(默认)8 页,约 32KiB顺序换页较多时
532 页,约 128KiB批量换页,但随机负载下代价很高
预读量随取值指数放大:设置 5 表示一次读 32 页,随机负载下 I/O 量会成倍增加。
如果 si 与 so 已经很高,优化方向是减少换页本身(降低内存压力、调整 swappiness),而不是调预读参数。

判断换页模式的方法

  • 用 vmstat 观察 si 与 so 的形态:持续平稳偏高多为顺序换页,脉冲式多为随机换页
  • 结合 /proc/vmstat 的 pswpin 与 pswpout 增量判断换页强度
  • 若换页主要来自单个大进程,多为顺序访问;来自众多小进程则多为随机
  • 内存充足时 si 与 so 接近零,此时该参数对性能几乎没有影响
关闭预读只在随机换页占主导时才有意义;如果换页呈现成片连续的形态,关闭预读反而会成倍增加 I/O 次数。

易错点

  • 把预读量当线性:取值每加 1 就是翻倍,很容易过头
  • 在随机换页负载上保留大预读:产生大量无用 I/O
  • 把 si 与 so 高当成需要调预读:根本方向是减少换页
  • 忽略页大小差异:4KiB 与大页内核上同样的取值对应不同字节数
  • 只看 swap 用量不看换页速率:用量高但几乎没有换入换出时无需处理

数据来源与参考

  • Linux 内核 Documentation/admin-guide/sysctl/vm.rst
  • man 5 proc
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌