SSDとNVMeで大容量化・高速化された今の時代にRAM Diskは別に必要ないんだけど、メモリ128GBなマシンを組むと持てあますわけです。一時領域として使ってもよかろうということでRAM Diskを検討。
要約
- SoftPerfect RAM Diskは ベンチマークの結果はよかったが、継続にはライセンス購入が必要
- Passmark OSFMountもベンチマークの結果は良かったが、機能面に難あり。バッチファイルを書いて対処できそう
- ImDisk Toolkitは前2つと比べると性能は良くなかった。機能は十分
- WindowsにおいてはファイルシステムはexFATがよさそう。1ファイルのサイズ制限がほぼ無いのと、ベンチマーク結果がNTFSよりも良かった
- アロケーションユニットはなんでもよさそう
製品調査
なんか一覧がないかな、と思ったらWikipediaがあった。
ここからいくつか試そうと思う。
個人的にRAM Diskに求めてるのは以下。
- 16GB以上作れる
- ドライブレターの指定ができる
- TEMPフォルダを作ってくれる(これは起動時に作るタスクを仕込むでもいいけど、一緒に作ってくれるほうが楽なので)
参考: Cドライブ
最近のNVMeなSSDを見ると少し遅いけど、十分早い。
SoftPerfect RAM Disk
著名なやつ。フリーではなく30日の試用期間がある。それ以降は$29.00からのライセンスの購入が必要。
ベンチマークも良好。
単純で使用感もよく、金がかかる以外は文句ない。
Passmark OSFMount
ベンチマークを作ってるところが出している。ディスクイメージをマウントできるほか、RAMディスクも作成できる。
ベンチマークも良好。
ただ、機能面では物足りない。
- 再起動時に消える
- 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
仮想ディスクをマウントするためのツールだが、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にあげているようだ。
使ってみたがうまくいかなかった。残念。
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は出る。)
普段は少しでも電気代を節約するためにこの設定をもっと下げていたのだが、今回のベンチマーク時はここが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度以上にならないよう制限する設定もいれているのでまだ本気ではないのかもしれない。計測するって難しい。