NetApp Tech OnTap
NetApp Tech OnTap
   
【検証結果から理解するネットアップのフラッシュ技術】
第20回:オール フラッシュ製品POCのススメ
シェアする NetAppオフィシャルFacebook

いきなりAppendix

本連載で取り扱ってきたネットアップのオール フラッシュ製品、EFシリーズとAll Flash FASに関するインタビュー記事が公開されたので、ここでご紹介します。

はじめに~オール フラッシュ製品のPOCについて~

オール フラッシュ製品の普及が進む近年、自身でPOCをするのはもちろん、お客様やパートナー様のPOCを支援させてもらう機会が、より増えてきました。オール フラッシュ製品は、従来のHDDベースの製品とは異なり、それぞれ特有の傾向があります。そのため、効果的なPOCのやり方も、従来通りのHDDベースの考え方に対して、フラッシュならではの考え方を加える必要があります。そこで今回は、オール フラッシュ製品のPOCをする際、できるだけ 「効果的なデータ」 を、できるだけ 「簡単」 に取得しよう!を目的とした内容を書きたいと思います。

なお、本内容の位置付けは 「基礎ベンチマーク」 のデータを効果的かつ簡単に取得することを目的としています。本来、実環境のワークロードに限りなく近いPOCを実現するのが理想ですが、それが困難な場合でも、可能な限り実ワークロードに近い負荷をベンチマーク ツールで生成しましょう。

POCツールの検討

本内容では、ベンチマーク ツールとして 「vdbench」 をオススメしたいと思います。オール フラッシュ製品のPOCを実施する上で、vdbenchをオススメする理由は以下の通りです。

  1. vdbenchから発行するI/Oの重複排除率、圧縮率を調整できる
  2. 複数ホスト(サーバ)から同時に負荷をかける設定が簡単
  3. 繰り返しのテストも設定が簡単
  4. Oracle Technology Network(OTN)に登録するだけで、誰でもダウンロードできる
  5. 対応OSも豊富(Linux、Windows、etc)

1. については、ホストからストレージにI/Oが届いた時点でデータを重複排除、圧縮する(インライン重複排除、インライン圧縮)機能を搭載したオール フラッシュ製品では、重複排除率、圧縮率の違いによる性能への影響を確認することが重要です。一般的にベンチマーク ツールからのI/Oは、重複排除率が極めて高い傾向があります。そのため、仮にインライン処理にオーバーヘッドがあった場合、重複排除率が高いベンチマーク ツールで取得した性能値と、重複排除率が小~中となる実環境での性能差が大きく異なる恐れがあります。

2. については、オール フラッシュ製品は性能(IOPS)が高過ぎて、1台のホストでは最大性能を引き出せない可能性があります。また、CPUスペックは十分でも、ネットワーク(イーサネットまたはFC)帯域幅の懸念があります。例えば、ネットアップEF560の12GB/secという高い帯域幅を生かすためには、ホスト側でそれ以上の帯域幅を持つことが必要です。1台のホストで12GB/sec以上の帯域幅を確保するより、CPUスペックは劣っても、複数ホストで12GB/sec以上の帯域幅を確保するほうが容易なケースが多いです。

ベンチマークの結果がカタログ スペックに全く届かない場合、同時に実行するホストの数を増加させることが切り分けの1つになります。

3. については、vdbenchでは特別なスクリプトを書くことなく、設定ファイルの記述だけで繰り返しのテストが可能です。

vdbench の設定手順と動作確認

vdbenchのバイナリとユーザ ガイドは、以下のURLからダウンロードできます。

