[英]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 調用之間經過的時間是微不足道的時候。
我怎樣才能解決第一個問題,以及更精確地測量飛地內經過的時間的任何解決方案? 感謝任何建議或提示。
測量飛地內的執行時間可能有點棘手。 我可以考慮兩種解決方案,每種解決方案都有自己的優缺點,具體取決於您的應用程序的性質。
使用ECALL和OCALL測量不受信任代碼中的執行時間。
在運行您希望評估其性能(通過測量其執行時間)的 function 之前,請在不受信任的代碼上啟動計時器。
計時器可以啟動:
根據您想要測量其執行時間的可信代碼的哪一部分(函數或多個函數),上述解決方案之一應該可以工作。 要記住的另一件事是,您可以在不受信任的代碼中使用向量來跟蹤多個函數的執行時間。 一旦您的代碼完成執行,您就可以打印矢量項,甚至可以對它們執行一些計算。
如果您執行過多的ECALL和OCALL ,它們的成本可能會有點高。 您可以單獨測量ECALL和OCALL時間並將它們從總體執行時間中減去,或者您可以檢查下面的解決方案。
使用 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.