NETWORK ENGINEER BLOG

Tips and Reviews for Engineers

NetApp ディスクボトルネックの対処方法について

はじめに

一般的に、HDD においては、フォーマットした状態に書き込みしていく場合、シーケンシャルな書き込みが行われますが、消去作業が繰り返されるうちに、領域が分断され、ランダムアクセスせざるを得ない状態となります。また、ヘッドを物理的に様々に移動する必要が多発するランダム I/O は、シーケンシャル I/O より性能が劣る傾向があります。*1

  • ランダムアクセスとは
    • 非連続のファイルデータの配置情報をインデックスから割出し、直接アクセスする方法

  • シーケンシャルアクセスとは
    • データを先頭から順番に記録し、読み出す場合も、先頭から順番に読み出していく方法

ランダムアクセスは、一般的にストレージに対して大きな負荷となりますが、NetApp は独自技術により、ランダム I/O をシーケンシャル I/O に変換します。具体的には、一端 NVRAM 上にデータを溜めておき、一定の間隔(デフォルト10秒)で、一気に RAID グループにストライプ書き込みを行います。そのため、ディスク上から読み込む無駄な I/O を削減する事ができ、一般的なストレージより高速な書き込みが可能となっています。

ディスクボトルネックの原因
  • ディスクの処理性能限界
    • クライアントからのディスク書き込み要求に対して、書き込める処理能力が追い付いていない状態。この場合、Back-to-Back CP が発生し、システム全体の基本性能が低下する可能性があります。具体的には、NetApp の場合、NVRAM にデータが入った時点でクライアント側へ書き込み応答をしますが、ディスクボトルネックにより、NVRAM が解放されず、ディスクボトルネックが発生していないディスク上へのアクセス要求についても待たされます。

  • 空き領域の断片化
    • ディスクに対して書き込みと削除が繰り返された結果、連続した空き領域が少なくなった状態。NVRAM からディスクへのランダムアクセスが発生し、ストレージの負荷が増加します。

  • ミスアライメント
    • WAFL*2のブロックサイズは、4KB ですが、クライアントからの要求 I/O サイズが 4KB に満たない場合。この場合、Read I/O については、ストレージから2ブロック読み出す必要がある事から2倍、Write I/O については該当ブロックを(2ブロック)を読みだした後、これをマージして、2ブロックへ部分書き込み(Partial Write)するため、4倍の負荷がかかります。
ボトルネックの確認方法
  • ディスクの性能不足
    • IOPS の実測値を、Perfstat 等で確認し、ディスクの性能を超過していないか確認します。ディスク性能については こちら が参考になります。ランダムアクセス前提の一例として、SAS:175 IOPS(ディスク一本あたり)とあります。これに、ディスクの本数を掛けた値がシステムで処理可能な IOPS になります。

  • 空き領域の断片化状態
    • 下記のコマンドでを確認可能です。10段階評価で、10が最も断片化が進行している状態になります。
> reallocate measure -o /vol/vol1
Reallocation scan will be started on '/vol/vol1'.
Monitor the system log for results.
> [netapp:wafl.scan.start:info]: Starting WAFL layout measurement on volume vol1.
  [netapp:wafl.reallocate.check.value:info]: Allocation measurement check on '/vol/vol1' is 1.
  • Partial Write の確認
    • perfstat の "wp.partial_write" で発生回数を確認する事が可能です。また、wafl_susp -r の "WAFL_WRITE" の Normal file の Read 回数が、All messages を占める割合で判断します。
*> wafl_susp -r
Blocks read per message type:
----------------------------
All messages:
         normal file:           283            46             4             0
<...snip...>         
WAFL_WRITE:
         normal file:           275            38             0             0
ディスクボトルネックの対策
  • ディスクの増設
    • ディスクを増設し I/O を十分に確保する事で Back-to-Back CP 発生に至るまでの負荷限界が高くなり、システム全体の基本性能が向上します。

  • リアロケート(デフラグ)処理の実施
    • 断片化が進行しているボリュームに対して、リアロケートを実施する事で新規のディスクに対しての負荷を分散します。
> reallocate start /vol/vol2
Reallocation scan will be started on '/vol/vol2'.
Monitor the system log for results.
> [netapp:wafl.scan.start:info]: Starting WAFL layout measurement on volume vol2.

> reallocate status -v
Reallocation scans are on
/vol/vol2:
        State: Checking: public inode 9474 of 32781, block 0
        Flags: whole_vol,maybe_realloc,repeat
    Threshold: 4
     Schedule: n/a
     Interval: 1 day
 Optimization: n/a
  • ブロックのズレを解消
    • 下記、パーティション開始オフセットサイズの確認方法の一例になります。
      • ESX 上から NetApp が提供する MBRtools を使って確認(scan コマンド)
      • vCenter 上から NetApp が提供する VSC を使って確認(Optimization and Migration 機能から scan)
      • 仮想マシン上の Windows OS から msinfo32.exe を実行(C:\ の開始オフセットサイズを確認)

*1:SSD ではその差がないと言われています

*2:NetApp のファイルシステム