記事を執筆している時点(2015年5月)での最新バージョンは5.04.03でした。そのため、本内容ではバージョン5.04.03をベースにご紹介します。OSはLinux環境で動作を確認しました。

  1. vdbench をインストール
    • ダウンロードしたzipファイルをお好きなディレクトリに展開するだけ
    • 本環境では "/root" 直下にvdbench を展開
  2. # unzip vdbench501.zip
  3. vdbench の動作確認
    • "-t" オプションを指定することで動作確認が可能
    • "-t" オプションを指定した場合、/tmp に I/O を発生させる
    • 結果は "vdbench/output" に残される
  4. # ./vdbench -t
  5. 正常に動作しているか確認
    • 本環境での "./vdbench -t" 実行結果
  6. # ./vdbench –t
    Vdbench distribution: vdbench50402
    For documentation, see 'vdbench.pdf'.

    15:28:56.142 input argument scanned: '-f/tmp/parmfile'
    15:28:56.235 Starting slave: /root/vdbench/vdbench SlaveJvm -m localhost -n localhost-10-150513-15.28.56.085 -l localhost-0 -p 5570
    15:28:56.632 All slaves are now connected
    15:28:58.002 Starting RD=rd1; I/O rate: 100; elapsed=5; For loops: None

    5  13,  2015   interval       i/o   MB/sec   bytes      read
    resp          read   write   resp   resp   queue   cpu%   cpu%
                     
            rate   1024**2   i/o          pct
    time          resp   resp   max   stddev   depth  sys+u   sys
                     
    15:28:59.099   1   52.00   0.05   1024 44.23
    2.985      3.418   2.642   6.950   2.159   0.2   2.3   0.3
                     
    15:29:00.054   2   101.00   0.10   1024 56.44
    2.872      3.021   2.679   9.743   2.616   0.3   1.1   0.3
                     
    15:29:01.057   3   95.00   0.09   1024 48.42
    3.019      2.709   3.310   10.378   2.614   0.3   0.4   0.1
                     
    15:29:02.057   4   102.00   0.10   1024 52.94
    3.352      2.855   3.911   12.077   2.751   0.3   0.4   0.1
                     
    15:29:03.057   5   100.00   0.10   1024 58.00
    3.264      3.154   3.417   12.081   2.657   0.3   0.4   0.1
                     
    15:29:03.098   avg_2-5   99.50   0.10   1024 54.02
    3.129      2.949   3.340   12.081   2.658   0.3   0.6   0.1
                     
    15:29:03.892 Vdbench execution completed successfully. Output directory: /root/vdbench/output
    端末に、このような出力がされれば、まずは正常に動作していると言えます。

vdbench設定ファイルの作成

