ESXiサーバのHDD性能を測定してみた


初投稿です。
ツッコミや追加測定したほうがいい事項あればコメントください

## 背景

自作サーバを構築したので、VMWare ESXiホストにして、VMをファイルサーバとして使いたい。
仮想ディスクではオーバーヘッドが大きくなってしまうが、rawディスクとしてゲストOSにマウントすれば行けるんじゃないだろうか？

ということで、

(1) HDDを直接マウント
(2) ESXi上の仮想マシン・仮想ディスク
(3) ESXi上の仮想マシン・HDDをrawディスクマウント

のそれぞれでディスク性能を比較してみる。
あと、趣旨とは関係ないのだが初めてM.2インタフェースのSSDを買っちゃったのでついでに性能を図ってみている。

## 環境
### ハード
* マザーボード: GIGABYTE GA-H270-HD3
* CPU : Intel Core i5 7600T
* メモリ: DDR4 32GB
* SSD(OS用): Samsung 960 EVO M.2
* HDD(データ用) : TOSHIBA DT01ACA300 3000GB

### ソフト
* ゲストOS・直接マウント用OS:CentOS 7.3 Minimal
* ESXi : VMWare ESXi 6.0 Update 2
* fio : fio-2.17

## 方法

fioを使う。
使い方は以下URLを参考にした。
http://ossfan.net/setup/linux-24.html


## 手順

### (1)HDD直接マウント

 １. CentOSをインストール

~~~
[root@localhost ~]# cat /etc/redhat-release 
CentOS Linux release 7.3.1611 (Core) 

~~~

 ２. パーティション作成

~~~
[root@localhost ~]# parted
GNU Parted 3.1
/dev/sda を使用
GNU Parted へようこそ！ コマンド一覧を見るには 'help' と入力してください。
(parted) select /dev/sda
/dev/sda を使用
(parted) mkpart
パーティションの名前?  []? test
ファイルシステムの種類?  [ext2]? xfs 
開始? 0G
終了? 3000G
(parted) quit                                                             
通知: 必要であれば /etc/fstab を更新するのを忘れないようにしてください。
~~~

３. XFSでフォーマット。

あまり考えずにCentOS7から標準になったXFSを選択した。ひょっとして速度的にはext4の方が良かったりするんだろうか？

~~~
[root@localhost ~]# df -Th
ファイルシス        タイプ   サイズ  使用  残り 使用% マウント位置
/dev/mapper/cl-root xfs         50G  3.1G   47G    7% /
devtmpfs            devtmpfs    16G     0   16G    0% /dev
tmpfs               tmpfs       16G     0   16G    0% /dev/shm
tmpfs               tmpfs       16G   17M   16G    1% /run
tmpfs               tmpfs       16G     0   16G    0% /sys/fs/cgroup
/dev/nvme0n1p1      xfs       1014M  170M  845M   17% /boot
tmpfs               tmpfs      3.2G     0  3.2G    0% /run/user/0
/dev/sda1           xfs        2.8T   33M  2.8T    1% /mnt
~~~


４．以下のfioコマンドを実行。
以下を参考に作成。
http://qiita.com/toshihirock/items/fa4d310115e6921ab0ac

ファイルサーバ想定なのでベースサイズは32MBに設定。
32MBでも少ない？


(☆)

~~~
# シーケンシャルリード
fio -filename=/mnt/test2g -direct=1 -rw=read -bs=32m -size=2G -numjobs=16 -runtime=10 -group_reporting -name=file1 -output=seqread.txt

# シーケンシャルライト
fio -filename=/mnt/test2g -direct=1 -rw=write -bs=32m -size=2G -numjobs=16 -runtime=10 -group_reporting -name=file1 -output=seqwrite.txt

# ランダムリード＆ライト
fio -filename=/mnt/test2g -direct=1 -rw=randrw -bs=32m -size=2G -numjobs=16 -runtime=10 -group_reporting -name=file1 -output=randrw.txt

~~~


５． 結果は以下の通り。

* HDD直接マウント

|type|IOPS|スループット(MB/s)|実行時間(ms)|
|---|---|---|---|
|seqread|11|380|10980|
|seqwrite|6|231|11314|
|randread|2|96.4|12533|
|randwrite|2|69.8|12510|


* SSD直接マウント

|type|IOPS|スループット(MB/s)|実行時間(ms)|
|---|---|---|---|
|seqread|36|1234|10281|
|seqwrite|46|1577|10320|
|randread|26|874|10294|
|randwrite|26|903|10294|


### （２）ESXi上の仮想マシン・仮想ディスク

６．サーバにESXiをインストールする。
７．VMを作成し、CentOSをインストールする。
７．HDDをデータストアに追加する。
８．新規仮想ディスクを作成し、CentOSにマウントする。
９．４．と同じコマンドで測定。
１０．結果は以下の通り。

* HDD仮想ディスク

|type|IOPS|スループット(MB/s)|実行時間(ms)|
|---|---|---|---|
|seqread|11|386|11034|
|seqwrite|6|206|12233|
|randread|2|77.9|12932|
|randwrite|1|62.3|12932|


* SSD仮想ディスク

|type|IOPS|スループット(MB/s)|実行時間(ms)|
|---|---|---|---|
|seqread|28|967|10509|
|seqwrite|47|1587|10297|
|randread|21|715|10276|
|randwrite|23|774|10276|


### （３）ESXi上の仮想マシン・HDDをrawディスクマウント

１１．７．で追加したデータストアを削除。
１２．HDDをRawディスクとしてマウントする。
以下、参考。
http://blog.hitsujin.jp/entry/2014/06/08/161357

* ESXiサーバにSSH接続して（SSHのサービスはデフォルトでは止まっているのでClient Hostで立ち上げる）
以下コマンドを実行。

```
[root@localhost:~] vmkfstools -z /vmfs/devices/disks/t10.ATA_____TOSHIBA_DT01ACA300_________________________________57
8BL1XAS "/vmfs/volumes/datastore1/test2/rawhdd.vmdk"
```

* VMのプロパティから、既存の仮想ディスクの追加操作をして、↑で追加したファイルを選択する。

こんな感じになる。

![kobito.1500402321.081352.png](https://qiita-image-store.s3.amazonaws.com/0/189186/2495503f-6d54-8360-3a20-244baffb9928.png "kobito.1500402321.081352.png")


１３．４．と同じコマンドで測定。

１４．結果は以下の通り。

* HDDrawマウント

|type|IOPS|スループット(MB/s)|実行時間(ms)|
|---|---|---|---|
|seqread|12|422|10817|
|seqwrite|8|275|11590|
|randread|3|112|12012|
|randwrite|2|75.5|12012|

* SSDrawマウントは出来ないのでありません。

## まとめ

* ひとまず、期待通りrawマウントによる性能劣化はなさそう。
* 仮想ディスクだと10%程度スループットが低くなる。
* 管理の上でも仮想ディスクを選択するメリットは（少なくともご自宅用の範囲では）ないのでは？
* SSD速い。キャッシュとして使って高速なファイルサーバとして構築できたりしないだろうか。

実施中のCPU・メモリ等ログもとってあるのでもうちょい考察して更新します。