文件系统EXT3,EXT4和XFS的区别

本文对比了Linux下的三种文件系统:EXT3、EXT4和XFS。EXT3支持最大32TB文件系统;EXT4扩大到1EB,并优化了数据块分配;XFS则针对高性能存储进行了优化,支持PB级存储。

文件系统EXT3,EXT4和XFS的区别:
1. EXT3
(1)最多只能支持32TB的文件系统和2TB的文件,实际只能容纳2TB的文件系统和16GB的文件
(2)Ext3目前只支持32000个子目录
(3)Ext3文件系统使用32位空间记录块数量和i-节点数量
(4)当数据写入到Ext3文件系统中时,Ext3的数据块分配器每次只能分配一个4KB的块
2. EXT4
EXT4是Linux系统下的日志文件系统,是EXT3文件系统的后继版本。
(1)Ext4的文件系统容量达到1EB,而文件容量则达到16TB
(2)理论上支持无限数量的子目录
(3)Ext4文件系统使用64位空间记录块数量和i-节点数量
(4)Ext4的多块分配器支持一次调用分配多个数据块
3. XFS
(1)根据所记录的日志在很短的时间内迅速恢复磁盘文件内容
(2)采用优化算法,日志记录对整体文件操作影响非常小
(3) 是一个全64-bit的文件系统,它可以支持上百万T字节的存储空间
(4)能以接近裸设备I/O的性能存储数据

本文基于kernel4.19.67版本分析。 基于如下命令完成写测试 time dd if=/dev/zero of=./test.bin count=2 bs=1G oflag=direct 同样的命令发现xfs的性能是9.4M/s, ext4是6.6M-8.8M/s, 且波动很大,大部分时间集中在7.5M/sz每秒。 基于上面的现象深入分析基于xfsext4分别direct方式写usb时的性能差异,找到了一种提升写usb性能的办法。 同时详细记录并描述了从vfs_write开始,到hcd层写数据的流程及关键点。 经过分析得到了如下几个知识点: a)xfsext4 即使是direct方式下写数据的方式也不一样,xfs依赖iomap是将数据(struct bio)提交到block层; ext4依赖filemap,最终依赖fs/direct-io将数据(struct bio )提交到block b)iomap提交到block层的数据以2M连续内存的页的方式提交,direct-io没有保证连续内存,虽然数据大小也是2M. 这是xfsext4出现性能差异的主要原因。 c)每次2M数据大小的限制是block层设置的 d)block层以回调函数(queue_rq)调用方式将数据(struct request)包装成struct blk_mq_queue_data格式提次到scsi层 e)scsi以消息方式将blk_mq_queue_data数据包装成struct scsi_cmnd格式发送给驱动usb-storage f)block层的缓冲区大小虽然有2M, 但是真正提交到scsi层时(scsi进一步提交到usb-storage)会根据设备本身的配置来拆分。如默认按120K来拆分 g)经过分析发现影响性能的点主要有一点,一个是max_sectors大小的配置,如果配置为4096扇区大小=2M, 可以将ext4的性能从7.5M/s提高到9.5M/s. xfs可以从9.4M/s提高到10.4M/s h)xfsext4快的原因是因为xfs申请的内存页是连续的页,DMA可以更快运行,但是ext4没有保证,所以xfsext4明显快。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值