vdbenchは、"-f" オプションで 「設定ファイル」 を指定することで、複数ホストから同時に負荷をかけることや、繰り返しのテストを簡単に実現できます。まずは、1台のホストからシンプルなベンチマークの設定をご紹介します。

  1. 設定ファイル用のディレクトリ(任意)と設定ファイルを作成
    本環境では、"vdbench/conf" 直下に設定ファイル(EF.conf)を配置しました。
    # mkdir conf
    # touch conf/EF.conf
    次に、ベンチマーク環境に合わせて設定ファイルを編集します。
  2. 設定ファイルを編集
    • 1つの設定ファイル内に、以下の通り4つの定義(2-1. ~ 2-4.)を設定
    • 先頭に "*" を記述することで、コメントアウト
    2-1. Host Definition(hd)
    • vdbenchを実行する(負荷を生成する)ホストを定義
    • 各記述の内容
      • hd:任意の名前を定義
      • system:負荷を生成するホストのIPアドレス、またはhostnameを指定
      • user:vdbenchを実行するユーザ名を指定
      • shell:複数ホストから負荷を生成する場合の、ホスト間の通信方法
        ※ 「shell=SSH」 と指定した場合、ホスト間はパスワードなしでSSH通信できる設定をする必要があります。
      • jvms:使用するJVMスレーブ数
    * *******************
    * Host Definition
    * *******************
    hd=hd1,system=srv1,user=root,shell=ssh,jvms=16
    hd=hd2,system=srv2,user=root,shell=ssh,jvms=16
    hd=hd3,system=srv3,user=root,shell=ssh,jvms=16
    hd=hd4,system=srv4,user=root,shell=ssh,jvms=16
    hd=hd5,system=srv5,user=root,shell=ssh,jvms=16
    本環境では 「POCツールの検討」 でご紹介した通り、vdbenchを実行するホスト側がボトルネックにならないように、サーバを5台用意しました。“jvms” の値も1つのJVMスレーブではオールフラッシュ製品の極めて高い性能(IOPS)を引き出せない可能性があるので、本環境ではCPUコア数に合わせて “jvms=16” としました。この値は、ホストのCPUスペックに依存しますが、一般的には “jvms=16” あれば十分だと思います。

    2-2. Storage Definition(sd)
    • 負荷をかける対象のLUNまたはファイルを定義
    • 各記述の内容
      • sd:任意の名前を定義
      • lun:負荷をかける対象のLUNまたはファイルをフルパスで指定
      • size:LUNまたはファイルのサイズ全体のうち、vdbenchがアクセスする範囲
        ※ LUNサイズ、ファイル サイズより小さい値を指定
      • openflags:o_directを指定
    HDDベースの製品と同様に、オール フラッシュ製品もベンチマークの 「アクセス範囲」 の考え方(Working Set Sizeと言います)は非常に重要です。2TBのLUNを作成したとしても、ベンチマークのアクセス範囲が小さい場合、ストレージ コントローラの読み込みキャッシュ(DRAM)のヒット率が高く、実環境での使用とはかけ離れたベンチマーク結果が出るケースがあります。そのため、Working Set Sizeは十分大きな値を設定しましょう。オール フラッシュ製品に搭載されているDRAMのサイズを考慮すると、Working Set Sizeは1TBあれば十分です。

    vdbenchでWorking Set Sizeを調整するのは "size" の値です。本環境では、2TB LUNのうち250GBの範囲をアクセス(size=250g)する設定で、4つのLUNを定義しました。次のWorkload Definition(wd)の定義で、全て(4つ)のLUNを指定しているので、vdbenchによるWorking Set Sizeは1TB(250GB x 4)です。
    * ***********************
    * Storage Definition
    * ***********************
    sd=sd1,lun=/dev/mapper/360080e500029b3c800002f25553218d7,size=250g,openflags=o_direct
    sd=sd2,lun=/dev/mapper/360080e500029b3c800002f26553218e8,size=250g,openflags=o_direct
    sd=sd3,lun=/dev/mapper/360080e500029b3c8000030275536959d,size=250g,openflags=o_direct
    sd=sd4,lun=/dev/mapper/360080e500029b3c800003028553695b4,size=250g,openflags=o_direct
    2-3. Workload Definition(wd)
    • 生成するI/Oワークロードを定義
    • 各記述の内容
      • wd:任意の名前を定義
      • sd:負荷をかける対象のStorage Definition(sd)を指定
        前の項目(sd)で定義した内容を記述
      • rdpct:readの割合(100:read only、0:write only)
      • seekpct:randomおよびsequential性(100:random、0:sequential)
    ※ 本環境では "seekpct=0" が正常に動作しなかったため、"0" ではなく "0.1" とすることで、sequential I/Oを定義しました。

    本環境では "sd=sd*" と指定することで、各workload Definition(wd)のアクセス対象を、前項目(sd)で定義した全て(4つ)のLUNを指定しています。また、本環境では、以下の4つのI/Oワークロードを定義しました。
    1. wd1:random read 100%
    2. wd2:random write 100%
    3. wd3:sequential read 100%
    4. wd4:sequential write 100%
    * ************************
    * Workload Definition
    * ************************
    wd=wd1,sd=sd*,rdpct=100,seekpct=100
    wd=wd2,sd=sd*,rdpct=0,seekpct=100
    wd=wd3,sd=sd*,rdpct=100,seekpct=0.1
    wd=wd4,sd=sd*,rdpct=0,seekpct=0.1
    2-4. Run Definition(rd)
    スレッド数、I/Oサイズを変化させる等、繰り返しのテストはRun Definition(rd)を調整します。
    • vdbenchの実行に関する定義
    • 各記述の内容
      • rd:任意の名前を定義
      • wd:実行するWorkload Definition(wd)を指定
      • iorate:maxを指定
      • elapsed:1回あたりの実行時間を指定(単位:秒)
      • interval:ログを取得する間隔を指定(単位:秒)
      • xfersize:I/Oサイズ
      • forthreads:指定したスレッド数の分だけ繰り返しテストを実行 (100-500,100) と指定した場合、100スレッドから500スレッドまで100間隔で繰り返し実行(100, 200, 300, …, 500スレッド)
    * ************************
    * Run Definition
    * ************************
    rd=rd1,wd=wd1,iorate=max,elapsed=60,interval=1,xfersize=4k,forthreads=(100-500,100)
    本環境では “wd=wd1” を指定しています。Workload Definition(wd)で定義した通り、wd1はRandom Read 100% のワークロードであるため、rd1は “4KB Random Read 100%” のワークロードになります。また、変数の先頭にforを加えた変数を使用することで、指定した範囲内でテストが繰り返されます。本環境のように、”forthreads=(100-500,100)” と指定した場合、100から500まで100スレッド間隔で繰り返し実行します。

    本章の通り、4つの定義(2-1. ~ 2-4.)を設定ファイルに記述すると、本環境では以下の内容になります。
    * *******************
    * Host Definition
    * *******************
    hd=hd1,system=srv1,user=root,shell=ssh,jvms=16
    hd=hd2,system=srv2,user=root,shell=ssh,jvms=16
    hd=hd3,system=srv3,user=root,shell=ssh,jvms=16
    hd=hd4,system=srv4,user=root,shell=ssh,jvms=16
    hd=hd5,system=srv5,user=root,shell=ssh,jvms=16

    * ***********************
    * Storage Definition
    * ***********************
    sd=sd1,lun=/dev/mapper/360080e500029b3c800002f25553218d7,size=250g,openflags=o_direct
    sd=sd2,lun=/dev/mapper/360080e500029b3c800002f26553218e8,size=250g,openflags=o_direct
    sd=sd3,lun=/dev/mapper/360080e500029b3c8000030275536959d,size=250g,openflags=o_direct
    sd=sd4,lun=/dev/mapper/360080e500029b3c800003028553695b4,size=250g,openflags=o_direct

    * ************************
    * Workload Definition
    * ************************
    wd=wd1,sd=sd*,rdpct=100,seekpct=100
    wd=wd2,sd=sd*,rdpct=0,seekpct=100
    wd=wd3,sd=sd*,rdpct=100,seekpct=0.1
    wd=wd4,sd=sd*,rdpct=0,seekpct=0.1

    * ************************
    * Run Definition
    * ************************
    rd=rd1,wd=wd1,iorate=max,elapsed=60,interval=1,xfersize=4k,forthreads=(100-500,100)

