从2.6.28版本开始,Linux Kernel开始正式支持新的文件系统EXT4,在EXT3的基础上增加了大量新功能和特性,并能提供更佳的性能和可靠性。
EXT3其实只是在EXT2的基础上增加了一个日志功能,而EXT4的变化可以说是翻天覆地的,比如向下兼容EXT3、最大1EB文件系统和16TB文件、无限数量子目录、Extents连续数据块概念、多块分配、延迟分配、持久预分配、快速FSCK、日志校验、无日志模式、在线碎片整理、inode增强、默认启用barrier等等。
正因为迁移方便,性能令人满意,Google都已经宣布正在从EXT2转向新的EXT4。
不过在实际应用中,EXT4文件系统的性能表现却难以令人满意,甚至有随着系统内核升级而逐步下滑的趋势。其实这并不是EXT4本身的错,而是开发人员为了充分保证新文件系统的数据可靠性,不断引入新的安全保护措施,从而在性能上有所牺牲,毕竟鱼与熊掌不可兼得。
Phoronix.com近日就对采用EXT4文件系统的多个Linux Kernel进行了一次对比测试,包括64位的2.6.28、2.6.29、2.6.30、2.6.31、2.6.32、2.6.33-RC4,安装操作系统为Ubuntu 9.04,所以设置均保持默认。除了常规的性能对比测试,最后我们还会试验一下nobarrier挂接参数。
测试硬件平台是华擎ION 330HT-BD上网机,配置有Atom 330 OC 1.8GHz双核心处理器、华擎AMCP7AION-HT主板、GeForce 9400M ION集成显卡、2GB内存、希捷320GB ST9320325AS硬盘。
测试结果一览:
测试结果非常明了,Linux Kernel 2.6.28版本引入新的EXT4文件系统以来性能上确实接连损失了不少,最明显的就是读取性能,比如2.6.30及之前、2.6.31及之后的IOzone成绩,另外从2.6.32开始,PostgreSQL成绩甚至只有原来的五分之一左右。
个中原因正如我们多次说过的那样,大多数都是因为内核开发人员在不断改进EXT4系统的可靠性和安全性,毕竟这才是操作系统的基石所在,必须保障用户的稳定体验。相信这部分完善之后,性能会逐步好起来。
而且现在的EXT4系统性能也不是一无是处,很多地方还是有明显提升的,比如PostMark成绩从2.6.29到2.6.30就增加了一倍多,Dbench也在最新的2.6.33-RC4中有明显改进,AIO-Stress从2.6.30开始也好多了。
此外,开发人员还解释说,EXT4文件系统是默认开启barrier的,以便保证数据完整性,但也不可避免地会影响性能,因此如果在执行挂接(mount)命令的时候加上“nobarrier”参数,也就是执行“mount -o barrier=0”,那么性能会有明显提升。简单的四项测试证明,确有此效果。
不过这么做存在一定的危险性,系统突然断电的情况下会导致数据丢失,因此只推荐有写入缓存或者备用电池的情况下使用。