如何调优文件系统的脏页水位以及脏页回写配置

更新时间:2025-03-26 02:02:16

本文将介绍如何通过修改Alibaba Cloud Linux 2/3系统中/sys/class/bdi/<bdi>/目录下的参数文件,实现对单个特定文件系统的脏页水位以及回写控制的调优。

说明

/sys/class/bdi/<bdi>/目录中<bdi>表示对应设备的 <major:minor>。您可以通过执行lsblk命令查看相应磁盘设备的MAJ:MIN参数值。

背景信息

在 Linux 系统中,页缓存(Page Cache)用于缓存文件系统的读写操作(Buffer I/O)。在缓存写入过程中,数据首先被写入页缓存,然后由系统在特定时机通过回写(Writeback)操作将数据写入非易失性存储。在此过程中尚未执行回写的页缓存被称为脏页(Dirty Page)。为保持系统中脏页的合理水位,系统需要定期执行回写操作,或者在脏页水位达到上限时进行回写。

QoS 控制

当系统整体脏页水位超过free_run(系统中开始启动脏页回写时的脏页水位)阈值时,缓存写脏页的速度将受到抑制,以控制系统的脏页水位。各文件系统写脏页的抑制的程度由其回写带宽配额决定,而回写带宽配额由过去一段时间内该文件系统的平均回写带宽占系统总回写带宽的百分比决定的。回写速度越快的设备,其分配到的回写带宽配额就越大,写脏页时更容易摆脱受抑制的状态。为了更好地定义上述过程的QoS,引入了最低回写带宽配额和回写带宽配额上限的定义。

最低回写带宽配额

最低回写带宽配额定义了文件系统在写脏页触发抑制时,该文件系统分配到的最低回写带宽配额,即定义最低 QoS 保障。以下三个接口均可设置该参数,但同一时刻只能有其中一个接口生效。

min_ratio
min_ratio_fine
min_bytes

使用限制

  • Alibaba Cloud Linux 2。

  • Alibaba Cloud Linux 3。

配置min_ratio

/sys/class/bdi/<bdi>/min_ratio描述该文件系统的最小回写带宽配额占过去一段时间系统总回写带宽的百分比。默认值为0。

  • 查询min_ratio

    <bdi>需替换为对应设备的 <major:minor>

    cat /sys/class/bdi/<bdi>/min_ratio
  • 配置min_ratio

    <bdi>需替换为对应设备的 <major:minor>

    <value>需替换为要设置的值。

    sudo sh -c 'echo <value> > /sys/class/bdi/<bdi>/min_ratio'

    例如,设置nvme0n1磁盘设备的最小回写带宽配额占过去一段时间系统总回写带宽的20%。

    sudo sh -c 'echo 20 > /sys/class/bdi/259:0/min_ratio'

使用限制

Alibaba Cloud Linux 3(内核5.10.134-17及更高版本)。

配置min_ratio_fine

/sys/class/bdi/<bdi>/min_ratio_fine描述该文件系统的最小回写带宽配额占过去一段时间系统总回写带宽的比例,以百万分之一为单位,相较于min_ratio提供更高精度。

  • 查询min_ratio_fine

    <bdi>需替换为对应设备的 <major:minor>

    cat /sys/class/bdi/<bdi>/min_ratio_fine
  • 配置min_ratio_fine

    <bdi>需替换为对应设备的 <major:minor>

    <value>需替换为要设置的值。

    sudo sh -c 'echo <value> > /sys/class/bdi/<bdi>/min_ratio_fine'

    例如,设置nvme0n1磁盘设备的最小回写带宽配额占过去一段时间系统总回写带宽的20%。

    sudo sh -c 'echo 200000 > /sys/class/bdi/nvme0n1/min_ratio_fine'

使用限制

Alibaba Cloud Linux 3(内核5.10.134-17及更高版本)。

配置min_bytes

/sys/class/bdi/<bdi>/min_bytes描述该文件系统的最小回写带宽配额,以字节为单位。

  • 查询min_bytes

    <bdi>需替换为对应设备的 <major:minor>

    cat /sys/class/bdi/<bdi>/min_bytes
  • 配置min_bytes

    <bdi>需替换为对应设备的 <major:minor>

    <value>需替换为要设置的值。

    sudo sh -c 'echo <value> > /sys/class/bdi/<bdi>/min_bytes'

    例如,设置nvme0n1磁盘设备的最小回写带宽配额占过去一段时间系统总回写带宽的20%。

    sudo sh -c 'echo 606857625 > /sys/class/bdi/nvme0n1/min_bytes'

回写带宽配额上限

