XFS与EXT4 Direct IO写USB性能分析与优化

需积分: 50 1 下载量 43 浏览量 更新于2024-09-04 收藏 65KB TXT 举报
"深入探讨xfs与ext4在direct方式下写USB存储的性能差异与优化" 在Linux内核4.19.67版本中,针对文件系统性能进行了对比分析,特别是关注xfs和ext4在direct I/O模式下写入USB磁盘的性能。通过执行`dd`命令进行基准测试,发现在该环境下xfs的写入速度平均为9.4M/s,而ext4的速度在6.6M/s到8.8M/s之间波动,通常在7.5M/s左右。 1. **xfs与ext4的写入机制差异**: - xfs使用iomap机制,将数据结构(struct bio)直接提交到block层,这确保了数据以2M连续内存的页形式提交。 - ext4则依赖filemap,并通过fs/direct-io接口提交数据(struct bio),这种方式并未保证数据在内存中的连续性。 2. **性能差异的关键因素**: - 这种性能差距的关键在于,即使数据大小相同,iomap保证了2M的连续内存,而direct-I/O则不保证,这影响了数据传输效率。 3. **block层的处理**: - block层通过queue_rq回调函数将数据包装成struct blk_mq_queue_data结构,然后传递给SCSI层。 4. **SCSI层的处理**: - SCSI层接收到数据后,将其转换为struct scsi_cmnd格式,通过消息方式传递给USB-storage驱动。 5. **数据拆分策略**: - 尽管block层的缓冲区大小为2M,但在提交到SCSI层(进一步到USB-storage)时,会根据设备配置进行拆分,例如默认按照120K进行拆分。 6. **性能优化点**: - max_sectors配置对性能有很大影响。将max_sectors设置为4096扇区(等于2M)可以显著提升性能,ext4的写入速度从7.5M/s提升到9.5M/s,xfs则从9.4M/s提升到10.4M/s。 7. **xfs优于ext4的原因**: - xfs在申请内存页时保证了连续性,这使得DMA(Direct Memory Access)能更高效地运行,从而提高了写入速度。相比之下,ext4不保证内存页的连续性,导致其性能逊色于xfs。 通过这些深入的分析,我们可以理解xfs和ext4在direct I/O模式下的性能差异,并找到优化USB存储写入性能的方法。优化文件系统的配置,特别是max_sectors参数,可以有效地改善直接写入操作的效率。对于需要高写入速度的应用场景,选择xfs或优化ext4的配置可能是有益的策略。