2017年6月29日

ブロードバンドタワーで Scality RING を担当しているポールです。
今回の投稿は RING ネタではなく、検証絡みの小ネタになります。

RING を用いた検証では、機能検証だけでなく性能検証を行うこともあるのですが、多くの場合は、RING を動かすLinux でテストデータを用意します。理由は単純で、Linux で dd コマンドを用いれば簡単にゼロ埋めのテストデータを生成できて、それを FUSE もしくは NFS コネクタを利用してコピーすれば、簡単に RING 上にデータ格納できるからなのですが、時々、大人の事情で Windows を使ってテストデータを用意する必要がでてきます。

大人の事情なので、Linux でも似たようなテストはできますよ~、とはなかなか言えないのですね。そこで最初に困るのが、Windows 上でテストデータをどうやって作るのか、です。

Windows だと単純には dd が使えません。そこで似たような機能があったりしないかなと探してみると、Windows にもあるんですね。fsutil というコマンドが使えそうなことがわかりました。たとえば、1GB の C:\aaa.dat を次のコマンドで作れます。

fsutil file createnew C:\aaa.dat 1073741824

これで大量にテストデータを作ってみたのはよいのですが、、、次の問題がでてきました。なんと、、、

『大量のテストデータの生成に時間がかかりすぎる』
『大量のテストデータの読み込みに時間がかかりすぎる』

というものです。当たり前といえばそこまでなのですが、サーバ内蔵ディスクの本数が足りないのが原因でした。

このとき真っ先に頭をよぎったのは、テストデータの置き場用に SSD をかき集めて RAID0 にすればクリアできる?ということでした。しかし、こういうときに限ってマウンタが足りずサーバへ増設できませんでした。加えて、SSDを使ったとしても2-3本の RAID0 で 20Gbps は難しいのと、そんなデータ置き場の Windows を2台用意する必要があったので、更に2倍の本数はちょっと用意できそうにありませんでした。

これは手詰まりか!
・・・と思ったところに、ふと隣の席の某本部長が私にささやきました。

『ポールさん、それは RAM ドライブを使えばいいんじゃない?』

RAMドライブ、なんじゃそりゃ?
と思った次のタイミングに、チャットで URL が送られてきました。ImDisk というツールです。

http://www.ltr-data.se/opencode.html/#ImDisk

なるほど、これを使えば Windows の空きメモリを使って SSD よりも高速なドライブを用意できそうです(そりゃメモリですからね)。実際にインストールしてみると、コントロールパネルにアイコンが出てくるのですが、コマンドで作成するほうが簡単です。たとえば、80GB の Fドライブを次のコマンドで作成できます。

imdisk -a -o awe -s 80G -p "/fs:ntfs /q /y" -m F:

ヘルプを読めばわかるのですが、-o awe がポイントになります。イメージファイルを指定せずにこのオプションを使うと、メモリだけを利用したドライブが -s で指定したサイズで作成されます。このメリットは、imdisk -d コマンドでドライブを削除するとメモリが解放され、格納していたデータも消えて真っ新になることです。消えて困る重要なデータはもちろんこんなところに置けませんが、fsutil で作成した検証元データの置き場には最適です。検証パターンに応じてデータを作り直すのも高速で行えます。

せっかくなので、CrystalDiskMark で速度を計ってみました。シーケンシャルに関しては圧倒的な速度が出ています。メモリなので当たり前といえば当たり前なのですが、一方で 4K Q32T1 は思ったほど数字が伸びず、ほんとにメモリなのか?という気もするのですが、速度を求めていたのがシーケンシャルなので、よしとします。


(注意: ESXi6 上の Windows 2012 仮想マシンでの結果です)

最後に、検証用の元データ作成スクリプトとして、次のようなバッチスクリプトを作ってみました。内容自体はとても簡単なので、ご興味のあるかたはご自身で読み解いてみてください。

imdisk -a -o awe -s 80G -p "/fs:ntfs /q /y" -m F:
F:
for /l %%i in (0,1,0) do for /l %%j in (0,1,4) do mkdir F:\policy%%i\dir%%j
for /l %%i in (0,1,0) do for /l %%j in (0,1,4) do for /l %%k in (0,1,14) do fsutil file createnew F:\policy%%i\dir%%j\1g_0%%k.dat 1073741824

上記のループだと、1階層目が1ディレクトリ、2階層目が5ディレクトリ、2階層目のディレクトリにそれぞれ15個の1GB ファイルが生成され、Fドライブには合計 75GB のテストデータが格納されます。ループ回数をいじってから再作成すれば、ディレクトリ構造やファイル数を簡単に変えられます。

インターネット検索すれば容易に他のサイトでもヒットする情報かもしれませんが、上記が皆様の参考になれば幸いです。

本ブログの情報につきましては、自社の検証に基づいた結果からの情報提供であり、
品質保証を目的としたものではございません。

投稿者: ポール

ブロードバンドタワーで Scality RING を担当。ストレージ業界の知り合いからはポールと呼ばれているが、本人も由来はよくわからない。得意領域はデータベースとストレージ。