2011年10月5日(水) 23:06:33 @ Charlie

RamDisk 活用法

RamDisk に Oblivion の BSA ファイル入れたらやけにスムーズ。決して早くはないが、カクつきはなくなった。何にせよ、 MOD の FCOM が重過ぎる。

RamDisk 活用法 1 - Oblivion

16GB の RAM を積んだので、 10GB を RamDisk にした。ちなみにメモリは Max 使っても 3GB 程度だから、あと 2GB くらいは増やせそうだが、ゆとりを持たせるのも悪くない。

10GB のチョッ速テンポラリ領域に何をおくかと言えば、 oblivion の BSA ファイルだ。ってゲームかよ。

この BSA ファイルと言うのは、圧縮された (もしくは未圧縮の) ゲームデータの書庫ファイルと思って欲しい。しらねーよ? うん、もっともだw

とりあえず、これを RamDisk 領域に置くことで、ゲームがスムーズに動くようになるという。本当はフォルダごと RamDisk に置くのがいいのだが、容量足りず無念。必要な BSA ファイルだけ RamDisk に置くことにする。

簡単に流れを説明すると、以下のファイルが元ファイル。

  • C:\Program Files (x86)\Bethesda Softworks\oblivion\data\Oblivion - Meshes.bsa
  • C:\Program Files (x86)\Bethesda Softworks\oblivion\data\Oblivion - Textures - Compressed.bsa

これを RamDisk にコピーする。

  • z:\oblivion\Oblivion - Meshes.bsa
  • z:\oblivion\Oblivion - Textures - Compressed.bsa

HDD の方のファイル名を変更 (.ram をつける)。

  • C:\Program Files (x86)\Bethesda Softworks\oblivion\data\Oblivion - Meshes.bsa.ram
  • C:\Program Files (x86)\Bethesda Softworks\oblivion\data\Oblivion - Textures - Compressed.bsa.ram

HDD に RamDisk へのシンボリックリンクを作成。

※ C:\Program Files (x86)\Bethesda Softworks\oblivion\data\Oblivion - Meshes.bsa のようなシンボリックリンクを作成する。ファイル名としては同じだが、実際は SYMLINK。その実体は RamDisk にある。

遊んでみた。 HDD のときはいちいち止まっていた読み込みバーが、 RamDisk にするとやけにスムーズだ。

広大なフィールドを Speed 250 で走り回ってみた。

読み込み時のカクツキは無くなったが、キャラクター変更 MOD の MBP2ch 入れてある弊害か、目がもの凄いことになっている。座標がずれた目のテクスチャが表示されちゃってるせいで、目の中に目が 2 つある。こういってみると「ふうん」で済むが、実際見ると結構グロイ。気持ち悪いとかじゃなく、グロイ。

目玉が 4 つあるならまだいいのだ。しかし、目の中に異形の目玉があるのが、これほどまでに生理的嫌悪感を抱かせるとは、寡聞にして知らなかった。知りたくもなかった。

これは、シンボリックリンクを作った日付が、キャラ MOD のファイルより新しくなってしまったせいで後から読み込まれ、データが Vanilla に戻ってしまっているせいらしい。

BSA に書庫されているファイル群のタイムスタンプでも、 RamDisk にコピーしたファイルのタイムスタンプでもないことに注意。

それが分かるまで試行錯誤したので、覚書として記事にすることにした。って、どっかで見たようなフレーズ。

Oblivion の BSA ファイルを RamDisk に移動させて遊ぶ
1. オリジナルファイルを RamDisk に配置
  • C:\Program Files (x86)\Bethesda Softworks\oblivion\data\Oblivion - Meshes.bsa
  • C:\Program Files (x86)\Bethesda Softworks\oblivion\data\Oblivion - Textures - Compressed.bsa

上記のファイルを RamDisk にコピーする。

  • z:\oblivion\Oblivion - Meshes.bsa
  • z:\oblivion\Oblivion - Textures - Compressed.bsa
2. オリジナルのファイル名変更
  • C:\Program Files (x86)\Bethesda Softworks\oblivion\data\Oblivion - Meshes.bsa
  • C:\Program Files (x86)\Bethesda Softworks\oblivion\data\Oblivion - Textures - Compressed.bsa

上記を、以下のファイル名にする (.ram をつける)。

  • C:\Program Files (x86)\Bethesda Softworks\oblivion\data\Oblivion - Meshes.bsa.ram
  • C:\Program Files (x86)\Bethesda Softworks\oblivion\data\Oblivion - Textures - Compressed.bsa.ram
3. シンボリックリンク作成

これが今回のキモ。

Windows7 で、シンボリックリンクそのもののタイムスタンプを変更することがどうやってもできなかった。ではどうするかというと、シンボリックリンクは日付を過去にして作る。

