JBD2作为ext4文件系统的内核线程,在使用过程中常会遇到影子状态(BH_Shadow),影响系统性能。为解决使用JBD2过程中出现的异常,Alibaba Cloud Linux 2(内核版本4.19.81-17.al7
开始)和Alibaba Cloud Linux 3对JBD2进行了优化。本文主要介绍优化JBD2的接口。
背景信息
ext4作为最常用的日志文件系统之一,更新日志(journal)的内核线程为JBD2,JBD2对ext4文件系统而言,是一个全局资源。您在使用过程中,可能出现JBD2内核线程对缓存尝试获取访问权限时,发生缓存页处于影子状态(BH_Shadow),从而引发JBD2持续等待缓存页回写到磁盘的时间过长的情况,该情况会影响系统性能。因此Alibaba Cloud Linux针对特定场景进行了优化,增加了内核接口force_copy
,允许用户启用优化功能,以强制进行缓存页拷贝,从而减少在缓存页处于影子状态的等待。同时,为了辅助分析文件系统相关的服务质量(QoS)中的问题,Alibaba Cloud Linux增加了一个JBD2的相关信息统计接口stats
。
接口说明
接口 | 描述 |
force_copy | 接口位于/proc/fs/jbd2/<device>-8/force_copy,其中变量 重要 设置该接口后会额外消耗一定的内存。 |
stats | 接口位于/proc/fs/jbd2/<device>-8/stats。用于辅助确认文件系统的QoS中的问题是否因JBD2引发。 |
接口示例
force_copy
和stats
接口示例如下。
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。