スポンサーサイト

Posted by なる on --.-- スポンサー広告
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

レジストリの掃除とか 3GB スイッチとか

Posted by なる on 08.2010 システム関連 15 comments 0 trackback
< 2011/08/19 追記>
/USERVAR の記述間違いを訂正
正しくは /USERVA です
※コメントから情報ありがとうございます。

< 2010/04/16 追記>
XP32Bit & HD48XX 環境限定かもしれませんが Cata10.3 が地雷ぽい気がします…
まず 3GB スイッチにしてると「レジストリ領域不足、追加要求は無視されます」というエラーメッセージ。
/USERVA=2100 でやってるのに…

NifScope が不正落ちする ⇒ 致命的Orz
結局、3GBスイッチを切り Cata も 9.4 に戻しました。
どうも XP32Bit & HD48XX 環境だと鉄板は Cata8.10 or Cata9.4 らしいです。
でも 3GB スイッチ切ると目に見えて Oblivion が長期起動に耐えられなくなりました…
んー、まあ1時間程度持つのでいいかなぁと考えてます。
Cata9.4 で 3GB スイッチにすればいいのかな…
あ、ちゃんと Nifscope は安定しましたよー。

※ 今は Cata9.4 で 3GB にしてます、めっちゃ安定。
※その後 OBGEv2 で AA を使うため、Cata10.8 に...
※3GBスイッチが安定しなくなったので切りましたOrz (GPUドライバ関係と相性が悪かったので)

以下過去ログ


最近はやりの 3GB スイッチ をやってて気がついたことと知ったことを
自分用にまとめてます。
*PC に 3GB 以上のメモリーを積んでいないと意味がありません。
*64Bit OS の人は 4GB Patch + OSR の恩恵が大きいと思います。
*32Bit OS の人は 3GBスイッチが安定するのであれば恩恵は大きいです。
(それでも 64Bit ほどの恩恵はたぶんありません)

Windows XP SP3 32Bit版での話です。
それ以外の OS は判りかねます、また記事の内容の正確さは保障しません。
レジストリの操作を誤ると最悪 OS の再インストールが必要になります。
もし真似てみようという人はそのリスクを理解した上で自己責任でお願いします。

見直すと話が判り難いので...
この記事は下記について書いてあります。

1, OS でまず 3GB の壁を越えるため 3GB スイッチを使う。
(64Bit OS の場合、これは必要ありません、3GB の壁は 32BitOS 限定です)
2, Oblivion.exe を 2GB 以上使えるように改造する(4GB Patch)
3, より安定させる為、OSR v4.11 ↑ を使い、ini の iHeapSize を 450 くらいに設定する。
** OSR v4.13 では ini の初期値で iHeapSize = 450 になってます。
** iHeapAlgorithm が 3 or 5 の場合のみ有効なようです。
** 以前は iHeapAlgorithm 5 は安定しなかったのですが 4.1.3 だと安定してるかな?
OSR については新しく記事を作りました【Oblivion Stutter Remover



※64Bit OS の人は 3GB スイッチは関係ないので飛ばしてください。

まずは 3GB スイッチ って何よということですが、
32Bit OS では扱えるメモリーが 3GB までとなってます。
その限界点を超えて使用できるようにするのが 3GB スイッチ。

** ここから妄想とか **
この辺の仕組みですが正直あまりよく判っていません。
ちなみに 32Bit の 32 ですが、これは 2 の 32乗のこと。

2 は 2進数のことですね、きっと。
(コンピューターは 2進数 という 0 と 1 の世界。人は 0-9 までの 10進数)

2 の 32乗 は 4,294,967,296 ⇒ 4GB です。
つまり 32Bit で扱える数字は 4GB が限度となります。

