2

実行時間の測定は、パフォーマンス評価の重要な側面です。ここで、SGX エンクレーブ (信頼できる実行環境) 内のいくつかのコードのパフォーマンスを評価したいと考えています。Intel SGX は、開発者が信頼できるソースから現在の時刻を取得するための「sgx_get_trusted_time()」という API を提供していることに気付きました。ただし、ここで問題が発生しました:

1) 「sgx_get_trusted_time()」を使用する前に「sgx_create_pse_session()」が必要ですが、常に「SGX_ERROR_SERVICE_UNAVAILABLE」というエラーが発生します。SGX SDK と PSW を正しくインストールして構成しました (そうしないと、リモート認証サービスを使用できません)。また、開発プラットフォーム (Win10 + ThinkPad x270 + CORE i5) の Management Engine を更新しようとしましたが、うまくいきませんでした。

2) API は時間を秒単位で返します。これは、特に 2 つの API 呼び出しの間の時間が些細な場合に、パフォーマンス評価の点で正確とはほど遠いものです。

最初の問題を解決するにはどうすればよいですか?また、エンクレーブ内で経過した時間をより正確に測定するための解決策はありますか? 提案やヒントに感謝します。

4

1 に答える 1

0

エンクレーブ内での実行時間の測定は、少し難しい場合があります。私が考えることができる解決策は 2 つあります。アプリケーションの性質に応じて、それぞれに長所と短所があります。

ECALLOCALLを使用して、信頼できないコードの実行時間を測定します。

(実行時間を測定することによって) パフォーマンスを評価する関数を実行する前に、信頼できないコードでタイマーを開始します。

タイマーは次のいずれかで開始できます。

  1. 信頼されていないコードが信頼されているコードのメイン関数を呼び出す前 (その実行時間を測定する必要があります)。信頼できないコードでタイマーを開始し、信頼できる関数 ( ECALL ) を呼び出します。ECALL関数が実行を終了したら、信頼できないコードでタイマーを停止します。
  2. 信頼できないコードの実行中。信頼されたコードによって呼び出されたOCALLを使用してタイマーを開始し、信頼されたコードによって呼び出された別のOCALLによってタイマーを停止します。信頼できない呼び出しは、これらのOCALLを処理し、それに応じてタイマーを開始/停止する必要があります。

信頼できるコードの実行時間を測定する部分 (関数または複数の関数) に応じて、上記のソリューションのいずれかが機能するはずです。留意すべきもう 1 つの点は、複数の関数の実行時間を追跡するために、信頼できないコードにベクトルを含めることができるということです。コードの実行が終了したら、ベクターアイテムを出力したり、それらに対していくつかの計算を実行したりすることもできます。

実行するECALLOCALLが多すぎると、少しコストがかかる可能性があります。ECALLOCALLの時間を単独で測定して全体の実行時間から差し引くか、以下の解決策を確認することができます。

HotCalls を使用して、信頼できないコードの実行時間を測定します。

HotCallは、エンクレーブとのより高速なインターフェイスを提供します。この作業は、 HotCalls を使用した失われたサイクルの回復: SGX セキュア エンクレーブの高速インターフェイスで Ofir Weisse によって公開されました。

コードは Ofir のリポジトリにあります。彼のサンプル コードでは、実行時間を測定しました。したがって、彼のサンプル コードはあなたの場合に非常に役立ちます。

于 2020-07-09T00:05:13.853 に答える