=> 結果、変わらないことがわかりました。
また、CentOSを使ったときは、カーネルのバージョンを最新にすることによってパフォーマンスが改善することがわかりました。
以下、スループットを測ったときのメモです。
インスタンスとスペック
CentOS 6 (x86_64) - with Updates HVM
Instance type: c4.2xlarge
Disc: 300GB Provisioned IOPS (SSD) 1000 IOPS
EC2のCentOS6 HVMでresize2fs "Nothing to do!"と言われたとき
http://takeshiyako.blogspot.jp/2014/12/ec2centos6-hvmresize2fs-nothing-to-do.html
こちら方法で、あらかじめ、ディスクスペースを増やしておきます。
yum updateもしておきます。
# yum -y update # reboot
現在のマウントの状況を確認。
# grep barrier /proc/mounts /dev/xvda1 / ext4 rw,relatime,barrier=1,data=ordered 0 0
fstabファイルを編集。barrier=0を付与します。
# emacs /etc/fstab UUID=xxxxxxxxxxxxxxxxx / ext4 defaults 1 1 -> UUID=xxxxxxxxxxxxxxxxx / ext4 defaults,barrier=0 1 1
サーバをリブート
# reboot
マウントの状況を確認。barrier=0が付与されていることを確認。
# grep barrier /proc/mounts /dev/xvda1 / ext4 rw,relatime,barrier=0,data=ordered 0 0
dbenchを使ってベンチマークをします。5回づつ施行します。
# yum --enablerepo=epel -y install dbench # dbench 5 -D . > ./dbench.log
I/Oバリアあり
Throughput 198.832 MB/sec 5 clients 5 procs max_latency=291.996 ms Throughput 198.525 MB/sec 5 clients 5 procs max_latency=231.604 ms Throughput 197.24 MB/sec 5 clients 5 procs max_latency=529.609 ms Throughput 198.003 MB/sec 5 clients 5 procs max_latency=537.408 ms Throughput 193.24 MB/sec 5 clients 5 procs max_latency=500.507 ms
I/Oバリア無し
Throughput 195.168 MB/sec 5 clients 5 procs max_latency=336.223 ms Throughput 196.525 MB/sec 5 clients 5 procs max_latency=341.762 ms Throughput 196.241 MB/sec 5 clients 5 procs max_latency=664.540 ms Throughput 197.79 MB/sec 5 clients 5 procs max_latency=814.218 ms Throughput 195.378 MB/sec 5 clients 5 procs max_latency=441.299 msI/Oバリアあり・なしで差がないことがわかります。
気になったので、カーネルによって差が出るか、測ってみました。
カーネル 2.6.32-431.29.2.el6.x86_64
Throughput 58.7519 MB/sec 5 clients 5 procs max_latency=204.272 ms Throughput 60.9603 MB/sec 5 clients 5 procs max_latency=197.062 ms Throughput 58.7519 MB/sec 5 clients 5 procs max_latency=204.272 ms Throughput 63.2337 MB/sec 5 clients 5 procs max_latency=658.214 ms Throughput 61.4362 MB/sec 5 clients 5 procs max_latency=984.695 ms
yum -y updateでカーネルを最新にしました。
カーネル 2.6.32-504.8.1.el6.x86_64
Throughput 195.168 MB/sec 5 clients 5 procs max_latency=336.223 ms Throughput 196.525 MB/sec 5 clients 5 procs max_latency=341.762 ms Throughput 196.241 MB/sec 5 clients 5 procs max_latency=664.540 ms Throughput 197.79 MB/sec 5 clients 5 procs max_latency=814.218 ms Throughput 195.378 MB/sec 5 clients 5 procs max_latency=441.299 msパフォーマンスが改善していることがわかります。
Amazon Linux AMI 2014.09.2 (HVM) - ami-18869819 では、もっとパフォーマンスが良かったです。
Throughput 330.06 MB/sec 5 clients 5 procs max_latency=557.884 ms Throughput 331.476 MB/sec 5 clients 5 procs max_latency=326.321 ms Throughput 329.715 MB/sec 5 clients 5 procs max_latency=614.967 ms Throughput 333.588 MB/sec 5 clients 5 procs max_latency=302.362 ms Throughput 332.771 MB/sec 5 clients 5 procs max_latency=418.299 ms
Amazon Linux AMI と CentOS それぞれのカーネルを比較したグラフです。
まとめ。
ディスクアクセスの多いアプリケーションは、Amazon Linux AMI で EBS プロビジョンド IOPS(SSD)を選択するのが良い。
これは、おそらく、ほかのOSと比べてAWS環境に最適化が施されているためである、と予想。(SR-IOVの設定の違いかな?と考えましたが未検証です。詳しい方がいらっしゃったら教えていただけると有難いです。)
あえて、CentOSを使うならば、そのままではかなりスループットが悪い。カーネルのバージョンアップによって改善されるが Amazon Linux AMI のスループットの60%ほどにとどまる。
ほかのOSでも検証してみたいです。