このプロジェクトについて

# Stellaris、Factorioなど向けLargePageInjectorMods ## はじめに LargePageInjectorModsへようこそ!このMODは、メモリ管理を最適化することで、Stellarisやその他のゲーム/アプリケーションのパフォーマンスを大幅に向上させます。 他のゲーム/アプリケーションのサポートは非常に実験的で未テストであり、動作しない可能性があります。 ### メモリアロケータとは? メモリアロケータは、プログラムの実行中にメモリの割り当てと解放を管理するソフトウェアコンポーネントです。効率的なメモリ割り当ては、StellarisやFactorioのようなゲームにおいて重要であり、よりスムーズなパフォーマンスにつながります。このMODで導入されるようなより効率的なアロケータを使用することで、ゲームのパフォーマンスを目に見えて改善できます。 ### なぜmimallocなのか? Microsoftが開発した`mimalloc`は、速度とメモリ断片化効率の面で一般的に標準アロケータを上回る高度なメモリアロケータです。このMODを通じて`mimalloc`をStellaris、Factorio、その他のゲーム/アプリケーションに統合することで、ゲームはより高速なメモリ操作の恩恵を受け、全体的なパフォーマンスが向上します。[mimalloc GitHub](https://github.com/microsoft/mimalloc) ### DLLインジェクションについて DLL(Dynamic Link Library)インジェクションは、動的リンクライブラリを強制的に読み込ませることで、別のプロセスのアドレス空間内でコードを実行する手法です。LargePageInjectorModsでは、DLLインジェクションを利用して、ゲームの実行ファイルを変更することなく、Stellarisのデフォルトのメモリアロケータを`mimalloc`にシームレスに置き換えます。 ## パフォーマンス向上 LargePageInjectorModsは大幅なパフォーマンス向上をもたらす可能性があります(パフォーマンスはStellarisでのみテスト済み): - **標準パフォーマンス向上**:4~5%の小さなパフォーマンス向上。状況によっては完全に無視できる程度か、あるいは大幅に大きくなる可能性があります。 - **Large Pagesによる強化されたパフォーマンス**:Large Pagesを有効にすると、このMODは5~80%以上のパフォーマンス向上を実現できます。 - Ryzen 7800X3DでのFactorioのベンチマーク結果: - Large Page Injector Modsなし [Factoriobox](https://factoriobox.1au.us/result/6ca27dcc-14a9-4484-8d2a-7d6da622462f):46 UPS - Large Page Injector ModsとLarge Pagesあり [Factoriobox](https://factoriobox.1au.us/result/919e6097-5c70-4092-8ecb-4c1ea8cbba1a):54 UPS - パフォーマンス向上は、セーブデータ(ゲームの後半でセーブが重いほど向上が大きくなるはずです)、ハードウェア(一般的に弱いハードウェアほど向上が大きい)、使用しているMODなどによって劇的に変動する可能性があることに注意してください。実際のパフォーマンス向上は、上記で言及されたものより大幅に小さいか大きい可能性があります。弱いハードウェアを使用している方が80%のパフォーマンス向上を得たと報告しているので、大きな向上も不可能ではありません。 ### 標準インストール 1. **MODをダウンロード**:[Releases Page](https://github.com/KeinNiemand/LargePageInjectorMods/releases)から、お使いのゲーム/ゲームバージョン用のZIPファイルをダウンロードします。 免責事項:一部のアンチウイルス(Windows Defenderを含む)がInjector.exeをマルウェアと誤検出する可能性があります。これはアンチウイルスがDLLインジェクションを疑わしいと見なすことによる誤検出です。私を信用しない場合は、ソースコードを読んで自分でコンパイルすることができます。 3. **ゲーム実行ファイルのディレクトリを特定**:Stellaris/Factorio/試したいもののインストール先ディレクトリ(`stellaris.exe`、`factorio.exe`、または一般的なゲームの実行ファイルがあるフォルダ)を見つけます。 4. **ファイルを展開**:ダウンロードしたZIPファイルからすべてのファイルをStellarisのインストールフォルダにドラッグします。ファイルを置き換えるか確認されたら「はい」をクリックします。 5. **Stellaris** ゲームを通常どおり実行します。含まれているlauncher-settings.jsonがParadoxランチャーを設定し、Injectorを実行し、それがゲームを起動します。成功した場合、ゲームの起動に数秒余分にかかり、ゲームが開く前に短いビープ音が鳴って成功を示します。ゲームが更新された場合、launcher-config.jsonファイルを再度置き換える必要があるかもしれないことに注意してください。 **その他のゲーム** ゲームを起動する代わりにInjector.exeを実行します。 ### Large Pagesのための高度なインストール Large Pagesを有効にしてパフォーマンスをさらに向上させるには、次の手順に従ってください: #### 1. LockPagesInMemory特権を付与する まず、Windowsユーザーに`LockPagesInMemory`特権を付与します: ##### LockPagesInMemory特権を付与する方法 この特権はLarge Pagesを有効にするために必要であり、ローカルセキュリティポリシーエディタ(`secpol`)を通じて付与できます: 1. `Win + R`を押し、`secpol.msc`と入力してEnterを押します。 2. `セキュリティ設定` -> `ローカルポリシー` -> `ユーザー権利の割り当て`に移動します。 3. 「メモリ内のページのロック」を見つけてダブルクリックします。 4. 「ユーザーまたはグループの追加」を選択し、自分のユーザーアカウントを追加します。 5. 変更を適用し、変更を確実に反映させるためにコンピュータを再起動します。 より詳細な手順については、[Microsoftのドキュメント](https://learn.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/lock-pages-in-memory)を参照してください。 #### 2. Large Pagesに使用するRAM変数を設定する LargePageInjectormods.tomlの`MIMALLOC_RESERVE_HUGE_OS_PAGES`変数を1以上に設定します(デフォルトは8)。この値は予約するLarge PagesのGB数を表し、理想的には実行しようとしているゲーム/アプリケーションが通常使用するRAMより多くする必要があります。 #### 3. システム要件と推奨事項 - **RAMが16GB未満**:Large Pagesは効果的でない可能性があります。 - **RAMが16GB**:環境変数を4より高く設定しないでください。十分な連続RAMを確保するために、PCの再起動と不要な自動起動の無効化が必要になる場合があります。 - **RAMが32GB以上**:変数を4~8の間に設定することを推奨します。 **注意**:連続RAMが不十分だと、メモリ断片化の問題が発生する可能性があります。 ## サードパーティライブラリとクレジット このMODは以下のサードパーティライブラリを使用しています: - **Mimalloc**:[Mimalloc GitHub](https://github.com/microsoft/mimalloc) - **Sigmatch**:[Sigmatch GitHub](https://github.com/SpriteOvO/sigmatch) - **Hooking by Example**(ライブラリではないが、いくつかの関数をコピーしました)[Hooking By Example Github](https://github.com/khalladay/hooking-by-example) - **Toml11**:[Toml11 GitHub](https://github.com/ToruNiina/toml11) ### サードパーティライセンス - **Mimallocライセンス**:[Mimalloc License](https://github.com/KeinNiemand/LargePageInjectorMods/blob/master/3rdPartyLicences/MIMALLOC_LICENCE.txt) - **Sigmatchライセンス**:[Sigmatch License](https://github.com/KeinNiemand/LargePageInjectorMods/blob/master/3rdPartyLicences/sigmatch_LICENSE.txt) - **Hooking by Exampleライセンス**:[Hooking by Example Licence](https://github.com/khalladay/hooking-by-example/blob/master/LICENSE) - **Toml11ライセンス**:[Toml11 Licence](https://github.com/KeinNiemand/LargePageInjectorMods/blob/master/3rdPartyLicences/toml11_LICENSE.txt) ## 互換性 ### 対応ゲーム - Stellaris - Factorio - Crusader Kings 2(実験的) - 実行するには、CK2と同じフォルダにファイルを展開し、injector.exeを実行してゲームを起動します。このゲームのパフォーマンステストは行われていません。 このMODはリストに対してテストされていますが、64ビットネイティブアプリケーションであり、同じCランタイムライブラリを使用するものであれば、他のゲームでも動作する可能性があります。このMODを正常に使用できたゲーム/アプリケーションに関する報告/提案は歓迎します。対応リストに追加するかもしれません。 動作しない非対応アプリケーションに関する問題は、それらを動作させるプルリクエストがない限り報告しないでください。 対応ゲームの他のすべてのMODと互換性があるはずです。互換性の問題が発生した場合は、このGitHubページの「Issues」セクションで報告してください。 ### 既知の問題 - **Stellaris 4.2**:現在、このバージョンのStellarisとは互換性がありません。 ## 設定ファイル形式 設定ファイルは`LargePageInjectorMods.toml`という名前でなければなりません。サンプル設定は`configs`フォルダに用意されています。サンプル設定を使用するには、名前を`LargePageInjectorMods.toml`に変更します。設定ファイルは`Injector.exe`および起動されるゲーム/アプリケーションと同じフォルダになければなりません。 ### 設定例(`LargePageInjectorMods.toml`) ```toml # 起動するゲーム/アプリケーションの実行ファイルへのパス LaunchPath = "stellaris.exe" # Stellarisの場合 # LaunchPath = "factorio.exe" # Factorioの場合はコメントを解除 # mimallocでパッチを適用するモジュール(DLLまたはEXE) ModulesToPatch = [ "stellaris.exe", # メイン実行ファイル # 必要に応じて他のモジュールを追加 # "example.dll", ] # 詳細度レベル(0-4) Verbosity = 0 # 0 = サイレント、1 = エラー、2 = 警告、3 = 情報、4 = デバッグ # コンソール出力をInjectorにリダイレクト(true/false) RedirectConsoleOutput = true # 有効にするにはtrueに設定 # 注入後のビープ音を有効化(true/false) EnableBeep = true # 無効にするにはfalseに設定 # 設定する環境変数 [Environment] #Large Pagesに割り当てるRAM量(GB)、0に設定するとhuge pagesを無効化 MIMALLOC_RESERVE_HUGE_OS_PAGES = "8" #パフォーマンスを向上させる可能性のある各種Mimalloc環境変数 MIMALLOC_ARENA_EAGER_COMMIT = "1" MIMALLOC_PURGE_DELAY = "10000" MIMALLOC_RESET_DELAY = "10000" ``` ## コントリビューション LargePageInjectorModsへのコントリビューションを歓迎します!改善の提案やバグ修正がある場合は、このリポジトリをフォークしてプルリクエストを送信してください。 ## ライセンス このプロジェクトはMITライセンスの下でライセンスされています - 詳細は[LICENSE](https://github.com/KeinNiemand/LargePageInjectorMods/blob/master/LICENSE)ファイルを参照してください。 ## 謝辞 - Stellarisとチームの魅力的なゲームに感謝します。 - `mimalloc`アロケータを開発したMicrosoftに敬意を表します。 - ソフトウェアコミュニティへの貢献に対して、Sigmatchの開発者に特別な感謝を捧げます。 ## 免責事項 このMODはStellarisの制作者によって公式に承認されたものではありません。自己責任で使用してください。