RAM DiskのSoftPerfect RAM Disk, Passmark OSFMount, ImDisk Toolkitを試した

SSDとNVMeで大容量化・高速化された今の時代にRAM Diskは別に必要ないんだけど、メモリ128GBなマシンを組むと持てあますわけです。一時領域として使ってもよかろうということでRAM Diskを検討。

要約

  • SoftPerfect RAM Diskは ベンチマークの結果はよかったが、継続にはライセンス購入が必要
  • Passmark OSFMountもベンチマークの結果は良かったが、機能面に難あり。バッチファイルを書いて対処できそう
  • ImDisk Toolkitは前2つと比べると性能は良くなかった。機能は十分
  • WindowsにおいてはファイルシステムexFATがよさそう。1ファイルのサイズ制限がほぼ無いのと、ベンチマーク結果がNTFSよりも良かった
  • アロケーションユニットはなんでもよさそう

製品調査

なんか一覧がないかな、と思ったらWikipediaがあった。

en.wikipedia.org

ここからいくつか試そうと思う。

個人的にRAM Diskに求めてるのは以下。

  • 16GB以上作れる
  • ドライブレターの指定ができる
  • TEMPフォルダを作ってくれる(これは起動時に作るタスクを仕込むでもいいけど、一緒に作ってくれるほうが楽なので)

参考: Cドライブ

最近のNVMeなSSDを見ると少し遅いけど、十分早い。

SoftPerfect RAM Disk

www.softperfect.com

著名なやつ。フリーではなく30日の試用期間がある。それ以降は$29.00からのライセンスの購入が必要。

ベンチマークも良好。

単純で使用感もよく、金がかかる以外は文句ない。

Passmark OSFMount

ベンチマークを作ってるところが出している。ディスクイメージをマウントできるほか、RAMディスクも作成できる。

www.osforensics.com

ベンチマークも良好。

ただ、機能面では物足りない。

  • 再起動時に消える
  • TEMPフォルダを作ってくれない

せっかく性能が良くて無料で使えるのにもったいない。これでは困るので、フォーラムで何かないか調べると「コマンドラインオプションがある」という中の人の返答を見つけた。

ただ、コマンドラインオプションの使い方というのが見つからず、困っていたが、次の方がコマンドラインで処理するバッチファイルを書いてタスクスケジューラで実行する例を書いていたので、そっくりまねることにした。コメント欄を見たらサポートセンターみたいなことをやってて大変そう。

Dan Dar3: Mounting OSFMount RAM drive on boot

バッチファイルをどこかに置く必要があるが、今回はC:\osfmount-ramdisk.cmdに置くことにした。ファイルの置き場所はどこでもいいので、Cドライブ直下だとお行儀が悪いという方は読み替えてください。(個人的にはアクセスしやすい場所に置いておきたかっただけなので…)

ここのファイルの作成には管理者権限が必要。タスクスケジューラの登録でも管理者権限を使うので、管理者権限でコマンドプロンプトを開いておく。Win+Rでファイル名を指定して実行を表示し、cmdを入力し、Ctrl+Shiftを押しながら実行とすると管理者権限として実行できる。(スタートメニューからコマンドプロンプトを右クリック→管理者として実行、でもよい)

表示されたコマンドプロンプトnotepad "C:\osfmount-ramdisk.cmd" と入力し管理者権限でメモ帳を開く。

メモ帳を開けたら以下を記述して保存する。(パラメータは適当に書き換える)

@ECHO OFF
SET OSFMOUNT_HOME=%PROGRAMFILES%\OSFMount
SET RAMDISK_DRIVE=T:
SET RAMDISK_SIZE=16G
:: exfat,fat32,ntfs
SET RAMDISK_FS=exfat
SET RAMDISK_LABEL=RAM Disk

IF NOT EXIST "%RAMDISK_DRIVE%" (
  "%OSFMOUNT_HOME%\OSFMount.com" -a -t vm -s %RAMDISK_SIZE% -o format:%RAMDISK_FS%:"%RAMDISK_LABEL%" -m "%RAMDISK_DRIVE%"
  MKDIR "%RAMDISK_DRIVE%\TEMP"
)

動作確認する場合は、ダブルクリックするなりして実行すればよい。ドライブ作成時に管理者権限の確認が挟まるが作成されるはず。

タスクスケジューラに登録する。先ほど表示したコマンドプロンプトへ 以下を入力する

schtasks /create /tn "osfmount-ramdisk" /tr "C:\osfmount-ramdisk.cmd" /sc onlogon /ru SYSTEM

再起動すると作ってくれているはず。

ImDisk Toolkit

ImDisk Toolkit download | SourceForge.net

ltr-data.se

仮想ディスクをマウントするためのツールだが、RAMディスクも作成できる。

後述するが、ベンチマーク結果はSoftPerfectとPassmarkと比べると劣る。

インストール

RamDisk Configurationの画面

気になる設定があり、以下が性能に影響していた。

  • BasicのAllocate Dynamic Memory をオフにする(メモリ使用量を抑えられるがパフォーマンスが悪くなる)
  • AdvanceのUse AWE physical memory を有効にする

Allocate Dynamic Memoryは使用している分だけメモリを消費する。その代わり性能が悪いし、AWEを有効にすると性能はさらに悪化してしまう。

Allocate Dynamic Memoryをオフにするときっちり確保する動きをする。(なお、AWE を有効にするとプロセスモニタには出てこなくなる)

