Ext4 Fast Commit

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: # 概述Fast Commit 是 Linux 5.10 引入的一个新的轻量级日志方案,根据 ATC-17 的论文 “iJournaling: Fine-Grained Journaling for Improving the Latency of Fsync System Call” 实现。在我们常用的 ext4 data=ordered 日志模式下,fsync() 系统调用会因为无关 IO

概述

Fast Commit 是 Linux 5.10 引入的一个新的轻量级日志方案,根据 ATC-17 的论文 “iJournaling: Fine-Grained Journaling for Improving the Latency of Fsync System Call” 实现。
在我们常用的 ext4 data=ordered 日志模式下,fsync() 系统调用会因为无关 IO 操作导致显著的时延。Fast Commit 根据写入日志中的元数据反推,只提交与当前 transaction 相关的操作,从而优化 fsync() 的时延。
启用 Fast Commit 特性后,系统中将会有两个日志,快速提交日志用于可以优化的操作,常规日志用于标准提交。其中 Fast Commit 日志包含上一次标准提交之后执行的操作。
从作者的 benchmark 测试数据来看,打开 Fast Commit 特性后,本地 ext4 文件系统有 20% ~ 200% 的性能提升;NFS 场景也有 30% ~ 75% 的性能提升。

Benchmark Config w/o Fast Commit w/ Fast Commit Delta
Fsmark
Fsmark
Local, 8 threads
NFS, 4 threads
1475.1 files/s
299.4 files/s
4309.8 files/s
409.45 files/s
+192.2%
+36.8%
Dbench
Dbench
Local, 2 procs
NFS, 2 procs
33.32 MB/s
8.84 MB/s
70.87 MB/s
11.88 MB/s
+112.7%
+34.4%
Dbench
Dbench
Local, 10 procs
NFS, 10 procs
90.48 MB/s
34.62 MB/s
110.12 MB/s
52.83 MB/s
+21.7%
+52.6%
FileBench
FileBench
Local, 16 threads
NFS, 16 threads
10442.3 ops/s
1531.3 ops/s
18617.8 ops/s
2681.5 ops/s
+78.3%
+75.1%

如何使用

Alibaba Cloud Linux 3 / Ali5000 已经升级到 Linux 5.10 内核,因此内核默认已经支持 Fast Commit 特性。
但当前默认安装的 e2fsprogs 版本为 1.45.6,从 e2fsprogs 上游提交记录来看,需要 1.46.0 版本才支持 Fast Commit,因此当前在 Alibaba Cloud Linux 3 / Ali5000 中还不能直接使用该特性。

1、下载最新的 e2fsprogs 包并编译。

wget https://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git/snapshot/e2fsprogs-1.46.2.tar.gz
tar -xvf e2fsprogs-1.46.2.tar.gz
cd e2fsprogs-1.46.2
./configure
make

2、格式化打开 fast commit 特性。

./misc/mke2fs -t ext4 -O fast_commit /dev/vdc1

dumpe2fs 可以看到已经打开 fast commit:
Filesystem features: has_journal ext_attr resize_inode dir_index fast_commit filetype extent 64bit flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize

此外,超级块中多出 Overhead blocks 字段:
Overhead blocks: 126828

同时,Journal size 也由默认的 128M 变成 130M,应该是默认 fast commit journal size 为 journal size / 64 带来的增量:
Journal size: 130M

性能测试

在 Alibaba Cloud Linux 3 中使用 fs_mark 对比测试结果显示,性能有 1 倍以上的提升,表明在频繁 fsync() 场景的确有很大性能提升,对数据库 MySQL/PostgreSQL 等场景会有较大的性能优化。

测试命令为 2 线程:

./fs_mark  -d  /mnt/vdc1/testdir1/  -d  /mnt/vdc1/testdir2/  -D  16  -N  256  -n  409600  -L  1  -S  1  -s  4096

测试结果(data=ordered, barrier):

Test Round w/o Fast Commit w/ Fast Commit Delta
Round 1 5528.5 11448.1 +107.07%
Round 2 5512.3 11499.9 +108.62%

测试结果(data=writeback, nobarrier):

Test Round w/o Fast Commit w/ Fast Commit Delta
Round 1 7976.0 18437.4 +131.16%
Round 2 8005.2 18471.0 +130.74%

Reference

ATC-17 论文:
https://www.usenix.org/system/files/conference/atc17/atc17-park.pdf

LWN 文章:
https://lwn.net/Articles/842385/

相关实践学习
通过日志服务实现云资源OSS的安全审计
本实验介绍如何通过日志服务实现云资源OSS的安全审计。
目录
相关文章
|
Linux Anolis
性能优化特性之:EXT4 Fast Commit
本文介绍了倚天实例上进行IO优化的特性:Fast Commit,并对其优化原理、使用方法进行了详细阐述
|
存储 算法 Linux
打破常规,Linux内核新的数据结构上场maple tree(下)
打破常规,Linux内核新的数据结构上场maple tree
|
存储 固态存储 关系型数据库
性能优化特性之:16K原子写
本文介绍了在倚天实例上进行内存优化的调优特性:16K原子写 的优化原理、使用方法。
|
存储 自然语言处理 固态存储
ublk:来自Linux社区的新热点,基于io_uring的全新高性能用户态块设备
如果您想快速了解ublk的意义、作用及性能,请直接看第二节Q&A部分。一、简介用户态块设备,就是提供/dev/ublkbX这样的标准块设备给业务,业务读写这个块的实际IO处理由您编写的用户态的代码决定。这就好比您使用FUSE,所有对挂载于FUSE的目录的读写都是您编写的IO handler来处理一样。使用用户态块设备,您可以方便地向上层业务以块设备/dev/ublkbX的形式提供您的自定义
|
存储 缓存 安全
virtiofs per-inode DAX 介绍
## 背景信息 1. 什么是 virtiofs? virtiofs 是一种用于在 host/guest 之间共享文件的文件系统,由 Redhat 开源,它使得不同 guest 之间能够以快速、一致、安全的方式共享同一个 host 目录树结构,目前广泛应用于 Kata Container 作为容器的 rootfs。 2. 什么是 DAX? DAX (Direct Access) 最初是针对于
3053 0
virtiofs per-inode DAX 介绍
|
存储 固态存储 Linux
BLOCK 层这么多参数都是什么意思?!
每个 request queue 会维护一个 struct queue_limits 结构来描述对应的块设备的硬件参数,这些参数描述了硬件存储单元的组织方式,会影响 block layer 的很多行为,其中部分参数在 `/sys/block//queue/` 下导出 ```c struct request_queue { struct queue_limits limits; ... } `
4319 1
|
监控 调度 开发工具
IO神器blktrace使用介绍
## 前言 1. blktrace的作者正是block io的maintainer,开发此工具,可以更好的追踪IO的过程。 2. blktrace 结合btt可以统计一个IO是在调度队列停留的时间长,还是在硬件上消耗的时间长,利用这个工具可以协助分析和优化问题。 ## blktrace的原理 一个I/O请求的处理过程,可以梳理为这样一张简单的图: ![](http://image
19659 0
|
关系型数据库 MySQL Linux
性能分析之解决 jbd2 引起 IO 高问题
【8月更文挑战第19天】性能分析之解决 jbd2 引起 IO 高问题
1126 0
|
存储 固态存储 Java
浅析企业级SSD Multi-Stream Write技术
Multi-stream write(多流写)技术可以使SSD根据主机端提供的Stream ID,将具有相同或相似生命周期的数据写入到相同的擦除单元中去,大大提高了GC时的效率,减少了写放大,使得SSD的性能和寿命都有了较大的提升。