パフォーマンスベンチマーク
本ページは RenMori 1.1.0 のパフォーマンスベンチマーク結果を記録したものです。テストは実際の Ren'Py 8.5.2 エンジン内で行い、同一のアセットから未保護、ベースライン保護、フル保護の 3 種類の配布用ビルドを作成し、エンジン自身の読み込み経路である renpy.loader.load を通じてすべてのアセットを読み込む時間を計測しています。そのため、得られる数値は単体の暗号ライブラリの性能ではなく、実際に配布されるランタイムのオーバーヘッドです。
ベンチマークスクリプトはリポジトリの tools/benchmark.py で、本ページのデータに対応する生の結果は docs/benchmarks/2026-10-31-apple-m1.json にあります。
結果の要約
- フル保護でのエンジン内復号スループットは、ファイルサイズに応じて 567〜1529 MB/s
- 2 MB の CG の読み込みは、フル保護では未保護より約 0.95 ms 長くかかる。参考として、60 FPS での 1 フレームは 16.7 ms
- 動画内でランダムにシークして 64 KB を読み込む時間は、フル保護で中央値 0.086 ms
- すべてのスクリプトを読み込んで解析する
lintの所要時間は 0.52 s から 0.67 s に増加 - 保護済みビルドの
game/ディレクトリのサイズ増加はわずか 0.18% - ビルド時に 319 MB のアセットをフル保護する処理は約 13 s
テスト環境
テスト方法
ワークロード
Ren'Py SDK のサンプルプロジェクト the_question をベースに、商業ビジュアルノベルの規模を想定した合成アセット計 812 ファイルを game/ に追加しました。サンプル自体のファイルを含めると game/ ディレクトリは合計 319.3 MB です。合成アセットの内容はランダムなバイト列で、エンコード済みの画像、音声、動画と同様に圧縮できません。
計測項目
本ページの MB はすべて 220 バイトを指します。
結果
エンジン内の読み込みスループット
単位は MB/s で、値が大きいほど高速です。
ファイルごとの読み込み時間
単位は ms で、1 つのファイル全体を読み込むのに要する時間です。
動画はファイル全体ではなくエンジンによってストリーミングで読み込まれるため、次節のレイテンシを参照してください。
動画のストリーミング読み込みレイテンシ
単位は ms で、中央値です。
スクリプトの読み込み
the_question には 52 個のコンパイル済みスクリプトが含まれており、3 種類のビルドの差はいずれも 0.15 s 以内です。
ビルド時間とサイズのオーバーヘッド
ビルド時間は開発者のマシンまたは CI 上でのみ発生し、プレイヤーには影響しません。フル保護はクローズドプラグインが実行し、ビルドごとの構造多態化などの追加処理を含むため、ベースライン保護よりも時間がかかります。
チャンクサイズ
以下のデータはビルドツールの Python で cryptography バックエンドを使用して計測したもので、chunk_size 設定のトレードオフを比較するためのものです。エンジン内での絶対的な性能を示すものではありません。
チャンクが大きいほどシーケンシャルスループットは向上し、サイズのオーバーヘッドも小さくなりますが、ランダム読み込みのたびに復号するデータ量が増えます。既定の 64 KB は両者のバランスを取った値で、通常は変更する必要はありません。
結果の解釈
フル保護はクローズドプラグインが提供するネイティブランタイムを使用し、配布用ビルドの既定値です。ベースライン保護は Python で書かれたリファレンスリーダーを使用し、スループットはフル保護の 1/14〜1/6 程度であるため、プラグインを使用できない場合に限って適しています。詳しくは 保護強度とクローズドプラグイン を参照してください。
上表の「未保護」の値がメモリコピーに近い速度になっているのは、テスト時にアセットがすでにオペレーティングシステムのページキャッシュ上にあったためです。この条件によりディスク性能の差が除外され、結果は復号そのものの CPU コストのみを反映します。プレイヤーのマシンでは初回の読み込みは通常ディスク速度に制約されるため、保護済みと未保護の相対的な差はその分小さくなります。
制限事項
- 実際のプレイ中のフレーム時間は計測していない。本ページのデータはアセットの読み込みと復号のみを対象とし、画像のデコード、音声のデコード、描画は含まない
- 合成アセットはランダムなバイト列で、エンジンは読み込むのみでデコードしない
- ページキャッシュが温まった状態でテストしており、コールドスタート時のディスク I/O は含まない
- テストは 1 台の Apple M1 デバイスのみで行っており、Windows、Linux、Steam Deck でのデータは未計測
再現方法
Ren'Py SDK と RenMori のソースリポジトリが必要です。フル保護にはクローズドプラグインが必要で、初回実行時に自動でダウンロードされます。
絶対値はデバイスによって異なるため、比較の際は同一デバイス上での 3 種類のビルド間の相対的な結果を基準にしてください。