Intel フォーラムで同様の質問をしました。要約 [1] は役に立ちます。
簡単な答え: いいえ、現時点では EPC より大きいエンクレーブをロードすることはできません。
現在、ページング サポートの欠如 (および v2 が提供する動的ページ割り当ての欠如) により、これは、同時にロードされるすべてのエンクレーブの合計 HeapMaxSize が前述の ~90MB を超えることができないことを意味します。[1]
長い答え: SGX には、動的メモリ管理の 2 つのメカニズムがあります。
- エンクレーブは EAUG を介して追加のページを要求できます。これは、現在ハードウェアが利用できない SGXv2 でのみサポートされています。
- OS は EPC ページを通常の RAM (EWB/ELD 命令) にスワップアウトできますが、Windows は現在これをサポートしていません
では、なぜ EPC より大きいエンクレーブをロードできないのでしょうか?
- 現在のシステムでは、EPC サイズは約 90MB に制限されています。
- Windows は現在、これらのページのスワップ アウトをサポートしていません
- エンクレーブは、SGXv1 ハードウェアで (EINIT) を実行する前に、使用するすべてのページを要求する必要があります。
- すべてのエンクレーブのサイズが EPC サイズを超えてはなりません
- Intel は、管理エンクレーブ (エンクレーブの見積もり、プロビジョニング、ロード) 用に EPC スペースを確保しています。
したがって、エンクレーブは、現在のハードウェアで 90MB をはるかに下回るヒープ サイズを使用する必要があります。SDK エミュレーションを試してみたところ、ヒープの最大サイズはおよそ 1GiB [2] であることがわかりました。将来の OS バージョンでは、EPC ページ スワッピングがサポートされ、より大きな静的エンクレーブ サイズが可能になることが期待されます。将来の SGX ハードウェアでは、動的なページ割り当てが可能になり、動的なエンクレーブ サイズが可能になります。
[1] https://software.intel.com/en-us/forums/intel-isa-extensions/topic/607004#comment-1857071
[2] 1GiB - 64KiB - TCSnum * 128KiB、TCSnum はスレッド数です。この HeapMaxSize を超えると、シミュレーション エラーが発生します