なんと乱暴な! しかしそれしかない。

おもむろに 2006/01/01 にタイムスリップ。コンパネにある日付と日時、だっけ? 右下の時計アイコンからも修正可能。戻すときが面倒なので、時間までは変更しない方がいいだろう。

次に、コマンドラインを管理者権限で実行。

CODE:
  1. mklink "C:\Program Files (x86)\Bethesda Softworks\oblivion\data\Oblivion - Meshes.bsa" "z:\oblivion\Oblivion - Meshes.bsa"
  2.  
  3. mklink "C:\Program Files (x86)\Bethesda Softworks\oblivion\data\Oblivion - Textures - Compressed.bsa" "z:\oblivion\Oblivion - Textures - Compressed.bsa"

Z:\oblivion\Oblivion - Meshes.bsa のシンボリックリンクが、
C:\Program Files (x86)\Bethesda Softworks\oblivion\data\Oblivion - Meshes.bsa として作成される。

oblivion が上記 BSA を読み込みに行くと、リンク先の RamDisk のファイルを読み込むというわけ。

シンボリックリンクを作成したら、現代に戻ってくるのを忘れないこと。 2011年xx月xx日。

4. ゲームを楽しむ

こんな感じで、サイズの大きな奴をコピー対象にして、バッチファイル化しておくといいと思われ。

CODE:
  1. echo F | xcopy /D /R /Y "C:\Program Files (x86)\Bethesda Softworks\Oblivion\Data\Oblivion - Textures - Compressed.bsa.ram" "z:\game\Oblivion - Textures - Compressed.bsa"
  2. echo F | xcopy /D /R /Y "C:\Program Files (x86)\Bethesda Softworks\Oblivion\Data\Oblivion - Meshes.bsa.ram" "z:\game\Oblivion - Meshes.bsa"
  3. echo F | xcopy /D /R /Y "C:\Program Files (x86)\Bethesda Softworks\Oblivion\Data\Fra - NewItems.bsa.ram" "z:\game\Fra - NewItems.bsa"
  4. echo F | xcopy /D /R /Y "C:\Program Files (x86)\Bethesda Softworks\Oblivion\Data\Oblivion WarCry EV.bsa.ram" "z:\game\Oblivion WarCry EV.bsa"
  5. echo F | xcopy /D /R /Y "C:\Program Files (x86)\Bethesda Softworks\Oblivion\Data\FCOM_Convergence.bsa.ram" "z:\game\FCOM_Convergence.bsa"
  6. echo F | xcopy /D /R /Y "C:\Program Files (x86)\Bethesda Softworks\Oblivion\Data\FCOM_Convergence - MMM.bsa.ram" "z:\game\FCOM_Convergence - MMM.bsa"

※ それぞれのファイルのシンボリックリンクは、管理者権限で作っておくこと。

※ 再起動すると RamDisk のデータは消えるが、シンボリックリンクは消えないので、 Oblivion 起動前にこのバッチを一般権限で実行すれば OK。

※ 屋外では Voice 等の大きなファイルは関係ないと思ったので、対象外にしている

RamDisk の効果をニヤニヤしながら眺める。それにしても何を入れているか、すぐ分かる――正確には、分かる人には分かる。

5. 戻したくなったら

以下のシンボリックリンクを削除。

  • C:\Program Files (x86)\Bethesda Softworks\oblivion\data\Oblivion - Meshes.bsa
  • C:\Program Files (x86)\Bethesda Softworks\oblivion\data\Oblivion - Textures - Compressed.bsa

拡張子の .ram を消して、ファイル名を元に戻す。

  • C:\Program Files (x86)\Bethesda Softworks\oblivion\data\Oblivion - Meshes.bsa.ram
  • C:\Program Files (x86)\Bethesda Softworks\oblivion\data\Oblivion - Textures - Compressed.bsa.ram

効果が分かったところで、他の大型 BSA 一式を RamDisk にコピーした。 CTD (クラッシュ) も少なくなって、嬉しい。

RamDisk 活用法 2 - Firefox

1. Firefox の設定を行なう

とりあえず、キャッシュを RamDisk 上に作成する設定を行なう。

about:config から、

browser.cache.disk.parent_directory を追加して、 z:\tmp とした。

これで、 Firefox 再起動後に RamDisk にキャッシュが作成される。

2. Firefox のディレクトリ名変更

C:\Program Files (x86)\Mozilla Firefox
というディレクトリを
C:\Program Files (x86)\Mozilla Firefox.ram
と名前変更。

3. Firefox を RamDisk 上で起動

firefox.bat を作成する。

