Windowsの記憶域階層な共有フォルダがプチフリする謎現象

Windows Storage Server 2016の記憶域階層から切り出したNTFSボリューム上に、CIFSで共有フォルダを作って別マシンからファイルを書き込むと、途中で処理が止まったようになり、当該フォルダを開くのですら超絶時間が掛かるようになる問題に遭遇中。なんとなく、SSD層が一杯になったタイミングで発生してるような気がするけど、有効な解決策は未だ見つけられず…。

記憶域階層は以下のような構成。

  • SSD層
    • Intel DC S3500 240GB×2 (RAID-0。記憶域に割り当ててるのは160GBほど)
  • HDD層
    • 8TB 7200RPM SATA×6(RAID-10。HDD×2のミラーリングが3セット。CMRなHDD)
  • 記憶域プール全体を1ドライブに割り当てNTFSでフォーマット

いずれもRAIDカードで仮想ドライブになってるので、記憶域からはSSDとHDDが1台ずつ見えてる感じ(ま、この構成自体がそもそも非推奨なんだけど。)

そこに1KB~4GBの96ファイル計25.2GBをコピーすると、最初は順調なのに途中でパタリと処理が止まる。タスクマネージャを見ると「記憶域階層管理」なるものが動いているので、おそらくSSDが一杯になってHDDへのデータ移動が行われているのだろう。

でもって、リソースモニタでディスクの状態を見てみると、処理対象のファイルの応答時間がなんと1000ミリ秒を超えているじゃーありませんか。キューもめっちゃ溜まってるし(順調に処理が行われてる時は1未満。多くても3~4ってとこ。)データ移動待ちにしては、流石にレイテンシ長すぎじゃないですかね…。

実際の操作感としては、SSDに一定の空きができるまでファイルI/Oがブロックされてるような感じ。MSの中の人によれば、SSD層が一杯になるとIOPSが劇的に下がる──といってもHDD層相当の性能は出るんだけど(記事中のTest Case 1: Write to Used Storage Spaceらへん)、処理が完全に止まってしまうような感じにはならなさそう。

ネットに上がってる記憶域階層の使用例は殆どがHyper-Vがらみなので、ファイルサーバ向けに記憶域階層を使うってのがそもそもの間違いなのかしら?そうは言っても、使用頻度の高いデータをSSD層において高速化するって使い方はファイルサーバでもふつーにありそうな感じがするんだけどなぁ…。

Sambaだと大量のファイルの扱いに難あり、ってところからCIFSの純正実装なら安心だろうってことでWindows Serverを選択したのに、トホホですよ本当。僕たちの調査の旅はこれからだ…!

(2018-08-16 追記)

何の役にも立たないと(僕の中で)名高いMSKKのフォーラムに同様の報告があった→記憶域スペースで階層化構築時における急激なパフォーマンス低下について。いつものごとく箸にも棒にもかからない回答で乾いた笑いしか出ないわけですが。

記憶域階層のライトバックキャッシュの容量を増やせば回避できないでしょうか。

書き込むデータの量に対してライトバックキャッシュの量が十分にあれば、プチフリを起さずアイドル時にSSDからHDDへのデータの待避が行われると思われると思いますがいかがでしょうか。

1 |
ゼータ
| 2020-08-21 11:20 | reply

@ゼータ: 記憶域階層の書き込みはSSD層の空き領域に対して優先的に行われ、ライトバックキャッシュはSSD層が満杯になった時のランダムライト用らしいです。WBCが一杯になるとWBCのHDD層へのフラッシュが行われるようなので、それがプチフリの原因となっているのかもしれません。

おっしゃる通りライトバックキャッシュを大きめに確保しておくことで、キャッシュ切れによるプチフリ回避には効果がありそうに思いますが、シーケンシャルライトや読み込み用のキャッシュが恒久的に減ってしまうのが悩ましいところです。結局のところ、書き込み量に対してSSD層自体の量を十分に用意する方が建設的かな?という気がします。

本記事とは別でSSD層に640GB割り当ててるマシンがあるのですが、余裕があるためか、こちらはプチフリしたことはありません。

2 |
Decomo
| 2020-08-25 00:51 | reply



  • blog/2018/2018-07-27.txt
  • 最終更新: 2020-12-03 16:45
  • by Decomo