本报告详细分析了 ext4 文件系统从 5.10 到 7.0 版本的性能优化特性,涵盖了块管理、I/O 操作、内存分配和错误处理等多个方面的改进。通过这些优化,ext4 文件系统在性能、可靠性和稳定性方面都得到了显著提升,能够更好地适应现代存储设备和工作负载。
特性:优化了 cr 0 和 cr 1 组的扫描过程
技术细节:改进了组扫描算法,提高了扫描效率
影响:加速了文件系统的块分配过程,特别是在处理大文件系统时
补丁:196e402adf2e ext4: improve cr 0 / cr 1 group scanning
特性:优化了大小写折叠加密目录的匹配过程
技术细节:改进了目录查找算法,减少了匹配时间
影响:提高了加密目录的访问性能,特别是在处理大小写不敏感的场景时
补丁:1ae98e295fa2 ext4: optimize match for casefolded encrypted dirs
特性:优化了禁用 delalloc 时的写入性能
技术细节:改进了直接 I/O 写入路径,减少了不必要的开销
影响:对于需要禁用延迟分配的场景,写入性能得到显著提升
补丁:8d5459c11f54 ext4: improve write performance with disabled delalloc
特性:使用桶(buckets)替代红黑树进行 cr 1 块扫描
技术细节:减少了块扫描的时间复杂度,提高了扫描效率
影响:加速了文件系统的块分配过程
补丁:83e80a6e3543 ext4: use buckets for cr 1 block scan instead of rbtree
特性:为小的已关闭文件使用局部组预分配
技术细节:优化了小文件的空间分配策略,减少了碎片
影响:提高了小文件的读写性能,减少了磁盘碎片
补丁:a9f2a2931d0e ext4: use locality group preallocation for small closed files
特性:避免在组之间不必要的分配扩散
技术细节:改进了块分配算法,优先在目标组中分配
影响:提高了文件的局部性,减少了寻道时间
补丁:1940265ede66 ext4: avoid unnecessary spreading of allocations among groups
特性:即使启用了 mb_optimize_scan,也优先尝试目标组
技术细节:调整了分配器的搜索策略,平衡了全局优化和局部性
影响:提高了块分配的效率和文件的局部性
补丁:4fca50d440cc ext4: make mballoc try target group first even with mb_optimize_scan
特性:在 options 文件中反映 mb_optimize_scan 值
技术细节:使配置更加透明和可管理
影响:便于管理员监控和调整优化扫描参数
补丁:3fa5d23e68a3 ext4: reflect mb_optimize_scan value in options file
特性:对碎片整理代码进行了 minor 改进
技术细节:优化了碎片整理的算法和流程
影响:提高了碎片整理的效率
补丁:d412df530f77 ext4: minor defrag code improvements
特性:为日志 inode 添加了优化的 bmap
技术细节:改进了日志 inode 的块映射机制
影响:提高了日志操作的性能
补丁:62913ae96de7 ext4, jbd2: add an optimized bmap for the journal inode
特性:优化了 ea_inode 块的扩展过程
技术细节:减少了扩展操作的开销
影响:提高了扩展属性的处理性能
补丁:1e9d62d25281 ext4: optimize ea_inode block expansion
特性:改进了扩展属性的一致性检查和错误报告
技术细节:增强了一致性检查的可靠性和错误信息的准确性
影响:提高了文件系统的可靠性和可维护性
补丁:3478c83cf26b ext4: improve xattr consistency checking and error reporting
特性:改进了 __ext4_remount() 中的错误恢复代码路径
技术细节:增强了错误处理的鲁棒性
影响:提高了文件系统在错误情况下的恢复能力
补丁:4c0b4818b1f6 ext4: improve error recovery code paths in __ext4_remount()
特性:改进了 ext4_dirhash() 的错误处理
技术细节:增强了错误检测和报告机制
影响:提高了目录操作的可靠性
补丁:4b3cb1d108bf ext4: improve error handling from ext4_dirhash()
特性:改进了 ext4_num_overhead_clusters 中的 inode 表块计数
技术细节:提高了计数的准确性
影响:优化了空间管理和资源分配
补丁:68e294dcccf9 ext4: improve inode table blocks counting in ext4_num_overhead_clusters
特性:无论 inode 格式如何,都使用优化的 mballoc 扫描
技术细节:移除了对 indirect block 格式 inode 的优化扫描限制
影响:提高了在碎片严重的文件系统中搜索空闲块的性能
补丁:3574c322b1d0 ext4: use optimized mballoc scanning regardless of inode format
特性:移除了无用的 ext4_iomap_overwrite_ops
技术细节:简化了 I/O 映射操作
影响:减少了开销,提高了 I/O 性能
补丁:012924f0eeef ext4: remove useless ext4_iomap_overwrite_ops
特性:通过增强 order-0 验证,改进了 __mb_check_buddy 中的完整性检查
技术细节:提高了内存分配的可靠性
影响:减少了内存分配错误,提高了系统稳定性
补丁:d9ee3ff810f1 ext4: improve integrity checking in __mb_check_buddy by enhancing order-0 validation
特性:修复了 mb_optimize_scan 切换时最大空闲订单列表的损坏
技术细节:确保了优化扫描的正确性
影响:提高了块分配的可靠性和性能
补丁:7d345aa1fac4 ext4: fix largest free orders lists corruption on mb_optimize_scan switch
特性:优化了 EXT4_GET_BLOCKS_DELALLOC_RESERVE 标志的设置
技术细节:减少了不必要的标志设置操作
影响:提高了延迟分配的效率
补丁:8b8252884f2f ext4: optimize the EXT4_GET_BLOCKS_DELALLOC_RESERVE flag set
mballoc(多块分配器)是 ext4 性能的关键组件,从 5.10 到 7.0 版本的多次优化主要集中在:
这些优化共同提高了块分配的效率,减少了碎片,提高了文件的局部性,从而提升了整体 I/O 性能。
这些优化减少了 I/O 操作的开销,提高了写入性能和可靠性。
这些改进提高了文件系统的可靠性和稳定性,减少了数据损坏的风险。
| 优化类别 | 性能提升 | 适用场景 | 技术收益 |
|---|---|---|---|
| mballoc 优化 | 中到高 | 大文件系统、碎片严重的系统 | 提高块分配效率,减少碎片 |
| I/O 操作优化 | 中 | 高并发写入、日志密集型工作负载 | 提高写入性能,减少 I/O 开销 |
| 错误处理改进 | 低到中 | 可靠性要求高的系统 | 提高系统稳定性,减少数据损坏风险 |
| 内存管理优化 | 低 | 内存受限环境 | 减少内存使用,提高内存效率 |
noatime 和 nodiratime 减少元数据写入discard 选项commit 间隔减少日志写入频率barrier=0(如果使用电池备份的 RAID 控制器)从 5.10 到 7.0 版本,ext4 文件系统通过持续的优化,在块分配、I/O 操作和错误处理等方面取得了显著的性能提升。这些优化使 ext4 能够更好地适应现代存储设备和工作负载,特别是对于 RocksDB 等需要高 I/O 性能的应用场景。
主要的性能提升来自于:
对于使用 ext4 文件系统的用户,升级到最新内核版本可以获得这些性能优化带来的好处,同时结合应用级别的调优,可以进一步提升系统的整体性能。
未来,ext4 还将继续优化,以适应不断发展的存储技术和工作负载需求,保持其作为 Linux 系统默认文件系统的地位。