本測定をはじめる前に、POC環境の性能を確認

設定ファイルの編集が完了したら、いよいよvdbenchによる本測定を開始したいところですが、用意したPOC環境のサーバ、ネットワークが、オールフラッシュ製品の限界性能を引き出せる環境かどうか確認しましょう。

前章で作成した設定ファイル(EF.conf)を指定して実行した場合、4KB Random Read 100% のワークロードが、100、200、300、400、500スレッドで計5回実行されます。「elapsed=60」 と指定している通り、各ワークロードは1分間実行されるので、5回分で5分間実行されます。

  1. 設定ファイル(EF.conf)を指定してvdbenchを実行
    • "-f" オプションで設定ファイルを指定
    • "-o" オプションで結果(ログ)を出力するディレクトリを指定
    # ./vdbench -f conf/EF.conf -o log/TechONTAP/EF560_4KB_RR_Threads_100_500
  2. ベンチマーク結果を確認
  3. "-o" オプションで指定したディレクトリには幾つかのファイルがありますが、主に確認するべきは、"summary.html / flatfile.html" と "totals.html" ファイルです。"summary.html / flatfile.html" は設定ファイル内の "interval" で指定した間隔で結果が出力されます。一方、"totals.html" は "elapsed" で指定した範囲内の平均値が出力されます。次の出力結果は、"totals.html" ファイルの内容です。
    Run totals

    Link to Run Definitions:     rd1 For loops: xfersize=4k threads=100
    threads=200
    threads=300
    threads=400

    08:26:09.008 Starting RD=rd1; I/O rate: Uncontrolled MAX; elapsed=60; For loops: xfersize=4k threads=100

    5  20,  2015   interval       i/o   MB/sec   read      resp
    read          write   resp   resp   queue   cpu%   cpu%
            rate   1024**2   i/o          pct          time
    resp          resp   max   stddev   depth   sys+u   sys

    08:27:09.112    avg_2-60    558627.66    2182.14        4096 100.00        0.714
    0.714        0.000    196.611        0.723    398.7    16.9    13.7

    08:27:10.004 Starting RD=rd1; I/O rate: Uncontrolled MAX; elapsed=60; For loops: xfersize=4k threads=200
    08:28:10.068     avg_2-60    638711.22     2494.97         4096 100.00        1.250
    1.250         0.000    240.489         0.941     798.5     20.0     16.5

    08:28:11.003 Starting RD=rd1; I/O rate: Uncontrolled MAX; elapsed=60; For loops: xfersize=4k threads=300
    08:29:11.064     avg_2-60    655968.63     2562.38         4096 100.00        1.827
    1.827         0.000    19.182         0.628     1198.4     20.3     17.0

    08:29:12.002 Starting RD=rd1; I/O rate: Uncontrolled MAX; elapsed=60; For loops: xfersize=4k threads=400
    08:30:12.065     avg_2-60    655948.78     2562.30         4096 100.00        2.437
    2.437         0.000    20.814         1.183     1598.4     20.3     17.0

    08:30:13.002 Starting RD=rd1; I/O rate: Uncontrolled MAX; elapsed=60; For loops: xfersize=4k threads=500
    08:31:13.067     avg_2-60    655956.88     2562.33         4096 100.00        3.046
    3.046         0.000    22.117         1.691     1998.4     20.4     17.0
    i/o rate(IOPS)は300スレッドまで向上し、その時点で65万IOPSです。このIOPS値は、公開されているネットアップEF560のスペックと同じ値であり、POC環境がオールフラッシュ製品(ネットアップEF560)の限界性能を引き出せる環境であることを確認できました。

    また、300スレッドで65万IOPSに達して以降、IOPSは向上していません。これにより、本測定を実行する場合は、設定ファイルを最大300スレッドまで指定すれば良いことが分かりました。
  4. 2. のベンチマーク結果を考慮して、設定ファイルを編集
    • 本環境では "forthreads=(10-300,10)" と編集
    rd=rd1,wd=wd1,iorate=max,elapsed=60,interval=1,xfersize=4k,forthreads=(10-300,10)
    この編集により、4KB Random Read 100% が10、20、…、300スレッドで30回実行される設定になりました。1回あたり1分、30回実行されるため、30分かかります。ランチに行く前に流したりするには、良い実行時間ですね。
  5. 再びベンチマーク結果を確認
  6. 次のグラフは、"totals.html" ファイルの内容をグラフ化したものです。

    再びベンチマーク結果を確認

