全部博文(127)
分类: LINUX
2013-12-18 00:19:12
Ext4 已经成为很多新版本 Linux 系统的标配文件系统,很多人问我,在 SSD 上是使用 Ext4 好呢,还是其他文件系统。
一般我们推荐 xfs ,但它牵扯到 ext3 中已有的一些问题:在 O_DIRECT 模式下每个 i 节点序列化问题(请看 )
但我最近做了一个性能测试发现,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%。
用于测试的脚本:
01 | for size in 100 |
02 | do |
03 |
04 | cd /mnt/stec |
05 | sysbench --test=fileio --file-num=1 --file-total-size=${size}G prepare |
06 | sync |
07 | echo 3 > /proc/sys/vm/drop_caches |
08 |
09 | for numthreads in 4 |
10 | do |
11 | 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 |
12 | done |
13 | done |