JBD2作为ext4文件系统的内核线程,在使用过程中常会遇到影子状态(BH_Shadow),影响系统性能。为解决使用JBD2过程中出现的异常,Aliyun Linux 2在内核版本4.19.81-17.al7对JBD2进行了优化。本文主要介绍优化JBD2的接口。

背景信息

ext4作为最常用的日志文件系统之一,更新日志(journal)的内核线程为JBD2,JBD2对ext4文件系统而言,是一个全局资源。您在使用过程中,可能出现JBD2内核线程对缓存尝试获取访问权限时,发生缓存页处于影子状态(BH_Shadow),从而引发JBD2持续等待缓存页回写到磁盘的时间过长的情况,该情况会影响系统性能。因此Aliyun Linux 2针对特定场景进行了优化,增加了内核接口force_copy,允许用户启用优化功能,以强制进行缓存页拷贝,从而减少在缓存页处于影子状态的等待。同时,为了辅助分析文件系统相关的服务质量(QoS)中的问题,Aliyun Linux 2增加了一个JBD2的相关信息统计接口stats

接口说明

接口 描述
force_copy 接口位于/proc/fs/jbd2/<device>-8/force_copy,其中变量device指块存储设备名。当设置force_copy接口后,系统强制进行数据拷贝操作,从而减少处于BH_Shadow时的等待。
注意 设置该接口后会额外消耗一定的内存。
stats 接口位于/proc/fs/jbd2/<device>-8/stats。用于辅助确认文件系统的QoS中的问题是否因JBD2引发。

接口示例

force_copystats接口示例如下。

  • force_copy接口默认为关闭状态。将接口设置1为调用该接口;设置0为关闭该接口。
    echo 1 > /proc/fs/jbd2/nvme0n1-8/force_copy    # 调用接口
  • 使用以下命令查看stats接口。
    cat /proc/fs/jbd2/nvme0n1-8/stats
    返回结果如下。
    337 336 65536 0 14837 1701504 16 0 20058 5 33082732 605 942 1000 1000
    返回结果中,各域说明如下。
    描述
    第1个域 事务ID。
    第2个域 请求的事务数。
    第3个域 最大事务缓存。
    第4个域 事务等待时间。
    第5个域 事务请求延迟。
    第6个域 事务运行时间。
    第7个域 事务锁住时间。
    第8个域 事务刷新时间。
    第9个域 事务logging时间。
    第10个域 平均提交时间。
    第11个域 事务包含的原子操作handle个数。
    第12个域 事务包含的块数。
    第13个域 事务已记录的块数。
    第14个域 HZ(内核配置中的时间常量)。
    第15个域 HZ转化为ms。