こんにちは藤城(@tafujish)です。IDCFクラウドでは、HighIOタイプやベアメタルサーバーにより高速なIOPSを利用できるプランを用意しており、データベースなどの高IOPSを求める用途で好評いただいています。
その一方で、「●●のタイプは何IOPS出ますか?」という質問もしばしばいただきますが、一言で回答できそうで実は難しいんです。IOPSの上限値のことなのか、ベンチマークの値なのか。それが、リードなのかライトなのか混合なのか、シーケンシャルなのかランダムなのか、ブロックサイズは?並列度は?プリコンディショニングした?キャッシュ効いてる状態?などなど、「1万IOPSです」といったように一言で回答できないのです。
「10万IOPS出ます」なんて言った日には、Queue Depthが大きいときの値だから実アプリからはそんなに出ないし、これが元になってトラブルが起きるのではと余計なことまで考え込むと回答できなくなってしまいます。そこで今回は、様々な利用目的の人が見ても、「このIOPSの値が欲しかったんだ」と言える方法を紹介し、IDCFクラウドの高速なIOPSを提供する全タイプに対してベンチマークによるIOPSを計測してみます。具体的には、ezFIOというツールを使えば、様々なI/O性能をベンチマークしレポーティングまでを一気にやってくれるのです。
ezFIOとは
I/Oのベンチマークツールとしてはfioが有名だと思います。設定次第で様々なI/Oを用いてベンチマークすることが可能です。しかし、できることが多いという反面、その設定は煩雑です。
そこで、ezFIOです。ezFIOはfioのフレームワーク(ラッパー)になっており、SSDをベンチマークするのに必要なfioのワークロード設定が組み込まれています。ezFIOを実行するだけで、シーケンシャル、ランダム、リード、ライトといった一通りのテストが実行されます。特にQueue Depthを変えて計測した値がグラフで出てくるので便利です。
さらに便利なのが、ベンチマーク結果をグラフにまとめてくれ、ODS形式(エクセルやスプレッドシートで開ける)のファイルで出力してくれます。
ezFIOの使い方
インストールも実行も簡単で、fioとPythonが入っていれば大丈夫。
ただし、デバイスに直接読み書きするので、対象のデバイス上のデータは消えてしまいます。
環境構築前など、データを入れる前に実施しましょう。
fioをインストール
PythonはOS最小インストールでも入ると思うので、fioのインストール方法を紹介します。このときsdparmも入れていますが、これはNVMeデバイスの情報取得に使われます(なくても動きます)。
CentOS 7.x の例
# yum install epel-release -y # yum install fio sdparm -y
Ubuntu 16.04 の例
# apt update # apt install fio sdparm -y
ezFIOをインストール
# wget https://github.com/earlephilhower/ezfio/archive/v1.1.tar.gz # tar zxf v1.1.tar.gz # cd ezfio-1.1
ezFIOの実行例
実行も簡単で、対象のデバイスを指定するだけです。たとえば、HighIOタイプのマシンだと、ローカルの高速フラッシュデバイスが/dev/sdbとして認識してると思いますので次のとおりです。(デバイスに直接アクセスするのでroot権限が必要です)
# ./ezfio.py --drive /dev/sdb
このあと、データが消えるので最終確認があります。
yes
といれるとテストがはじまります。
その他、オプションを紹介です。
--utilization
テストに容量の何%使うかを指定できます。デフォルトは100%です。
通常は、テストに時間はかかりますがデフォルトのままで良いと思います。データが小さいと想定していないキャッシュにのっちゃうかもしれないですし、フル容量近くになると性能落ちるSSDもあるので。
--output
結果の出力先を指定できます。デフォルトは実行したディレクトリ内です。
--yes
実行時のyes確認を省略できます。
テストがはじまるとプリコンディショニングからはじまります。SSDの場合、想定より速くなったり遅くなったりすることがあるので、プリコンディショニングとして一通りデータ埋めしておく必要がありますが、ezFIOはそこも含めて実施してくれます。
テスト完了までには、プリコンディショニングやいくつものテストを実施するため、結構な時間がかかります。例えば、Highio.3XL128 (2000GB) は11時間以上かかりますし、Highio.5XL128 (800GB) でも6時間以上かかってしまいます。デバイスの高速性と容量に応じて時間がかかってしまいます。
ezFIOの結果の見方
出力された結果のグラフについて紹介します。
- Long Term Performance Stability
IOPS性能の安定性を見ます。
ランダム30%:リード70%、ブロックサイズ4KB、256スレッド(スレッドあたりのIOデプス1)で、20分間I/Oを出し続けるテストをしています。
グラフのブレが小さいほどIOPS性能が安定していると言えます。
- Sustained Random 4K Mixed (R70:W30)
ランダムのリードとライト混合のIOPS性能を見ます。
ランダム30%:リード70%、ブロックサイズ4KBで、スレッド数(スレッドあたりのIOデプス1)を変えてそれぞれ2分間I/Oを出し続けるテストをしています。
グラフのIOPSの値が大きいほど高性能と言えます。
- Sustained 4K Random Read
ランダムリードのIOPS性能を見ます。
ランダムリード100%、ブロックサイズ4KBで、スレッド数(スレッドあたりのIOデプス1)を変えてそれぞれ2分間I/Oを出し続けるテストをしています。
IOPSとLatency (us)の結果がそれぞれグラフ化され、IOPSの値であれば大きいほど高性能、Latencyの値であれば小さいほど高性能と言えます。
- Sustained 4K Random Write
ランダムライトのIOPS性能を見ます。
ランダムライト100%、ブロックサイズ4KBで、スレッド数(スレッドあたりのIOデプス1)を変えてそれぞれ2分間I/Oを出し続けるテストをしています。
IOPSとLatency (us)の結果がそれぞれグラフ化され、IOPSの値であれば大きいほど高性能、Latencyの値であれば小さいほど高性能と言えます。
- Sustained Random Reads, QD=256
ランダムリードの転送性能を見ます。
ランダムリード100%、16スレッド(スレッドあたりのIOデプス16)、ブロックサイズを変えてそれぞれ2分間I/Oを出し続けるテストをしています。
グラフのBandwidth (MB/s)の値が大きいほど高性能と言えます。
- Sustained Sequential Reads
シーケンシャルリードの転送性能を見ます。
シーケンシャルリード100%、1スレッド(スレッドあたりのIOデプス256)、ブロックサイズを変えてそれぞれ2分間I/Oを出し続けるテストをしています。
グラフのBandwidth (MB/s)の値が大きいほど高性能と言えます。
- Sustained Random Writes, QD=256
ランダムライトの転送性能を見ます。
ランダムライト100%、16スレッド(スレッドあたりのIOデプス16)、ブロックサイズを変えてそれぞれ2分間I/Oを出し続けるテストをしています。
グラフのBandwidth (MB/s)の値が大きいほど高性能と言えます。
- Sustained Sequential Writes, QD=1
シーケンシャルライトの転送性能を見ます。
シーケンシャルライト100%、1スレッド(スレッドあたりのIOデプス1)、ブロックサイズを変えてそれぞれ2分間I/Oを出し続けるテストをしています。
グラフのBandwidth (MB/s)の値が大きいほど高性能と言えます。
例えば、データベースの利用を想定しているなら、
Sustained Random 4K Mixed
Sustained 4K Random Read
Sustained 4K Random Write
あたりで、そのときの環境がリード多めなのかライト多めなのかいずれかを選び、
接続元のサーバーやアプリケーションの数に応じてQueue Depthの値を選びます。
IDCFクラウド上でベンチマーク
最後に、IDCFクラウドで構築したCentOS7上で、ezFIOを実行してみました。
各テストは2分間実行した値ですが、念のため3回実行して大差ないことを確認しています。
検証環境は以下の仮想マシンタイプを用いて構築しました。
HighIO.3XL128
HighIO.5XL128
HighIO.5XL128.G2
ベアメタルサーバー高速IO1000
結果の詳細についてはIDCFクラウドのFAQにて近日公開予定です。(ここでは大人の事情でODS形式でなくPDF形式になってます)
なお、上記結果は導入時期によってハードウェアの世代が変わる可能性があるため、結果を保証するものではありません。参考情報としてご利用ください。
また、結果はあくまでベンチマークでの結果になりますので、サービス利用前に実アプリケーションにて実際の性能を計測されサイジング等の指標にすることを推奨します。
まとめ
SSD等のフラッシュデバイスのI/OベンチマークツールとしてezFIOを紹介しました。
良い点としては、
・さまざまなIOのテストを1発でテストしてくれる
・自動でグラフにまとめてくれる
・SSDやシンプロ用にプリコンディショニングまでしてくれる
一方悪い点としては、
・テストに時間がかかる
・テストデバイスのデータは全部消えるので使えるタイミングが限られる
があります。
NVMeの新製品の性能比較など、私も実際に使っていますので参考にどうぞ。
IDCFクラウドでは、これからも高速なI/O環境を提供していきますのでご期待ください。