AWEはアドレスウィンドウ拡張機能のことらしい。

Allocate Dynamic Memory(ADM)とUse AWE physical memory(AWE)をそれぞれon/offにしてCrystal DiskMarkでベンチマークしてみた。

Image ADM AWE READ(1M) Write(1M) READ(4k) Write(4k) Read IOPS Write IOPS Read μs Write μs
on off 6204.77 4886.81 228.25 228.57 55724.85 55804.20 17.85 17.82
on on 5233.52 4327.17 94.82 95.59 23148.68 23337.89 43.10 42.75
off off 10445.76 14390.48 271.07 271.68 66179.44 66327.15 15.01 14.99
off on 13681/83 19483.33 540.45 507.39 131946.78 123875.49 7.50 7.99

Allocate Dynamic MemoryをoffにしてUse AWE physical memoryをonにすると性能が良くなったことがわかる。逆にAllocate Dynamic MemoryとUse AWE physical memoryをどちらもonにすると最も悪化した。ただ、一番いい結果でもPassmarkやSoftPerfectの性能と比べるとその半分程度なので、ちょっと残念感がある。機能面はそろっているんですが…

ERAM

名前に見覚えがあるなぁ、とおもったら過去に使ったことがあった。確かもともと4GBの制限があったが、それを改造するパッチが配布されていたので当てて使ったのだったと思う。EeePCとかのころだったかな?このころの自分、言葉足らず過ぎる。でも今もあんまり変わらない気もする。

元々えらー15さんが作ったもので、2chとかでスレが立っていてパッチが配られていたりしたような気がする。あの頃は緩かったなぁ。

で、それを海外の方がフォークしてgithubにあげているようだ。

github.com

使ってみたがうまくいかなかった。残念。

C:¥ERAM¥eram.cpl を管理者として実行するとGUIが出てくるので設定っぽいことができて、OKを推すと再起動が促されるが指定したドライブレターを持つドライブが作られず何も起きない、という感じだった。あと4GB以上のdisk sizeを指定できなかった(OKを押したときに切り詰められた)

そもそも install.bat で devcon を使っているが、これが失敗しているようだ。

RAMディスクに最適なファイルシステムアロケーションユニット

ファイルシステム

Windowsにおいては NTFS, FAT32, exFAT が選択できる。

FAT32は1ファイル4GBという上限があるので、メモリが潤沢にある環境においてはこの制限に引っかかる可能性がある。

ファイルシステムNTFSよりexFAT もしくは FAT32のほうが4Kランダムアクセス性能が良い傾向にある。

ということで、exFATでよいのではないか、という気持ちがある。

Image FS AUS READ(1M) Write(1M) READ(4k) Write(4k) Read IOPS Write IOPS Read μs Write μs
NTFS 16k 16287.50 21344.63 1521.14 1278.49 371372.56 312130.86 2.63 3.14
FAT32 16k 16342.43 21407.68 1808.48 1416.75 441522.71 345885.25 2.20 2.83
exFAT 不明 16423.82 21275.99 1788.11 1405.30 436549.07 343091.06 2.22 2.85

アロケーションユニットサイズ(AUS)

FAT32の8kと16kと64kでは差は全くでなかった。

Image FS AUS READ(1M) Write(1M) READ(4k) Write(4k) Read IOPS Write IOPS Read μs Write μs
FAT32 8k 16498.93 21350.03 1808.03 1416.30 441413.33 345777.34 2.20 2.83
FAT32 16k 16342.43 21407.68 1808.48 1416.75 441522.71 345885.25 2.20 2.83
FAT32 64k 16284.05 20864.89 1814.31 1431.45 442946.53 349475.59 2.19 2.79

SoftPerfectやOSFMountでマウントされたドライブはexFATのフォーマットがWindowsの機能ではできないので面倒だから測らなかったが、多分一緒の傾向だと思う。ということで、exFATでよいのではないか。

蛇足: Windowsのターボブーストとストレージのベンチマーク

ベンチマーク中に様子を眺めていると、ベンチマークソフトが使っている1コアが100%に張り付いていた。ストレージの読み書きの待ちとかあるはずなのでそこまでCPU負荷は無いのではと思っていたがそうでもないらしい。

Windowsの電源設定で「プロセッサの電源管理 > 最大のプロセッサの状態」を99%にしておくと、ターボブーストがかかりにくくなる。(それでも4.3Ghzは出る。)

Windowsの電源オプション

普段は少しでも電気代を節約するためにこの設定をもっと下げていたのだが、今回のベンチマーク時はここが99%の設定だった。上記のベンチマークは全部同じ条件だし面倒なので再試験はしない。が、100%にした時のスコアはどれだけ伸びるのかは少し気になるので一発流してみた。

Image FS 電源 READ(1M) Write(1M) READ(4k) Write(4k) Read IOPS Write IOPS Read μs Write μs
exFAT 99% 16423.82 21275.99 1788.11 1405.30 436549.07 343091.06 2.22 2.85
exFAT 100% 17106.42 22023.18 2057.11 1617.67 502224.61 394939.45 1.93 2.48

こうしてみると、10%ぐらい性能が良くなっているように見える。性能が本当に大事なら電源設定を見直すべきですな。

ベンチマーク時は5.1Ghzぐらいまでブーストされるようになっていた。

ちなみにBIOSで70度以上にならないよう制限する設定もいれているのでまだ本気ではないのかもしれない。計測するって難しい。