CODE:
  1. echo D | xcopy /E /D /R /Y "C:\Program Files (x86)\Mozilla Firefox.ram" "z:\apps\Mozilla Firefox"
  2. mklink /d "C:\Program Files (x86)\Mozilla Firefox\" "z:\apps\Mozilla Firefox\"
  3. "z:\apps\Mozilla Firefox\firefox.exe"

1 回目だけ管理者モードで実行する。このとき、 Firefox が RamDisk から起動するが、とりあえず終了させる。

次回から firerox.bat を普通に W クリックすれば OK。

ちなみに、 1 回目を管理者モードで実行させるのは、
C:\Program Files (x86)\Mozilla Firefox
というシンボリックリンクを作るため。

今後は firefox.bat で Firefox を起動する。

4. 戻したくなったら

C:\Program Files (x86)\Mozilla Firefox
シンボリックリンクを削除した後、

C:\Program Files (x86)\Mozilla Firefox.ram を
C:\Program Files (x86)\Mozilla Firefox に名前変更すれば良い。

個人設定ファイルの場所は、 RamDisk に移動しなくてもいいかな。
再起動で消えちゃ敵わないし。
あとは、 AddOn とか入れたら、 RamDisk →
C:\Program Files (x86)\Mozilla Firefox.ram
にコピーする必要があるやも。

2011年10月2日(日) 23:34:23 @ Charlie

Windows7 (64 bit) 環境 RamDisk

Category : ramdisk / Tags :

お久しぶりです。半年ぶりの登場って、やまだかつてないかも。と思ったら 2008 年にあったわw

先日、メモリの価格を調べていたら、馬鹿みたいに安くなっていたことを知り、 16GB に増設することにした秋の思ひ出です。

SSD の信頼性

友人が SSD に OS を入れたらやけに速ぇーみたいなことを言ってきたのが事の始まりだった。

Crucial m4 CT128M4SSD2 は 1 万 5 千円程度でこれだけ速い。
Read : 415 MB/s
Write : 175 MB/s

他の人の CT128M4SSD2 ベンチマークを見ると、 CrystalDiskMark 3.0 の 1000MB でこれだけの速度を出している。

CT128M4SSD2 の大雑把なベンチマーク
テスト項目 Read [MB/s] Write [MB/s]
Seq 400 180
512K 360 180
4K 25 65
4K(QD32) 210 160

※ 4K 以外は 1 MB/s の単位で切り捨ててみたり
※ 他の人のベンチだしね

私の環境が、 ADAPTEC ASR-2405 ( RAID 1+0 ) 4 台構成 (実質 2 台で Raid0 の速さ ) で以下の通り。

ベンチマーク HDD (Raid10)

ベンチマーク HDD (Raid10)

4K(QD32) が HDD の NCQ(Native Command Queuing) を使ってのベンチになる。こちらの方が実際の使用感に近い数字になるようだ。

やはり SSD には敵わない。っていうか 100 倍かよ。強ぇな。

SSD 4 台にして RAID10 を組めば大分速くなるかなぁと思っていた時期もあった。しかし、以下の理由でキャンセルした。

  • SSD の寿命の短さ
  • SSD 64GB の書き込みの遅さ。かといって書き込みの速い 128GB を 4 台も仕入れるにはお金がかかりすぎる。
  • SSD に特化した RAID ボードがない。ないことはないが、品薄すぎてどうにも入手不可だし、 15 万くらいする。無理じゃね?

OS が入っている記憶媒体に、信頼性のない SSD は厳しいように思えた。決してお金がなくて悔しいわけではないw

オンボード RAID で SSD 2 台による RAID1 の構成も考えたが、ネックになるのはやはり信頼性だった。

昔懐かしい i-ram のようなものも考えたが、各社生産中止により、デバイスの入手が困難すぎてどうにもならない。

というわけで現状維持の結論に至ったわけだが、価格.com を調べていたときに、メモリの安さを知った。 16GB で 7 千円って、何?

RAM のベンチは SSD の 10 倍以上だ。テンポラリ用に RamDisk を作ってしまえば、あるアプリに関しては爆速気分を味わうことができるとあり、やってみることにした。

おもむろにメモリ増設。差し込み不具合で再起動 10 回ほど。
orz

で、いよいよ RamDisk を作成する段階になり、 Gavotte Ramdisk をインストールしたわけだが、やたら苦労する羽目になったので、覚書として記事を起こすことにした。

Windows7 (64bit) に Gavotte Ramdisk インストール

※ Windows7 は署名がついていないドライバーは機能しないという余計なお世話仕様がある。

※ Gavotte Ramdisk には署名がついていないが、 4GB 以上を Ramdisk にできるフリーソフトはこれしかないので、何とか使うしかない。

Windows 7 64bit 署名有無のドライバについて
ドライバ 通常起動 テストモード ブート時 F8
署名なし × ×
自己署名 ×
一般の署名

