SSD固态硬盘文件系统选择与性能优化

最近由于工作需要,对ext3, ext4, reiserfs, reiser4, xfs, jfs, btrfs, nilfs2, logfs多种文件系统在SSD固态硬盘上的性能进行了全面的测试评估与分析,为实际应用选择SSD文件系统提供参考,并给出性能优化建议。测试中使用的Benchmark包括postmark, randomio, bonnie++, iozone, filebench,以及dd, 编译内核, 创建/删除海量文件目录等等。

1、SSD文件系统选择

EXT4、Reiserfs在性能方面表现较优,其中EXT4数据吞吐量突出,Reiserfs在IOPS(元数据操作)方面较优。

Btrfs、Nilfs2在性能方面表现稍差,但两者均是日志结构(log-structure),Btrfs更是具有COW/WAFL特性,并对针对SSD进行了优化。因此,有利于SSD的损耗均衡,延长使用寿命。

对于频繁小文件应用,建议选择Reiserfs, ext4, btrfs;对于大文件应用,建议选择ext4,btrfs;如果SSD寿命优化性能,则建议选择Btrfs, nilfs2。至于生产系统选择哪个文件系统,请结合线上实际测试参考。

2、关于logfs文件系统

logfs也是一种日志结构文件系统,而且可以直接工作与SSD,这与JFFS/YAFFS不同。但是,测试结果表明,logfs目前非常不成熟,仍不稳定,未达到实际应用标准,诸如内核编译、大量文件目录创建/删除、postmark等benchmark均未能通过测试。由于SSD故障,randomio, bonnie++, iozone, filebench未完成。因此,不建议当前阶段实际应用。

3、SSD性能特点

SSD数据寻址时间很小,甚至可以忽略不计,顺序与随机IO性能相差不大。SAS、SATA磁盘随机IO性能要小于顺序IO很多。

SSD读性能要优于写性能,这是由于写前擦除、擦除块边界对齐、损耗均衡等原因所致。

SSD目录创建/删除操作性能与SAS/SATA相差不大,这与VFS和具体文件系统元数据组织与操作规则相关。

4、SSD文件系统优化

1、Cache

如果SSD带有DRAM缓存,请打开cache。

2、readahead

打开块驱动程序预读功能,预读扇区数建议256。(参考EXT3文件系统优化)

3、I/O scheduler

SSD数据寻址时间非常小,甚至可以忽略不计,不需要对IO请求进行插入和排序。因此,noop是最理想的调度算法。

4、journal

如果文件系统支持关闭journal,则关闭;否则,如果支持data=writeback,则在mount时指定。

5、文件系统参数

请参考Ext3文件系统优化,通常保持defaults,特殊情况请参考mkfs参数。

6、mount参数

ext3 defaults,async,noatime,nodiratime

ext4 defaults,async,noatime,nodiratime,data=writeback,barrier=0

xfs defaults,async,noatime,nodiratime,barrier=0

reiser4 defaults,async,noatime,nodiratime

reiserfs defaults,async,noatime,nodiratime,notail,data=writeback

jfs defaults,async,noatime,nodiratime

btrfs defaults,async,noatime,nodiratime,ssd

nilfs2 defaults,async,noatime,nodiratime

logfs defaults,async,noatime,nodiratime,data=writeback,barrier=0