事前のベンチマークで最大スレッド数を把握しておくことで、僅か30分でここまで詳細なグラフを描くことができました。POCで重要なポイントは、実システムにおけるワークロードとPOCで設定するワークロードを出来るだけ同じものにすることです。とは言え、近年のITインフラにおけるワークロードは日々変化しますし、新規の構築であれば、ワークロードを正確に把握することは困難かもしれません。そのため、限られた時間でPOCをする中、効率的にベンチマークを実行し、出来るだけ細かい粒度で測定結果を残しておくことが 「POC結果と全然違うじゃないか!」 といった、かい離を未然に防ぐことができると考えています。

いよいよ、ベンチマーク本測定を開始!

今回は主に、vdbenchの設定ファイルについてご紹介しました。実行においては、あくまで 「POC環境がオールフラッシュ製品の限界性能を引き出せるか」 を事前に確認する意味でお伝えしました。いよいよ次回は、オールフラッシュ製品をPOCする上で、どういったワークロードを、どういった設定ファイルでベンチマークすれば良いか、についてご紹介したいと思います。

岩本 知博 岩本 知博(いわもと ともひろ)
ネットアップ株式会社
システム技術本部 – コンサルティングSE部 - コンサルティングSE - Flashtronauts

会津大学大学院 コンピュータ理工学研究科卒、外資系データベース メーカを経て2012年パートナーSEとして入社。入社以来、パートナー支援とフラッシュ ソリューションおよびデータベース ソリューションを中心に活動。

