クラウドサーバーサービス(IaaS)の性能比較・ディスク編～IOPSの計測～

##はじめに
　今回は以下のクラウドサーバーを対象にIOPSを計測し、ストレージの性能を比較します。IDCFクラウドについては初期のゾーンであるhenryと最新ゾーンのluxの2種類を計測し、ゾーン間の違いも計測してみます。

＊2017/06/05：NIFTYクラウドの結果を追加しました。

**計測対象：**

 - Amazon Web Services (AWS) (ボリュームタイプ：gp2/SSD)
 - Google Cloud Platform (GCP) (SSD)
 - IDCFクラウド（ゾーン：lux/SSD）
 - IDCFクラウド（ゾーン：henry/HDD）
 - NIFTY Cloud（ゾーン：east-11）
 - NIFTY Cloud（ゾーン：east-14）

##1. 前提知識
　ディスクの性能がなぜ大事？IOPSとは？
　（自明な方は読み飛ばして下さい:bow:）
###1.1 仮想化環境とストレージ性能

> - 仮想化環境ではストレージの性能がネックになりやすい
- HDDはシーケンシャルI/O、SSDはランダムI/Oが得意
- 仮想化環境では主にランダムアクセスに対する性能が重要になる（複数の仮想マシンからのアクセスが発生するから）
 
