5

EPC メモリよりも大きなプログラムをエンクレーブにロードすることはできますか? 理論上は許される気がする

  • OSはページを自由にスワップアウトできます
  • EEXTENDエンクレーブを 256 バイト単位で増分的に測定します

したがって、理論的には、EPC メモリの 1 ページのみを使用して大きなプログラムをロードすることが可能と思われます。

  1. EPC ページに 4K バイトをロードする
  2. 読み込まれたページを測定する
  3. ロードされたページを追い出す
  4. 次の 4K バイトを (1) と同じ EPC ページにロードする

私は理論的に正しく理解していますか?実際には、大きなプログラムをロードするとすぐにエラーが発生しました。

4

2 に答える 2

4

Intel フォーラムで同様の質問をしました。要約 [1] は役に立ちます。

簡単な答え: いいえ、現時点では EPC より大きいエンクレーブをロードすることはできません。

現在、ページング サポートの欠如 (および v2 が提供する動的ページ割り当ての欠如) により、これは、同時にロードされるすべてのエンクレーブの合計 HeapMaxSize が前述の ~90MB を超えることができないことを意味します。[1]

長い答え: SGX には、動的メモリ管理の 2 つのメカニズムがあります。

  1. エンクレーブは EAUG を介して追加のページを要求できます。これは、現在ハードウェアが利用できない SGXv2 でのみサポートされています。
  2. 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 を超えると、シミュレーション エラーが発生します

于 2016-03-23T10:11:53.373 に答える