※ ブート時に F8 で起動することで、署名なしでもドライバが利用できるが、面倒すぎるので、自己署名 + テストモードで対応する。(Brue-Ray が再生できないとか不都合生じるらしいが、そんなの関係ねぇ)

※ SetupReadyDriverPlus を使えば F8 起動と同じ効果が得られるので、 Blue-Ray 再生も思いのままだが、セキュリティ的にやや危険な感じはする。しかも MBR 書き換えるし、どうなの。

Windows7 (64 bit) 環境で Ramdisk を使えるようになるまで

※ うまくいかなくても絶望しない

※ ググるのは基本

1. Gavotte Ramdisk をダウンロード

Cドライブ直下に GavotteRamdisk フォルダ作成

2. 自己署名の作成 & インストール

Windows7 SDK (.NET Framework4.0版) をインストールする

※ makecert 等の署名作成コマンドが揃っていれば、わざわざ SDK を入れる必要はない。

コマンドプロンプト(場合によって、管理者権限?) を開いてコマンド入力

CODE:
  1. cd c:\GavotteRamdisk\
  2.  
  3. makecert -sv rramdisk64.pvk -a sha1 -eku 1.3.6.1.5.5.7.3.3 -r -ss Root -len 1024 -sr localMachine -n CN="rramdisk64.sys" rramdisk64.cer
  4.  
  5. cert2spc rramdisk64.cer rramdisk64.spc
  6.  
  7. pvk2pfx -pvk rramdisk64.pvk -pi test -spc rramdisk64.spc -pfx rramdisk64.pfx
  8. ※ パスワード test にした

以上で rramdisk64.pvk が作成される。

rramdisk64.pvk を右クリック、インストール
証明書ストアは、「物理ストアを表示する」にチェック
[ 信頼されたルート証明機関\レジストリ ] を選択
パスワードは②で入力したもの (test)

3. Gavotte Ramdisk のインストール

コマンドプロンプトを管理者モードで実行。

bcdedit /set testsigning on
(off でテストモードをやめる)

Windows7 を再起動するとテストモードになる。

テストモードが有効になると、デスクトップ右下にウォーターマークが出てうざいことになるが、後で対処。

この辺のタイミングで、 ram4g.reg をダブルクリックしてレジストリに書き込みしておく。

ファイル名を指定して実行から hdwwiz でハードウェアの追加ウィザード
「一覧から選択したハードウェアをインストールする」
「すべてのデバイスを表示」を選択して「次へ」
「ディスク使用」をクリック
「製造元のファイルのコピー元」で rramdisk64.sys のあるフォルダを指定

4. Ramdisk の作成

c:\GavotteRamdisk\ramdisk.exe を右クリックして「管理者として実行」

※ ④の後に再起動してからやる必要があるかも? やれるならそのままやって構わないと思う。

Data Size : 10G と入力した。好みで。
Drive Letter : Z:
Media Type : Fixed Media

OK をクリックして再起動

5. Ramdisk の NTFS フォーマット

やけに時間がかかるようになった起動のあと、 Z ドライブを NTFS フォーマットする (マイコンピュータから Z を右クリックとかで)。

関係ないが、 Z ドライブの Volume は RamDisk にした。

6. デスクトップに出る「テストモード」のウォーターマーク除去

管理者権限のコマンドプロンプトから RemoveWatermarkX64.exe を実行し、 Y を押す。

再起動で消える。

Ramdisk のベンチマーク結果
ベンチマーク Memory

ベンチマーク Memory

Memory 増設時のいろいろで、 BIOS 初期化したまま、メモリのオーバークロックとかしていない状態。

SSD の 6 倍にはなった。まあ、容量少ないからテンポラリに使うくらいしかないのだが、 Firefox まるごと移動させて使えば結構おもしろいことになる。

■ 注意事項

テストモードを OFF にするには、コマンドプロンプトを管理者権限で実行して以下のコマンドを実行すればいい。

bcdedit /set TESTSIGNING OFF

ただし、再起動と同時に Gavotte Ramdisk が自己署名であることを見抜かれて強制的に削除される。

やたら時間がかかるシステム復旧のあと、直前に入れた SDK やらなにやらが消えてしまうこともありうる。何故か oblivion の MOD ファイルが消え、セーブデータがロードできなくなったときには殺意を覚えたが……

症状が軽ければ c:\GavotteRamdisk の実行ファイルやドライバが消えるだけで済むが、せっかく苦労して入れた GavotteRamdisk が削除されてしまうので、やらない方がいいだろう。そうだ、一生テストモードと付き合っていくのだ。

やるなと言われるとやりたくなる人間の心理

Counter : Access
ログイン