【検証結果から理解するネットアップのフラッシュ技術】
  arrow バックナンバー

関連情報
関連情報
【検証結果から理解するネットアップのフラッシュ技術】
第1回:フラッシュ技術をリードするネットアップの
ポートフォリオとその棲み分け


第2回:バーチャル ストレージ ティアとオール
フラッシュ アレイでオーバーサイジングを解決


第3回:バーチャル ストレージ ティアの強み
~ Flash Cache と Flash Pool の検証結果~


第4回:Flash CacheとFlash Poolの特徴(詳細編)
~キャッシュ ヒット率とキャッシュの永続性に
ご注意を!!~


第5回: Flash Poolの特徴(応用編)
~マルチ ワークロード対応の最強の
ディスク プールを構成する~


第6回:NetApp Flash PoolとOracle Database Smart Flash Cache の検証結果から理解する サーバ側キャッシングソリューションの特徴

第7回:NetApp Flash PoolとOracle Database Smart Flash Cacheの組み合わせ
~DB統合の密度を極限まで高める~

第8回:検証結果から導かれるFlash Cache、Flash Pool、Database Smart Flash Cacheの特徴

第9回:フラッシュ デバイスの特徴(基本編)
~ フラッシュ デバイス構造から理解する
書き込み量の増幅を改善する仕組み ~


第10回: ネットアップのオール フラッシュ アレイ
「EF550 」ならではの強み ~ Why EF550 編 ~


第11回: NetApp EF550の高可用性を実現する機能「Dynamic Disk Pool」
~ シンプルなRAID構成でドライブ障害時の性能維持とリビルド処理の高速化を実現 ~


第12回:Oracle Database環境でのEF550
の有効性
~ OLTP処理性能の向上と、バッチ処理の高速化を両立するEF550(OLTP編) ~


第13回: Oracle Database環境でのEF550の有効性
~ OLTP処理性能の向上と、バッチ処理の高速化を
両立するEF550(バッチ処理編)~


第14回:【検証結果から理解するネットアップのフラッシュ技術】
FASシリーズをオール フラッシュ構成にするとどうなる?
高性能と大容量を実現するAll-Flash FASの登場


第15回:
All-Flash FASの価格性能比と価格容量比を極める
~ All-Flash FAS8060検証結果 ~


第17回:
速報! Data ONTAP 8.3RC1検証結果 ~ 8.2.2から8.3RC1での性能向上 ~


【番外編】 第18回:
Data ONTAP 8.3でエントリーモデルが大幅に性能向上!
~ 8.2.2から8.3RC1での性能向上 ~


第19回:
Flash Poolの効果を最大限引き出す
~AWAによる最適なキャッシュ サイズの見積もり~

関連情報
 
Go further, faster TRUSTe
お問い合わせ   |   購入方法   |   フィードバック   |   採用情報  |   登録   |   プライバシーポリシー   |   © 2015 NetApp