Ext4 已经成为很多新版本 Linux 系统的标配文件系统,很多人问我,在 SSD 上是使用 Ext4 好呢,还是其他文件系统。
一般我们推荐 xfs ,但它牵扯到 ext3 中已有的一些问题:在 O_DIRECT 模式下每个 i 节点序列化问题(请看 Domas’s post)
但我最近做了一个性能测试发现,xfs 已经不再是最佳选择了。尽管这个测试还比较早期,但我希望先跟大家分享下。
我使用 STEC SSD 固态硬盘,容量 200GB SLC SATA
尽管 ext4 在 O_DIRECT 下仍有问题,下面是 O_DIRECT 模式下单个文件传输的速率 (sysbench fileio 16 KiB 块大小,随机写的负载):
上面的结果可以看出 Ext4 下 4 个线程的性能反而下降的问题,因此还是存在争用问题。
据说 ext4 设置了参数dioread_nolock能解决这个争用问题,但这个参数在我的 CentOS 6.2 上不可用,因此没法测试。
从这点来看,xfs 的确仍是最佳选择,但你还需要考虑更多方面的情况。
继续我们的测试:
启用 MySQL 5.1 + InnoDB-plugin ,然后是 MySQL 5.5 (或者 Percona Server 5.1 and 5.5), InnoDB 在 Linux 上使用 “asynchronous” IO.
我们用 sysbench 来测试 “async” 模式,然后获得如下数据:
这是在 ext4 和 xfs 上运行 MySQL 性能测试的结果。
实际上,线程数并没有显著的影响测试的结果,这也就解释了我之前的一个疑问:如果我的 MySQL 5.5 启用 async IO,那么 innodb_write_io_threads 参数还重要吗?看起来不重要。在这里我还是使用两个或四个线程来做测试,以避免过度调度的问题。
从结果上看,在固态硬盘上似乎 Ext4 是一个更好的选择,在吞吐量上比 xfs 提升了 20%。
用于测试的脚本:
for size in 100 do cd /mnt/stec sysbench --test=fileio --file-num=1 --file-total-size=${size}G prepare sync echo 3 > /proc/sys/vm/drop_caches for numthreads in 4 do sysbench --test=fileio --file-total-size=${size}G --file-test-mode=rndwr --max-time=3600 --max-requests=0 --num-threads=$numthreads --rand-init=on --file-num=1 --file-extra-flags=direct --file-fsync-freq=0 --file-io-mode=sync --file-block-size=16384 --report-interval=10 run | tee -a run$size.thr$numthreads.txt done done本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。 2KB翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务