そして メモリーの内 1GB は OS で使用する予約メモリーとなるそうです。
*この領域はプログラムで使用できない。
*たぶん最大値であって可変するはず。でないと1GBのPCじゃあプログラム領域ないし…
※この辺間違ってます(・・`)
↓にあるSizuruさんのコメントで詳しく書かれています。
Sizuruさん、情報ありがとうございます。


プログラムしてる人に聞くと最上位 Bit は特別な意味を持たせてることがあるようなので
それを除くと扱える数字は半分の 2GB。
1111 1111 1111 1111 1111 1111 1111 1111 (2進数)
⇒ 4,294,967,295 (10進数)

0111 1111 1111 1111 1111 1111 1111 1111 (2進数)
⇒ 2,147,483,647 (10進数)

OS が予約しているメモリー 1GB + 32 Bit で扱えるプログラムの限界メモリー 2GB
= 3GB

これが 32Bit OS で扱えるプログラムの限界を示すんじゃないかなぁ。
これは 32Bit の限界なので 64Bit では桁がまったく違うことになります。

計算上の 64Bit で扱える数字 18,446,744,073,709,551,615
⇒ 18,446,744,073 GB
これ18のところを単位にするとなんになるんですかねΣ( ̄□ ̄;)
*テラ、ペタ、エクサ らしいので 18 エクサですかぁ…

かなり脱線してますね、何が言いたいかというと 32Bit で扱う数字では桁が足りなくて
3GB 以上のメモリーを積んでいても意味がないよーというのを無理やり使っちゃおうということなのです。

ニュアンス的には指で数字を数えると 10 までしか数えられないじゃないですか?
じゃあ 10 になったら足の指を1つおってこれを10と換算しよう
とすれば10の枠を超えられる、という感じじゃないかなと勝手に思ってます。

** 妄想ここまで **

でその方法は Boot.ini にある引数を付け加えます。
MicroSoft の技術文章はこちら
Windows XP および Windows Server 2003 の Boot.ini ファイルで使用可能なスイッチ オプション

要点だけ書きます。
** しつこいですが安易に実施すると OS が起動しなくなります **
1.マイコンピュータを右クリックし「プロパティ」を選択。
2.「詳細設定」タブで「起動と回復」欄の「設定」ボタンをクリック。
3.「起動システム」欄の「編集」ボタンをクリック。
4. メモ帳が開くので [operating systems]と書かれている下の行の末尾に「 /3GB /USERVA=2900 」を追加して上書き保存。
5. Windowsを再起動。

ちなみに私は下記にしました。
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /fastdetect /NoExecute=OptIn /3GB /USERVA=2300
なお環境により multi(0)disk(0)rdisk(0)partition(1) この辺は人によって違います。
この辺は絶対に弄らないでください。
これは どの HDD にある、どのパーティションから OS を起動するかという設定。
間違えると起動しません。


---
※ひげどろさんのコメントにありますがこんな感じに二重に書くことで起動時に選択できるようになります。
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /fastdetect /NoExecute=OptIn /3GB /USERVA=2300
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /fastdetect /NoExecute=OptIn

上が時間切れでも選択されますが、こうしておくことで上が起動しなくても下で起動することが可能に。
ひげどろさん、情報ありがとうございます。

bootini.jpg

timeout=1 ← これは Bootの選択画面が出る時間です。
上の図のように2種類以上記述がある場合はここの秒数分、選択画面がでています。
この時間を過ぎると自動的に一番上が選択されて起動に。
図では上が 3GBスイッチ、下が3GBスイッチを使わないものなので
自動では 3GBスイッチが選択、これで起動しなくなった場合は1秒以内に↓キーを押して
通常のを選択すれば普段どおり起動することが出来ます。
ただし、あくまでも自己責任でBoot.iniは編集してください。

---

ここで少し説明。
上では /3GB /USERVA=2900 と書いてますが私の設定は /3GB /USERVA=2300

これが今回書こうとした理由です。
調べてみてもあまり情報がなかったのですが、この値は環境依存のようです。
MS社では 2900 が推奨値とのことですけど。

で、最初は 2900 でしてましたが起動時に
「レジストリ領域不足、追加要求は無視されます」というエラーメッセージが起動毎に出てきました。

USERVA の数字は搭載している VRAM 値と関係ありそうな記事を発見。

ちなみにその記事では
VRAM 128MB ⇒ 2900
VRAM 512MB ⇒ 2700

VRAM 2GB ⇒ 2500 かなと思ったのですが、
2200 まで落としたのですが変わらず。*HD4870 2GB を使ってます。
ただし出るタイミングが OS 起動すぐから少し間が開くようになりました。
** 書きながら調べてると VRAM では無く起動時に読み込むドライバーによって変わるみたいですね
** 多量のメモリを消費するドライバーがあるとこの数字は少なくする必要があるそうです。

ここで再度エラー内容を思い出してみる。
これレジストリに割り当てられるメモリーが足りないって意味なんだよなぁと…
* 3GB スイッチ使わなければこのメッセージは出ません。

そこで行き当たったのがレジストリにゴミがあるんじゃないかということ。
結果的にこれが当たりだったようで、2300 で問題なく起動できるようになりました。
別にあのメッセージが出ても普通に動いてた気はします。

以下やったことと参考になったサイト様です。

Crap Cleaner
・レジストリなどを掃除するツール。

NTREGOPT
・レジストリ再構築ツール

どちらもここで追加説明する要素がまったくない、丁寧な説明でわかりやすいです。
Crap Cleaner を使い、不要(と思われる)レジストリ情報を消します。
その後、NTREGOPT で最適化をして再起動。

不要なレジストリが消えて OS 起動も速くなりました。

まあなんで 3GB スイッチを使いたいかというと
3GB スイッチと Oblivion Stutter Remover との組み合わせで Ob が安定するかもしれないということ。

元々こんな MOD てんこ盛りを想定していないので
長時間遊んでいると 2GB の限界に達して CTD を起こします。
それをもうすこし後ろに引き伸ばせる効果があるようです。

Oblivion Stutter Remove の ini で iHeapSize を弄るといいようなのですが
どの程度の値がいいのかはわかりません。
450 とか 800 くらい?

そして Oblivion Stutter Remove は ver 4.11 以上のほうがいいと思います。
*フォーラムで v4.12 まであり、それ以降もありそうなのですが DownLoad ができないという…
・関連【雑記 -其の9-
Oblivion Stutter Remover (Nexus) のファイル群の中に WIP と書かれたものが中身 ver4.1.3 です。
※まさよしさん、情報ありがとうございます。



ここから Oblivion の 2GB 制限を取る方法です。
64Bit OS か 32BitOS + 3GB スイッチの操作が完了している必要があります。

そして oblivion の exe を 改造するもの。
4GB Patch
* これで Oblivon.exe のプログラムを 2GB突破できるようにするようです。
* 他にも 3GBEnabler というツールもあるようです。
** 日本語化 patch は OBSE版を使用してください。(v0.16β3)
** 日本語化 patch v0.15c の場合、OBSE経由では起動しないことが考えられます。

OBSE v0018β6以上ならどちらでも使用できるようです。Wasさん、情報ありがとうございました。
*OBSEv0018β4以下は別途自分で CRC を回避させる必要があります。
関連【OBSE 経由での TESConstructionSet 起動方法
TESConstructionSet の説明ですがやることは同じ。

4gb_patch.exe を実行。
どのファイルを 2GB 以上使えるようにするか聞いてくるので...
4gbpatch001.jpg

「Oblivion.exe」を選択します。
これで完成。
4gbpatch002.jpg

Oblivion.exe.Backup という名前の BackUpファイルも作成されるので
戻すときはファイル名を戻してください。

なお、仕組みとしては LARGEADDRESSAWARE というフラグを立ててるだけなので
Oblivion だけではなく、FO3 や他の 32Bit アプリケーションでも使用できます。
※obse_loader.exeとかはやる必要ないですよー、やっても多分不具合はないでしょうけど…

※まとめ※
1, OS でまず 3GB の壁を越えるため 3GB スイッチを使う。
2, Oblivion.exe を 2GB 以上使えるように改造する(4GB Patch)
3, より安定させる為、OSR v4.11 ↑ を使い、ini の iHeapSize を 450 くらいに設定する。
** OSR v4.13 では ini の初期値で iHeapSize = 450 になってます。
** iHeapAlgorithm が 3 or 5 の場合のみ有効なようです。
** 以前は iHeapAlgorithm 5 は安定しなかったのですが 4.1.3 だと安定してるかな?
OSR については新しく記事を作りました【Oblivion Stutter Remover

色々書いたけど把握してないことが多すぎる…
この内容間違ってるよーとかあれば教えてもらえると助かります。

○○したけどうまくいきません。など言われても私もわかりませーんですOrz。

正直、公開しようか迷ったんですが(突っ込まれても判らないですし)
まあ埋もれちゃうのはもったいない情報なのでメモ替わりにおいておきます。

なお、Oblivion:SS/MODスレ 148 363 前後を纏めてみました。

○ Comment

初めまして。いつもここの情報には大変お世話になっております。
いつのまにか4GB patchなんかでてたんですね~。以前は3GB enablerを使用していましたが、AAが切れてしまうので個人的にはいまいちな感じでした。4GBもやはりAAかからないんですかね?
2010.03.08 20:14 | URL | Was #- [edit]
Wasさん、こんばんは

AA は切れてないと思います
Athol Brose -Cloth and Armor- と Devil May Cry Stylish Action Smokin Sick Style で使用している SS は 4GB patch 使った後に撮ったものです

3GB enabler は AA 切れちゃうんですね
情報ありがとうございます(・o・)ゞ
2010.03.08 20:51 | URL | なる #- [edit]
なるさんこんばんは。
通常32bitOSではシステム用に2G、ユーザプロセス用に2Gの仮想空間が割り当てられています。/3GBスイッチはこれをシステム1G、ユーザ3Gにするものです。/USERVAはそれをもうちょい微調整できるようにする仕組みで、/USERVA=2300とすればだいたいシステム1.7G、ユーザ2.3Gとなります。システム用の仮想空間にはカーネル自身の他、各種デバイスのI/Oポートやらなんやらがマップされます。VRAMもその中に含まれます。VRAM2Gだからと言って必ずしも2Gの空間が必要なわけではありませんけど。で、システム空間が足りなくなると色々と不都合が起きるわけです。
一方ユーザプロセス側で2G以上の仮想空間を使えることを示すのが、ヘッダにあるLARGEADDRESSAWAREというフラグです。4GB Patchも3GBEnablerも基本的にやってることはこのフラグを立ててるだけです。
ちなみに64bitOSの場合LAAフラグを立てると32bitの限界である4GB丸々の仮想空間が使えるようになります。
2010.03.08 21:22 | URL | Sizuru #7RorUgFk [edit]
なるさん、ありがとうございますm(_ _)m
さっそく試してみようと思います。日本語パッチ0.16環境に直すのがちと面倒ですが(^^;) 3GBの時はレジストリ弄ってv0.15で使えるようにしようとしたのですが技術が足りず断念してしまいましたorz
2010.03.08 21:43 | URL | Was #- [edit]
AAが切れるのはドライバの作りに因るのかと。
AAをかけるには余計にVRAMを使う必要がありますが、システムの仮想空間が少なくなったので機能が落とされてるんじゃないでしょうか。
2010.03.08 21:48 | URL | Sizuru #7RorUgFk [edit]
ドライバの問題ですか・・・やはりGeforceはオブリとあまり相性よくないのかなぁ。GTX285でVRAMは2G メモリも6G(7 32bitなのであまり意味ないですが)積んでるんですがねぇ・・・
3GB使用時のSSDが不良セクタだらけだったのも関係してるんですかね?
2010.03.08 21:58 | URL | Was #- [edit]
Sizuruさん、こんばんは

判りやすい説明ありがとうございます
メモリの配当を変更して使えるようにしてると、メモメモ。
4GB patch と 3GB enabler ともにフラグ処理なら AA の切れる原因とは考えにくいですね

Wasさん
AA はまた別の原因な気がします
SSDの不良セクタとも違う気が
ドライバー周りか、他の要因(たとえばShader関係とか)ではないかと
2010.03.08 23:52 | URL | なる #- [edit]
試しに日本語化v0.15cを当てたoblivion.exeに4GBpatchを当てたのですが、OBSE経由で起動できました。OBSEは0018_beta_6を使用してます。
とりあえず現在の環境ではAA効いているみたいです。いろいろとためになる御説明ありがとうございましたm(_ _)m
2010.03.09 00:38 | URL | Was #- [edit]
multi~以降の書き換えですが、起動しなくなることも想定して、

multi(0)disk(0)rdisk(0)partition(1)WINDOWS="Microsoft Windows XP Home Edition(3GB)" /noexecute=optin /fastdetect /noguiboot /3GB /Userva=2900
multi(0)disk(0)rdisk(0)partition(1)WINDOWS="Microsoft Windows XP Home Edition" /noexecute=optin /fastdetect /noguiboot

スイッチ付きと、そうでないものを併記しておくといいですよ
こうすると、最初にどちらで起動するかの選択が出来るので、スイッチ付きで起動しなかった場合はスイッチ無し(つまり書き足し前の方)で無事に起動することが出来ます
2010.03.09 20:00 | URL | ひげどろ #SFo5/nok [edit]
テスのwipがバージョン4.1.3ですよ
2010.03.09 23:31 | URL | まさよし #- [edit]
Wasさん、ひげどろさん、まさよしさん

情報ありがとうございました。
記事の方に追加させていただきました(≧∇≦)ノ 感謝です。
2010.03.10 00:29 | URL | なる #- [edit]
その後3Gのほうも試しましたが、起動できました。
次いでobse0018beta4で検証してみましたが、エラーを吐いて起動できませんでした。beta5か6から日本語版にも対応したみたいですね。obseの製作者様には本当感謝です。
2010.03.10 01:13 | URL | Was #- [edit]
Wasさん、こんばんは

となると OBSEv0018β6 ならとりあえずどっちも平気となるみたいですねー
ありがとうございます
2010.03.11 20:50 | URL | なる #- [edit]
このコメントは管理者の承認待ちです
2011.08.14 13:31 | | # [edit]
指摘ありがとうございます
こんな間違いをしていたとは…
2011.08.19 08:57 | URL | なる #- [edit]

○ Post comment


  • 管理者にだけ表示を許可する

○ Trackback

trackbackURL:http://narulivion.blog46.fc2.com/tb.php/181-8c19f2db
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。