What Is Runtime Benchmarking?
默認的 Substrate 區塊生產系統以一致的時間間隔生產區塊,這就是所謂的目標區塊時間,鑒于此要求,基于 Substrate 的區塊鏈的每個區塊只能執行有限數量的extrinsics,執行外部函式所需的時間可能因計算復雜性、存盤復雜性、使用的硬體和許多其他因素而異,我們使用稱為weight的通用度量來表示一個區塊中可以容納多少extrinsics,這將在交易權重部分進一步解釋,
在 Substrate 中,10^12 Weight = 1 Second,即 1,000 weight = 1 納秒,這是在特定的參考硬體上測量[1],
由于此類程序會引入大量開銷,因此Substrate不使用類似于“gas metering”的機制進行extrinsic測量,相反,Substrate 期望使用benchmarking為執行extrinsic的最壞情況提供近似的最大值,假設采用了這種最壞情況下的路徑,Substrate 將向用戶收費,并且如果extrinsic需要更少的資源,則可以退還一些預估的weight和fees,這在交易費用一章中有進一步的解釋 ,
那么我們如何確定最壞情況下的計算時間和extrinsics的權重呢( computation time and weight of our extrinsics )?
這就是 Substrate Runtime Benchmarking 的產生的原因,它有一組工具來幫助確定運行時extrinsic的權重,它在運行時環境中多次執行pallet中的extrinsics,并跟蹤執行時間,
總的來說,它:
- 從你的pallets中設定和執行extrinsics,
- 使用這些不同的輸入捕獲這些基準測驗的原始資料,包括執行了多少資料庫讀取和寫入,
- 使用線性回歸分析來確定計算時間和外部輸入之間的關系,
- 輸出帶有隨時可用的weight函式的 Rust 檔案,這些函式可以輕松集成到您的runtime中,
Why Benchmark a Runtime Pallet?
拒絕服務(DoS)是分布式系統的一種常見的攻擊向量,包括blockchain網路,這種攻擊的一個簡單例子是用戶重復執行一個涉及大量計算的extrinsic,為了防止用戶在網路上發垃圾郵件,我們對用戶中心該呼叫收取費用,呼叫的成本應該反映系統發生的計算和存盤成本,呼叫越復雜,我們收取的費用就越多,不過,我們還是希望鼓勵用戶使用我們的區塊鏈系統,所以我們也希望這個估算成本相對準確,這樣我們就不會向用戶收取超出必要的費用,
有了Substrate的benchmarking框架,運行時開發人員可以估計extrinsics的權重,并向終端用戶收取適當的交易費用,因此,對我們的運行時外部函式進行基準測驗是非常關鍵的,以測量外部計算是如何隨輸入而變化的,并為這些外部函式設定適當的權重函式,設定適當的權值函式,準確反映底層的計算和存盤是Substrate的安全的重要保障,
相關內容:
https://substrate.dev/docs/en/knowledgebase/runtime/benchmarking
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/290508.html
標籤:區塊鏈