回写带宽配额上限定义了文件系统在写脏页触发抑制时,该文件系统分配到的回写带宽配额上限。其主要针对NFS、FUSE等带宽容易受网络因素影响而波动的文件系统,限制其回写带宽配额占用避免影响其他文件系统。以下三个接口均可设置该参数,但同一时刻只能有其中一个接口生效。

max_ratio
max_ratio_fine
max_bytes

使用限制

  • Alibaba Cloud Linux 2。

  • Alibaba Cloud Linux 3。

配置max_ratio

/sys/class/bdi/<bdi>/max_ratio描述该文件系统的回写带宽配额上限占过去一段时间系统总回写带宽的百分比。默认值为 100。

  • 查询max_ratio

    <bdi>需替换为对应设备的 <major:minor>

    cat /sys/class/bdi/<bdi>/max_ratio
  • 配置max_ratio

    <bdi>需替换为对应设备的 <major:minor>

    <value>需替换为要设置的值。

    sudo sh -c 'echo <value> > /sys/class/bdi/<bdi>/max_ratio'

    例如,设置nvme0n1磁盘设备的回写带宽配额上限占过去一段时间系统总回写带宽的60%。

    sudo sh -c 'echo 60 > /sys/class/bdi/259:0/max_ratio'

使用限制

Alibaba Cloud Linux 3(内核5.10.134-17及更高版本)。

配置max_ratio_fine

/sys/class/bdi/<bdi>/max_ratio_fine描述该文件系统的回写带宽配额上限占过去一段时间系统总回写带宽的比例,以百万分之一为单位,相较于max_ratio提供更高精度。

  • 查询max_ratio_fine

    <bdi>需替换为对应设备的 <major:minor>

    cat /sys/class/bdi/<bdi>/max_ratio_fine
  • 配置max_ratio_fine

    <bdi>需替换为对应设备的 <major:minor>

    <value>需替换为要设置的值。

    sudo sh -c 'echo <value> > /sys/class/bdi/<bdi>/max_ratio_fine'

    例如,设置nvme0n1磁盘设备的回写带宽配额上限占过去一段时间系统总回写带宽的60%。

    sudo sh -c 'echo 600000 > /sys/class/bdi/259:0/max_ratio_fine'

使用限制

Alibaba Cloud Linux 3(内核5.10.134-17及更高版本)。

配置max_bytes

/sys/class/bdi/<bdi>/max_bytes描述该文件系统的回写带宽配额上限,以字节为单位。

  • 查询max_bytes

    <bdi>需替换为对应设备的 <major:minor>

    cat /sys/class/bdi/<bdi>/max_bytes
  • 配置max_bytes

    <bdi>需替换为对应设备的 <major:minor>

    <value>需替换为要设置的值。

    sudo sh -c 'echo <value> > /sys/class/bdi/<bdi>/max_bytes'

    例如,设置nvme0n1磁盘设备的回写带宽配额上限占过去一段时间系统总回写带宽的60%。

    sudo sh -c 'echo <value> > /sys/class/bdi/259:0/max_bytes'

文件系统脏页水位阈值

当系统整体脏页水位超过free_run阈值时,缓存写脏页的速度将受到抑制,以控制系统的脏页水位。

为了对单个文件系统的脏页水位上限进行配置,必须开启strict limit特性。开启后,该文件系统的脏页水位阈值为全局的free_run阈值乘以该文件系统的配额比例,该比例基于其过去一段时间的平均回写带宽占系统总回写带宽的百分比,并通过min_ratiomax_ratio参数修正得到。

开启strict limit特性后,只要该文件系统的脏页水平超过其自身阈值,该文件系统缓存写脏页的速度将受到抑制。

使用限制

Alibaba Cloud Linux 3(内核5.10.134-17及更高版本)。

配置strict_limit

/sys/class/bdi/<bdi>/strict_limit参数描述文件系统是否开启strict limit特性。值为1表示开启strict limit 特性,值为0表示关闭strict limit 特性。您可以通过以下方法查询或配置strict_limit

  • 查询strict_limit

    <bdi>需替换为对应设备的 <major:minor>

    cat /sys/class/bdi/<bdi>/strict_limit
  • 开启strict_limit

    <bdi>需替换为对应设备的 <major:minor>

    sudo sh -c 'echo 1 > /sys/class/bdi/<bdi>/strict_limit'
  • 关闭strict_limit

    <bdi>需替换为对应设备的 <major:minor>

    sudo sh -c 'echo 0 > /sys/class/bdi/<bdi>/strict_limit'
  • 本页导读 (1)
  • 背景信息
  • QoS 控制
  • 最低回写带宽配额
  • 回写带宽配额上限
  • 文件系统脏页水位阈值
  • 使用限制
  • 配置strict_limit
AI助理

点击开启售前

在线咨询服务

你好,我是AI助理

可以解答问题、推荐解决方案等