性能
我写了一个小型基准测试(源代码),以找出哪种文件系统在处理数十万个小型文件时表现最佳:
- 使用/ dev / urandom中的数据创建300000个文件(512B至1536B)
- 重写30000个随机文件并更改大小
- 读取30000个连续文件
- 读取30000个随机文件
删除所有文件
每一步后同步和删除缓存
结果(以秒为单位的平均时间,越低越好):
Using Linux Kernel version 3.1.7
Btrfs:
create: 53 s
rewrite: 6 s
read sq: 4 s
read rn: 312 s
delete: 373 s
ext4:
create: 46 s
rewrite: 18 s
read sq: 29 s
read rn: 272 s
delete: 12 s
ReiserFS:
create: 62 s
rewrite: 321 s
read sq: 6 s
read rn: 246 s
delete: 41 s
XFS:
create: 68 s
rewrite: 430 s
read sq: 37 s
read rn: 367 s
delete: 36 s
结果:
尽管Ext4的整体性能不错,但是ReiserFS在读取顺序文件方面非常快。事实证明,XFS包含许多小文件的速度很慢-在此用例中不应使用它。
碎片问题
防止文件系统在驱动器上分发文件的唯一方法是,使分区仅保持您真正需要的大小,但要注意不要将分区设置得太小,以防止文件内碎片。使用LVM可能会很有帮助。
进一步阅读
Arch Wiki上有很多有关文件系统性能的文章:
https://wiki.archlinux.org/index.php/Beginner%27s_Guide#Filesystem_types
https://wiki.archlinux.org/index.php/Maximizing_Performance#Storage_devices