簡體   English   中英

如何捕獲飛地內的持續時間?

[英]How to capture the time duration inside an enclave?

測量運行時間是性能評估的一個重要方面。 現在我想評估 SGX enclave(可信執行環境)內的幾個代碼的性能,我注意到英特爾 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)更新管理引擎,但沒有成功;

2) API 以秒為單位返回時間,這在性能評估方面遠非精確,尤其是當兩次 API 調用之間經過的時間是微不足道的時候。

我怎樣才能解決第一個問題,以及更精確地測量飛地內經過的時間的任何解決方案? 感謝任何建議或提示。

測量飛地內的執行時間可能有點棘手。 我可以考慮兩種解決方案,每種解決方案都有自己的優缺點,具體取決於您的應用程序的性質。

使用ECALLOCALL測量不受信任代碼中的執行時間。

在運行您希望評估其性能(通過測量其執行時間)的 function 之前,請在不受信任的代碼上啟動計時器。

計時器可以啟動:

  1. 在不受信任的代碼調用受信任代碼中的主要 function 之前(您要測量其執行時間)。 在不受信任的代碼上啟動計時器,調用受信任的 function ( ECALL ),當ECALL function 執行完畢后,在不受信任的代碼上停止計時器。
  2. 當不受信任的代碼正在運行時。 使用受信任代碼調用的OCALL啟動計時器,並通過受信任代碼調用的另一個OCALL停止計時器。 不受信任的調用應處理這些OCALL並相應地啟動/停止計時器。

根據您想要測量其執行時間的可信代碼的哪一部分(函數或多個函數),上述解決方案之一應該可以工作。 要記住的另一件事是,您可以在不受信任的代碼中使用向量來跟蹤多個函數的執行時間。 一旦您的代碼完成執行,您就可以打印矢量項,甚至可以對它們執行一些計算。

如果您執行過多的ECALLOCALL ,它們的成本可能會有點高。 您可以單獨測量ECALLOCALL時間並將它們從總體執行時間中減去,或者您可以檢查下面的解決方案。

使用 HotCalls 測量不受信任代碼中的執行時間。

HotCall提供了與 enclave 的更快接口。 這項工作由 Ofir Weisse 在Regaining Lost Cycles with HotCalls: A Fast Interface for SGX Secure Enclaves中發表。

該代碼可以在 Ofir 的存儲庫中找到。 在他的示例代碼中,他確實測量了執行時間; 因此,他的示例代碼對您的情況非常有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM