For AI agents: the complete documentation index is available at https://renmori.mewbaka.cn/ja/llms.txt, the full documentation bundle is available at https://renmori.mewbaka.cn/ja/llms-full.txt, and this page is available as Markdown at https://renmori.mewbaka.cn/ja/milestones/benchmark.md.
  • 日本語
  • パフォーマンスベンチマーク

    本ページは 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

    テスト環境

    項目値
    テスト日2026-10-31
    デバイスApple M1、メモリ 8 GB
    オペレーティングシステムmacOS 26.5.1(arm64)
    Ren'Py8.5.2.26010301
    RenMori1.1.0、クローズドプラグイン plugin-v1.1.0
    ビルドツールの Python3.12.12

    テスト方法

    ワークロード

    Ren'Py SDK のサンプルプロジェクト the_question をベースに、商業ビジュアルノベルの規模を想定した合成アセット計 812 ファイルを game/ に追加しました。サンプル自体のファイルを含めると game/ ディレクトリは合計 319.3 MB です。合成アセットの内容はランダムなバイト列で、エンコード済みの画像、音声、動画と同様に圧縮できません。

    カテゴリ拡張子ファイルサイズファイル数合計
    CG.png2 MB4080.0 MB
    立ち絵.png600 KB6035.2 MB
    UI 素材.png24 KB4009.4 MB
    BGM.ogg4 MB1040.0 MB
    ボイス.opus60 KB30017.6 MB
    動画.webm64 MB2128.0 MB

    計測項目

    項目方法
    エンジン内の読み込みスループット各ビルドにベンチマーク拡張を注入し、エンジンの起動段階で renpy.loader.load により各ファイルを 1 MB 単位で読み込む。カテゴリごとに 1 回の予備読み込みの後、5 回計測して中央値を採用
    動画のストリーミング読み込みレイテンシ64 MB の動画について「開いて先頭 64 KB を読み込む」と「ランダムにシークして 64 KB を読み込む」をそれぞれ 200 回計測し、中央値を採用
    スクリプトの読み込み各ビルドで renpy.sh <game> lint を 3 回実行し、中央値を採用。lint はコンテナからすべてのスクリプトを読み込んで解析する
    ビルド時間同じ入力に対して renmori protect を 3 回実行し、中央値を採用
    サイズのオーバーヘッド保護済みビルドと未保護ビルドの game/ ディレクトリのサイズ差。コンテナ、ローダー拡張、スクリプト変換の影響をすべて含む
    チャンクサイズビルドツールの Python で、リファレンスリーダーにより 64 MB のデータを 4 種類のチャンクサイズで読み込み、シーケンシャルスループットとランダム 4 KB 読み込みのレイテンシを計測

    本ページの MB はすべて 220 バイトを指します。

    結果

    エンジン内の読み込みスループット

    単位は MB/s で、値が大きいほど高速です。

    カテゴリファイルサイズ未保護フル保護ベースライン保護
    CG2 MB55901529108
    立ち絵600 KB55851463120
    UI 素材24 KB729567100
    BGM4 MB46081048115
    ボイス60 KB119774997
    動画64 MB38221287112

    ファイルごとの読み込み時間

    単位は ms で、1 つのファイル全体を読み込むのに要する時間です。

    カテゴリファイルサイズ未保護フル保護追加時間
    CG2 MB0.361.31+0.95
    立ち絵600 KB0.110.40+0.30
    UI 素材24 KB0.0320.041+0.009
    BGM4 MB0.873.82+2.95
    ボイス60 KB0.0490.078+0.029

    動画はファイル全体ではなくエンジンによってストリーミングで読み込まれるため、次節のレイテンシを参照してください。

    動画のストリーミング読み込みレイテンシ

    単位は ms で、中央値です。

    計測未保護フル保護ベースライン保護
    開いて先頭 64 KB を読み込む0.0510.0820.596
    ランダムにシークして 64 KB を読み込む0.0350.0861.113

    スクリプトの読み込み

    ビルドlint の所要時間
    未保護0.52 s
    フル保護0.67 s
    ベースライン保護0.58 s

    the_question には 52 個のコンパイル済みスクリプトが含まれており、3 種類のビルドの差はいずれも 0.15 s 以内です。

    ビルド時間とサイズのオーバーヘッド

    保護強度所要時間処理速度game/ のサイズ変化
    ベースライン保護2.52 s126.8 MB/s+0.147%
    フル保護13.41 s23.8 MB/s+0.177%

    ビルド時間は開発者のマシンまたは CI 上でのみ発生し、プレイヤーには影響しません。フル保護はクローズドプラグインが実行し、ビルドごとの構造多態化などの追加処理を含むため、ベースライン保護よりも時間がかかります。

    チャンクサイズ

    以下のデータはビルドツールの Python で cryptography バックエンドを使用して計測したもので、chunk_size 設定のトレードオフを比較するためのものです。エンジン内での絶対的な性能を示すものではありません。

    チャンクサイズシーケンシャルスループットランダム 4 KB 読み込み(中央値)ランダム 4 KB 読み込み(p95)サイズのオーバーヘッド
    16 KB1273 MB/s0.011 ms0.022 ms0.098%
    64 KB(既定)2008 MB/s0.024 ms0.050 ms0.025%
    256 KB2339 MB/s0.077 ms0.124 ms0.006%
    1 MB1461 MB/s0.286 ms0.482 ms0.002%

    チャンクが大きいほどシーケンシャルスループットは向上し、サイズのオーバーヘッドも小さくなりますが、ランダム読み込みのたびに復号するデータ量が増えます。既定の 64 KB は両者のバランスを取った値で、通常は変更する必要はありません。

    結果の解釈

    フル保護はクローズドプラグインが提供するネイティブランタイムを使用し、配布用ビルドの既定値です。ベースライン保護は Python で書かれたリファレンスリーダーを使用し、スループットはフル保護の 1/14〜1/6 程度であるため、プラグインを使用できない場合に限って適しています。詳しくは 保護強度とクローズドプラグイン を参照してください。

    上表の「未保護」の値がメモリコピーに近い速度になっているのは、テスト時にアセットがすでにオペレーティングシステムのページキャッシュ上にあったためです。この条件によりディスク性能の差が除外され、結果は復号そのものの CPU コストのみを反映します。プレイヤーのマシンでは初回の読み込みは通常ディスク速度に制約されるため、保護済みと未保護の相対的な差はその分小さくなります。

    制限事項

    • 実際のプレイ中のフレーム時間は計測していない。本ページのデータはアセットの読み込みと復号のみを対象とし、画像のデコード、音声のデコード、描画は含まない
    • 合成アセットはランダムなバイト列で、エンジンは読み込むのみでデコードしない
    • ページキャッシュが温まった状態でテストしており、コールドスタート時のディスク I/O は含まない
    • テストは 1 台の Apple M1 デバイスのみで行っており、Windows、Linux、Steam Deck でのデータは未計測

    再現方法

    Ren'Py SDK と RenMori のソースリポジトリが必要です。フル保護にはクローズドプラグインが必要で、初回実行時に自動でダウンロードされます。

    git clone https://github.com/MewBaka/RenMori.git
    cd RenMori && pip install -e .
    python tools/benchmark.py --sdk /path/to/renpy-8.5.2-sdk \
        --game /path/to/renpy-8.5.2-sdk/the_question --json result.json
    オプション既定値説明
    --scale1.0ワークロード規模の倍率。1.0 で合成アセット約 310 MB
    --passes5エンジン内でのカテゴリごとの計測回数
    --repeat3protect と lint の繰り返し回数
    --strengthboth作成する保護済みビルド。both、baseline、full から選択
    --jsonなし生の結果と集計結果を指定したファイルに書き込む
    --keepオフ生成されたビルドを確認できるよう作業ディレクトリを残す

    絶対値はデバイスによって異なるため、比較の際は同一デバイス上での 3 種類のビルド間の相対的な結果を基準にしてください。

    © 2026 笨猫工作室 MewBaka Studio. All Rights Reserved.