初投稿です。
ツッコミや追加測定したほうがいい事項あればコメントください
背景
自作サーバを構築したので、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直接マウント
1. CentOSをインストール
[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)
2. パーティション作成
[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 を更新するのを忘れないようにしてください。
3. 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
4.以下の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
5. 結果は以下の通り。
- 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 |
(2)ESXi上の仮想マシン・仮想ディスク
6.サーバにESXiをインストールする。
7.VMを作成し、CentOSをインストールする。
7.HDDをデータストアに追加する。
8.新規仮想ディスクを作成し、CentOSにマウントする。
9.4.と同じコマンドで測定。
10.結果は以下の通り。
- 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 |
(3)ESXi上の仮想マシン・HDDをrawディスクマウント
11.7.で追加したデータストアを削除。
12.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のプロパティから、既存の仮想ディスクの追加操作をして、↑で追加したファイルを選択する。
こんな感じになる。
13.4.と同じコマンドで測定。
14.結果は以下の通り。
- 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・メモリ等ログもとってあるのでもうちょい考察して更新します。