Chinaunix首页 | 论坛 | 博客
  • 博客访问: 788068
  • 博文数量: 127
  • 博客积分: 2669
  • 博客等级: 少校
  • 技术积分: 1680
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-23 11:39
文章分类

全部博文(127)

文章存档

2014年(5)

2013年(19)

2012年(25)

2011年(9)

2010年(25)

2009年(44)

分类: 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 1 thread: 87 MiB/sec
  • ext4 4 threads: 74 MiB/sec
  • xfs 4 threads: 97 MiB/sec

上面的结果可以看出 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 4 threads: 120 MiB/sec
  • xfs 4 threads: 97 MiB/sec

这是在 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
阅读(6697) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~