JBD2优化接口

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

背景信息

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