>参考: 
　[IT機器の進化とHDD性能とのギャップ](http://cn.teldevice.co.jp/column/detail/id/62)
　[ストレージのいろは｜ソフトバンク コマース＆サービス](http://cm.it-ex.com/c/focus/storage_iroha/index08.html)
　[クラウドを加速させるSSD技術 － ＠IT](http://www.atmarkit.co.jp/fnetwork/tokusyuu/66ssd01/01.html)


####1.2 IOPSとは？

>- ストレージ性能を図る指標
- ディスクが1秒当たりに処理できるI/Oアクセスの数
- IOPSが高ければ高いほど，高性能なディスクと言える
- IOPSはブロックサイズが小さいと大きな値になる傾向がある
- IOPSは読み込みと書き込みの割合で値が大きく変わる

>参考: 
　[サーバー選択の基礎 - Part4 IOPSを理解する：ITpro](http://itpro.nikkeibp.co.jp/article/lecture/20070104/258117/)
　[ストレージのいろは｜ソフトバンク コマース＆サービス](http://cm.it-ex.com/c/focus/storage_iroha/index08.html)

##2. 計測方法

###2.1 実施環境
- 対象サーバ

|               |       AWS(EC2)          |               GCP              |         IDCF(HDD)          |         IDCF(SSD)          | NIFTY           | NIFTY             |
|:--------------|------------------------:|-------------------------------:|---------------------------:|---------------------------:|----------------:|------------------:|
| ゾーン        |           ap-northeast-1|               asia-northeast1-a|                       henry|                         lux|east-11          |east-14            |
| マシンスペック|m4.large (2vCPUメモリ8GB)|n1-standard-2 (2vCPUメモリ7.5GB)|standard.M8 (2vCPUメモリ8GB)|standard.M8 (2vCPUメモリ8GB)|large (4vCPU×4GB)|e-large (4vCPU×4GB)|
| OS            |                 CentOS 7|                        CentOS 7|                    CentOS 7|                    CentOS 7|CentOS 7         |CentOS 7           |
| ディスクサイズ|                      8GB|                            10GB|                        15GB|                        15GB|30GB             |30GB               |

- マシンスペックはAWSのm4.largeに合わせてみました。（※NIFTYクラウドはデモ環境なのでスペックが異なっています）
- ディスクサイズは基本ディスクのサイズです。

###2.1 ツール
　ベンチマークツールとしてfioを使用します。
####2.1.1 fioのインストール
 - `# yum install epel-release`
　 まず、EPELのリポジトリをインストールします。
 
 - `# yum repolist all epel*`　 　 
　 追加したリポジトリが有効かどうか確認。　 　 
 - `# yum install fio`
　 fioをインストール。

####2.1.2 計測パラメータの設定
　小さめのブロックサイズの方がベストエフォートに近いはずなので、今回はブロックサイズを4KBに設定し、以下のパターンで比較してみます。

- ランダムリード
- ランダムライト
- ランダムリードライト

　パラメータ条件をfioのパラメータ設定ファイルとして準備します。


```Rand-Read-4k.fio
[global]
ioengine=libaio
direct=1
ioscheduler=noop
invalidate=1
group_reporting
directory=/home
runtime=60

[Rand-Read-4k]
readwrite=randread
size=4G
bs=4k
iodepth=32
numjobs=1
```
```Rand-Write-4k.fio
[global]
ioengine=libaio
direct=1
ioscheduler=noop
invalidate=1
group_reporting
directory=/home
runtime=60

[Rand-Write-4k]
readwrite=randwrite
size=4G
bs=4k
iodepth=32
numjobs=1
```

```Rand-ReadWrite-4k.fio
[global]
ioengine=libaio
direct=1
ioscheduler=noop
invalidate=1
group_reporting
directory=/home
runtime=60

[Rand-ReadWrite-4k]
readwrite=randrw
size=4G
bs=4k
iodepth=32
numjobs=1
```
　fioを実行します。
`fio -f Rand-Read-4k.fio  -filename=/tmp/fio_test -output Rand-Read-4k.result`
`fio -f Rand-Write-4k.fio  -filename=/tmp/fio_test -output Rand-Write-4k.result`
`fio -f Rand-ReadWrite-4k.fio  -filename=/tmp/fio_test -output Rand-ReadWrite-4k.result`
##3. 計測結果
###3.1 ローカルディスクの性能

|              		|     AWS      |     GCP      |  IDCF(henry) | IDCF(lux)   | NIFTY(east-11)|NIFTY(east-14)|
|:----------------------|-------------:|-------------:|-------------:|------------:|--------------:|-------------:|
| Rand-Read-4k		|          3110|          2749|          2664|        80282|          67043|         41897|
| Rand-Write-4k		|          3110|          1814|          2540|        41347|         103127|         53603|
| Rand-ReadWrite-4k	|          1555|           884|          1269|        27666|          36907|         11848|
※ 2017/05/15の実測値です。
※ NIFTY Cloudは2017/06/02の実測値です。
 
 - AWSはボリュームタイプをgp2にしたので、3000IOPSがバーストの上限です。これ以上のI/O性能が求められる場合は Provisioned IOPS [PIOPS]を選択するべき、ということですね。
 - IDCFの最新ゾーンであるluxは非常に高いI/O性能を持っていることがわかりました。
 - 同じIDCFでも、古いゾーンであるhenryはluxよりもだいぶディスク性能が劣ることがわかりました。でも、ディスク性能に限って言えばGCPと大差ないようです。
 - NIFTY Cloudの計測結果はスペックが異なっているため一概には言えませんが、かなり高いディスク性能を持っていることが伺えます。

###3.2 増設ディスクの性能
■ NIFTY Cloudの増設ディスク
　NIFTY Cloudの増設ディスクには標準ディスク、高速ディスク、フラッシュドライブの3種類があり、高速ディスクはAとBの２系統があります（性能・仕様は同じ）。それぞれのディスクのIOPSも計測してみました。

（条件1） ゾーン：east-11, スペック：large

|              		|フラッシュ|  高速A  |  高速B | 標準   |
|:----------------------|--------:|--------:|-------:|-------:|
| Rand-Read-4k		|    76348|    34505|   59570|   53887|
| Rand-Write-4k		|    48279|    55289|   57537|   23158|
| Rand-ReadWrite-4k	|    27237|    20424|   23405|   17783|


（条件2） ゾーン：east-14, スペック：e-large

|              		|フラッシュ|  高速A  |  高速B | 標準   |
|:----------------------|--------:|--------:|-------:|-------:|
| Rand-Read-4k		|    27409|    67595|   36714|   53887|
| Rand-Write-4k		|    16566|    46045|   48559|   23158|
| Rand-ReadWrite-4k	|     9935|    58132|   12965|   17783|


- フラッシュドライブと高速ディスクの性能差はそれほど見受けられません。むしろ条件２の場合のように高速ディスクのほうが早いときもあるようです。
- 標準ディスクでも思ったより性能は低くありません。