newsence
邁向二元試行結構之路 1:以太坊二元試行結構的最佳群組深度研究

邁向二元試行結構之路 1:以太坊二元試行結構的最佳群組深度研究

ethresear.ch·17 天前

本研究針對以太坊提議的二元試行結構基準測試了八種群組深度配置,旨在找出讀取與寫入效能之間的最佳平衡點,並發現 GD-5 或 GD-6 提供了最優異的效率。

這篇文章有更好的視覺化呈現方式(包含解釋概念的動態圖表,以及更清晰的基準測試結果視覺化)。如果您偏好該版本,請參閱:Binary Trie Group-Depth Benchmark — Narrower Than Expected


S1 – 執行摘要

二元樹(Binary Trie)已列入 以太坊協議草案(Ethereum protocol strawman),作為未來的狀態樹替代方案。目前尚未有任何二元樹實作在大規模環境下進行過基準測試——無論是群組深度(Group Depth)還是其他指標。隨著這項轉型進入路線圖,評估其性能特性是進行知情原型設計的前置條件。Geth 的實作(EIP-7864)提供了一個 --bintrie.groupdepth 參數,用以控制二元層級如何打包進磁碟節點中;本研究對八種配置進行了基準測試,以確定最佳設置。

核心結論: 最佳平衡點位於 GD-5 或 GD-6,具體取決於工作負載。在寫入方面,GD-5 比 GD-4 高出 7%(6.94 vs 6.47 Mgas/s, p < 1e-9)。GD-6 則在讀取(6.39 Mgas/s)和混合工作負載(比 GD-4 高出 19%, p < 1e-3)中領先。GD-7 證實了性能在超過 GD-6 後會開始下降。

測試內容

在具有約 4 億條狀態條目的相同 360 GB 資料庫上,測試了八種群組深度配置(GD-1 到 GD-8)。包含五種基準測試類型——兩種合成測試(原始 SLOAD/SSTORE)和三種 ERC20 合約工作負載——每種測試在冷快取(cold-cache)協議下運行 9 次。所有結果均使用中位數,並通過 Mann-Whitney U 顯著性檢定。

研究發現

  • 讀取測試證實了直覺(第 4 節):較寬的樹讀取速度更快。GD-8 的讀取吞吐量是 GD-1 的兩倍以上(5.59 vs 2.65 Mgas/s)。GD-6 達到最高讀取吞吐量(6.39 Mgas/s),其次是 GD-5 (6.11) 和 GD-7 (6.04)。GD-3 到 GD-8 的吞吐量範圍在 5.2 到 6.4 Mgas/s 之間。

  • 寫入測試揭示了更明確的最佳解(第 5 節):GD-5 是寫入冠軍,耗時 629 毫秒(6.94 Mgas/s)——比 GD-4(678 毫秒,6.47 Mgas/s)快 7%,比 GD-8(982 毫秒,4.47 Mgas/s)快 55%。寫入性能的拐點位於 GD-5 和 GD-6 之間(雜湊/讀取比率超過 1.0)。

  • 節點大小在 GD-7 觸及 Pebble 區塊邊界(第 5 節):每個 GD-7 節點序列化後約為 4 KB(128 × 32 位元組)——正好是 Pebble 的區塊大小。在此邊界以下(GD-6:約 2 KB),每個節點可容納於一個區塊內。超過此邊界,每次讀取每個節點可能需要兩個區塊。Gary Rong 的 NVMe 基準測試 顯示,在 QD=1 時,隨機 8 KB 讀取的延遲比 4 KB 高出 54%(77.8 vs 50.6 µs)。這種單個節點的 I/O 懲罰在約 37 個路徑節點上累加,解釋了為何 GD-7 雖然路徑較短,但讀取速度卻慢於 GD-6。

  • 最佳平衡點為 GD-5 或 GD-6(第 6 節):GD-5 在寫入上勝過 GD-4 達 7%,而 GD-6 在讀取(比 GD-5 高 5%)和混合工作負載(比 GD-4 高 19%)中領先。GD-7 證實了拐點的存在——在所有基準測試中表現均差於 GD-6。由於以太坊屬於讀取密集型,GD-6 可能是較理想的預設值。

如何閱讀本文

  • 第 2 節(背景)介紹二元樹與群組深度的概念。

  • 第 3 節(方法論)詳述基準測試的設置。

  • 第 4–6 節以敘事方式呈現結果:讀取、寫入,以及兩者間的權衡。

  • 第 7 節(模式)探討跨領域的觀察結果。

  • 第 8 節(結論)提供雙重建議與開放性問題。

時間緊迫?請從第 4 節「ERC20 讀取:深度至關重要之處」開始——該章節最能明顯看出群組深度的差異,並為後續分析奠定基礎。


S2 – 背景

什麼是二元樹(Binary Trie)?

EIP-7864 提議將以太坊的默克爾帕特里夏樹(MPT)替換為二元樹。二元樹將帳戶樹和所有存儲樹統合成單一樹狀結構,使用 SHA-256 代替 Keccak-256 進行雜湊,並存儲對應到 256 個值組的 32 位元組主幹(stems)。這種設計簡化了無狀態客戶端的見證數據(witness)生成,並能實現更高效的證明。

從 MPT 轉向二元樹是以太坊狀態層最重大的變革之一。新結構的性能特性將直接影響區塊處理時間、同步速度和驗證者的經濟效益。

什麼是群組深度(Group Depth)?

在基礎層級上,該樹始終是二元的——每個內部節點正好有兩個子節點(位元 0 為左,位元 1 為右)。群組深度控制有多少個二元層級被打包進單個磁碟節點。在 GD-N 配置下,每個存儲節點封裝了一個 N 層的二元子樹,因此從外部看,它顯得擁有 2^N 個子節點:

  • GD-1: 每個節點 1 個二元層級 → 2 個子節點指標,通往葉節點的路徑上有 256 個節點。

  • GD-2: 每個節點 2 個二元層級 → 4 個子節點指標,路徑上有 128 個節點。

  • GD-3: 每個節點 3 個二元層級 → 8 個子節點指標,路徑上約 86 個節點。

  • GD-4: 每個節點 4 個二元層級 → 16 個子節點指標,路徑上有 64 個節點。

  • GD-5: 每個節點 5 個二元層級 → 32 個子節點指標,路徑上約 52 個節點。

  • GD-6: 每個節點 6 個二元層級 → 64 個子節點指標,路徑上約 43 個節點。

  • GD-7: 每個節點 7 個二元層級 → 128 個子節點指標,路徑上約 37 個節點。

  • GD-8: 每個節點 8 個二元層級 → 256 個子節點指標,路徑上有 32 個節點。

這就像郵遞區號:GD-1 每次讀取地址的一個數字(256 個步驟),而 GD-8 一次讀取 8 個數字(32 個步驟)。較少的步驟意味著較少的磁碟讀取——但每個「打包節點」體積更大,更新成本也更高,因為其內部的二元子樹必須重新計算雜湊。

圖 1 – 不同群組深度的樹形。每個節點內部打包了 N 個二元層級,減少了通往葉節點路徑上的磁碟節點數量。

理論上的權衡很直觀:讀取受益於較淺的樹(到達葉節點所需的磁碟 I/O 次數較少),而寫入則受限於較寬的節點(修改節點時需要更多的內部雜湊運算)。問題在於平衡點究竟在哪裡。


S3 – 方法論

摘要 (點擊查看更多細節)


S4 – 第一幕:讀取測試證實了直覺

ERC20 讀取:深度至關重要之處

ERC20 讀取圖表

GD狀態讀取 (ms)總計 (ms)Mgas/s相較於 GD-1 (Mgas/s)
15,8786,2842.65基準
23,8404,2313.95+49%
32,8663,2135.20+96%
42,6773,0675.46+106%
52,3702,7336.11+131%
62,2482,6236.39+141%
72,3392,6936.04+128%
82,5982,9775.59+111%

從 GD-1 到 GD-6,讀取吞吐量提升了約 2.4 倍。 GD-6 達到最高讀取吞吐量(6.39 Mgas/s),其次是 GD-5 (6.11) 和 GD-7 (6.04)。讀取性能從 GD-1 到 GD-6 單調遞增,隨後開始下降——如預期般,GD-4 (5.46) 因路徑較短而優於 GD-3 (5.20)。GD-7 和 GD-8 則顯示出邊際收益遞減,因為節點過大抵消了路徑縮短的優勢。

為什麼與合成測試有如此巨大的差異?Keccak 會均勻地分散鍵(keys),迫使系統必須從根節點遍歷到葉節點。GD-1 必須下降 256 層;GD-8 僅需 32 層。每一層都是一次潛在的磁碟尋道(disk seek)。隨機存取暴露了完整的深度懲罰。

GD-3(3,213 毫秒,5.20 Mgas/s)和 GD-4(3,067 毫秒,5.46 Mgas/s)在讀取表現上非常接近,GD-4 略微領先,這符合其較短路徑(64 vs ~86 節點)的預期。GD-3 較小的節點序列化大小(約 256 位元組 vs GD-4 的約 512 位元組)與 Pebble 的 4KB 區塊大小產生了良好的交互作用,使得兩者儘管樹形迥異,性能差距卻在 5% 以內。Pebble 區塊大小的交互作用仍值得進一步探索(開放性問題 #3)。

每槽(per-slot)成本:合成讀取成本約為 0.02 毫秒/槽。ERC20 讀取成本約為 0.4–1.0 毫秒/槽(計算方式為 狀態讀取毫秒 / 每個區塊讀取的存儲槽數量)——隨機存取模式帶來了 40 倍的懲罰

這 40 倍的比率與原始 NVMe 測量結果一致:Gary Rong 的磁碟分頁讀取基準測試 顯示隨機 4KB 讀取速度為 77 MB/s,而順序讀取為 3,306 MB/s(43 倍),證實了懲罰主要源於 I/O 存取模式而非 Pebble 的開銷。

為什麼隨機存取是基準而非特例。 二元樹將所有帳戶和存儲統合成單一樹狀結構。每個鍵——無論是帳戶餘額、存儲槽還是程式碼區塊——都會被 SHA256 雜湊到 256 位元的鍵空間中。單個合約的存儲槽會分散在完全不同的樹路徑上。這使得隨機存取成為二元樹的基本存取模式,而非病態案例。合成的順序基準測試代表了一種在統一樹部署中不可能發生的、不切實際的最佳情況。

到目前為止,越寬越好——但有其限度。GD-6 在讀取上領先,GD-7 和 GD-8 則顯示出收益遞減。接著我們測試了寫入。


S5 – 第二幕:寫入測試的驚喜

這是本研究中最重要的發現。

寫入測試圖表

GD狀態讀取樹更新提交 (Commit)總計Mgas/s
1812691771,6452.67
2483393619934.42
3349287447325.95
4313254536786.47
5271242576296.94
6272283766796.41
72643281037455.81
83134331589824.47

樹更新 (trie_updates) = 狀態雜湊毫秒 (AccountHashes + AccountUpdates + StorageUpdates) —— 涵蓋完整的樹變動與重雜湊階段,而不僅僅是雜湊。所有配置均在驗證過的冷快取協議下運行(每次運行間會清除 OS 分頁快取)。第三階段的 Mgas/s 變異係數 (CV) 大多小於 10%,證實了測量的可靠性。

GD-5 是寫入冠軍。 6.94 Mgas/s —— 比 GD-4(6.47 Mgas/s,p < 1e-9)快 7%,比 GD-8(4.47 Mgas/s)快 55%。GD-6(6.41 Mgas/s)排名第三,緊隨 GD-4 之後。GD-7(5.81 Mgas/s)證實了性能拐點在 GD-6 之後持續下降。

各項組成部分的分析說明了原因:

  • 讀取: GD-5(271 毫秒)比 GD-4(313 毫秒)快 13%。GD-6(272 毫秒)與 GD-5 相當,而 GD-7(264 毫秒)是讀取最快的——但為了公平比較,必須將原始毫秒數與 Mgas/s 結合,因為每個區塊的 Gas 可能有所不同。

  • 樹更新: GD-5(242 毫秒)比 GD-4(254 毫秒)低 5%。GD-6 適度上升至 283 毫秒(比 GD-5 高 17%),並未出現舊數據所暗示的劇烈崩跌。GD-7(328 毫秒)和 GD-8(433 毫秒)證實了拐點持續存在。

  • 提交: GD-5(57 毫秒)略高於 GD-4(53 毫秒)。GD-6(76 毫秒,比 GD-5 高 33%)和 GD-7(103 毫秒)顯示出適度增長。真正的提交成本崩跌發生在 GD-8(158 毫秒),這是由於約 8 KB 節點 × 32 個路徑節點 = 每次寫入約 256 KB 的序列化數據。

寫入拐點位於 GD-5 和 GD-6 之間:雜湊/讀取成本比率在 GD-6 處超過 1.0(283/272 = 1.04),這意味著樹更新成本開始超過讀取成本。以 Mgas/s 計算,GD-5 (6.94) 領先 GD-4 (6.47) 達 7%,領先 GD-6 (6.41) 達 8%。

為什麼?內部子樹

群組深度為 g 的每個樹節點都包含一個擁有 2^g - 1 個節點的內部二元子樹,每次寫入時都必須重新計算雜湊。

圖 3 – 每個樹節點包含一個內部二元子樹。較寬的節點意味著每次寫入時雜湊運算呈指數級增長。

  • GD-4 節點: 15 次內部雜湊運算 × 路徑上 64 個節點 = 總計 960 次運算

  • GD-5 節點: 31 次內部雜湊運算 × 路徑上約 52 個節點 = 總計約 1,612 次運算

  • GD-8 節點: 255 次內部雜湊運算 × 路徑上 32 個節點 = 總計 8,160 次運算

GD-5 找到了寫入的最佳平衡點:其路徑比 GD-4 短 19%(約 52 vs 64 節點),且每個節點 31 次內部運算仍處於可控範圍。在 GD-6(每個節點 63 個內部節點)時,重雜湊成本適度上升——283 毫秒 vs GD-5 的 242 毫秒(+17%)。GD-7(328 毫秒雜湊,103 毫秒提交)證實了拐點在 GD-6 之後持續。寫入拐點位於 GD-5 和 GD-6 之間,即雜湊/讀取比率超過 1.0 之處。

註: 17 倍的比率(255 vs 15 次內部雜湊運算)是數據結構的理論上限。我們的基準測試支持這一機制:GD-8 的樹更新成本是 GD-4 的 1.71 倍(433ms vs 254ms),這與隨機寫入僅修改每個節點內部子樹的一部分相符。Geth 的實作是精確重雜湊演算法的權威來源。

節點序列化大小

每個樹節點存儲最多 2^N 個子節點指標(每個 32 位元組)。GD-4 節點:16 × 32 = 約 512 位元組。GD-7 節點:128 × 32 = 約 4 KB —— 正好是 Pebble 的區塊大小。GD-8 節點:256 × 32 = 約 8 KB。大小差異會產生連鎖反應:

  • Pebble 區塊邊界: GD-6 節點(約 2 KB)可容納於單個 4 KB Pebble 區塊中。GD-7 節點(約 4 KB)使區塊飽和——加上鍵的開銷,它們很可能跨越兩個區塊,可能使每個節點獲取的 I/O 翻倍。這部分解釋了 GD-7 讀取性能反轉的原因:儘管路徑節點比 GD-6 少 14%(37 vs 43),GD-7 每次查找總共讀取約 148 KB(37 × 4 KB),而 GD-6 約為 86 KB(43 × 2 KB)。

  • Pebble 快取效率: 在給定的快取預算內,能容納的 GD-8 節點較少。

  • 寫入放大: 較大的序列化節點增加了 LSM 壓縮(compaction)的開銷。

  • 提交成本: 198% 的提交懲罰(158ms vs 53ms)部分反映了每個修改節點序列化的數據量增加了 16 倍。

圖 4 – 對於讀取,僅需考慮向下遍歷(有利於 GD-8)。對於寫入,重雜湊與提交佔主導地位(有利於 GD-4)。讀取 = 僅步驟 1。寫入 = 步驟 1 + 2 + 3。


S6 – 第三幕:權衡

裁決

指標GD-4GD-5GD-6GD-7GD-8
讀取 (Mgas/s)5.466.116.396.045.59
寫入 (Mgas/s)6.476.946.415.814.47
混合 (Mgas/s)5.136.096.275.875.43
類別勝場0/31/32/30/30/3

GD-6 在讀取和混合負載中勝出;GD-5 在寫入中勝出。 GD-5 的寫入領先 GD-4 達 7% (p < 1e-9)。GD-6 的讀取領先 GD-5 達 5%,混合負載領先 GD-4 達 19% (p < 1e-3)。GD-7 已過拐點——在所有三項基準測試中均差於 GD-6。由於以太坊工作負載以讀取為主,GD-6 可能是較理想的預設值,而 GD-5 則最適合寫入密集型場景。

混合工作負載

混合工作負載圖表 1

混合工作負載圖表 2

GD狀態讀取樹更新提交總計 (ms)Mgas/s
14,711345535,3632.18
23,003217443,5183.35
31,981145392,3754.90
41,893138432,3025.13
51,512124481,9106.09
61,440141541,8516.27
71,055218731,5295.87
81,612221872,1455.43

GD-7 混合基準測試中每個區塊處理的交易較少(8.84M vs 約 11.80M gas)。Mgas/s 已針對此差異進行標準化,因此吞吐量比較仍然有效。GD-7 混合測試的原始毫秒值無法與其他配置直接比較。

GD-6 以 6.27 Mgas/s 領先混合工作負載,緊隨其後的是 GD-5(6.09 Mgas/s,+3%)。兩者均優於 GD-4(5.13 Mgas/s)達 19–22%。GD-6 的讀取優勢(1,440 毫秒狀態讀取 vs GD-5 的 1,512 毫秒)超過了其略高的樹更新(141 毫秒 vs 124 毫秒)和提交成本(54 毫秒 vs 48 毫秒)。GD-7 (5.87 Mgas/s) 落後 GD-6 達 6%,證實了拐點的存在。注意:GD-7 混合測試使用 8.84M gas/區塊,而其他測試均為 11.80M;Mgas/s 是有效的比較基準,而非原始毫秒數。

開放性問題: 最佳群組深度最終取決於真實以太坊區塊的讀寫比率。雖然在我們的基準測試中,狀態讀取顯然佔據了區塊處理時間的大部分,但主網的確切分配尚未經過系統性測量。對主網讀寫存取模式的歷史分析將進一步完善此建議。

組成部分分析揭示了熟悉的模式:

  • 讀取: GD-7 擁有最低的原始讀取時間(1,055 毫秒),但其 gas/區塊也較低。以 Mgas/s 計算,GD-6 (6.27) 領先。GD-5 (1,512 毫秒) 和 GD-6 (1,440 毫秒) 在讀取上均優於 GD-4 (1,893 毫秒)。

  • 樹更新: GD-5 領先 (124 毫秒),其次是 GD-4 (138 毫秒) 和 GD-6 (141 毫秒)。GD-7 (218 毫秒) 和 GD-8 (221 毫秒) 則因較大的內部子樹而落後。

  • 提交: GD-3 勝出 (39 毫秒),GD-4 (43 毫秒) 和 GD-5 (48 毫秒) 緊隨其後。GD-7 (73 毫秒) 和 GD-8 (87 毫秒) 顯示出較寬節點帶來的序列化懲罰。


S7 – 跨領域模式

時間花在哪裡?

時間分配圖表 1

時間分配圖表 2

在所有群組深度配置中,狀態讀取佔據了 ERC20 區塊處理時間的大部分,比例達 50–85%。樹更新和提交成本在純讀取基準測試(balanceOf)中微不足道,但在寫入(approve)中成為主要的成本組成部分——特別是在較高的群組深度下,內部子樹的重雜湊最為昂貴。

整體吞吐量

整體吞吐量圖表

硬體背景:NVMe I/O 特性

Gary Rong 在 NVMe (Samsung 990 Pro) 上進行的 磁碟分頁讀取基準測試 為解釋我們的結果提供了硬體背景:

  • 隨機 vs 順序: 4KB 隨機讀取 = 77 MB/s (50.6 µs) vs 3,306 MB/s 順序讀取 —— 43 倍的差距與我們 40 倍的每槽懲罰密切吻合。

  • 分頁大小至關重要: 隨機 16KB 讀取的吞吐量是 4KB 的 2.3 倍 (174 vs 77 MB/s),而延遲僅增加 1.8 倍。較寬的群組深度會產生較大的節點,這可能從較大的 Pebble 區塊大小中受益。

  • 隊列深度(Queue Depth)具有變革性: 從 QD=1 到 QD=8,隨機 4KB 吞吐量提高了 8.7 倍 (77 到 673 MB/s)。並行 EVM 可以釋放此潛力,縮小不同配置間的讀取延遲差異。

  • 次線性延遲增長: 從 4KB 到 64KB = 16 倍的數據量,但延遲僅增加 2.3 倍 (50.6 到 117.3 µs)。NVMe 的內部並行性意味著較大的 I/O 請求具有不成比例的高效率。

這些測量使用了繞過檔案系統快取的直接分頁讀取——類似於我們的冷快取協議。基準測試硬體 (Samsung 990 Pro) 與我們 QEMU 虛擬機器的虛擬磁碟不同,因此絕對數值不會完全匹配,但其比率揭示了與群組深度優化相關的基礎 NVMe 特性。


S8 – 結論

建議:GD-5 或 GD-6(取決於工作負載)

最佳深度為 GD-5 或 GD-6,具體取決於工作負載概況:

  • 讀取密集型 / 混合工作負載(預設建議):GD-6。 讀取性能比 GD-5 高 5% (6.39 vs 6.11 Mgas/s),混合負載高 3% (6.27 vs 6.09 Mgas/s)。由於以太坊以讀取為主,GD-6 是首選的預設值。

  • 寫入密集型工作負載:GD-5。 寫入性能比 GD-4 高 7% (6.94 vs 6.47 Mgas/s),比 GD-6 高 8% (6.94 vs 6.41 Mgas/s)。

  • GD-7 證實了拐點。 在所有三項基準測試中均差於 GD-6(讀取 -5%,寫入 -9%,混合 -6%),驗證了最佳平衡點在 GD-5 或 GD-6。

此建議基於控制二元樹中每次狀態存取的三步機制:

  • 遍歷 (Traverse) —— 從根節點下降到葉節點。成本與樹深度成正比。有利於較寬的樹(GD-8: 32 層 vs GD-5: ~52 層 vs GD-4: 64 層)。

  • 重雜湊 (Rehash) —— 重新計算路徑上每個節點返回根節點的內部子樹。成本與每個節點的 2^g - 1 成正比。有利於較窄的樹(GD-4: 15 次運算/節點,GD-5: 31 次運算/節點,GD-8: 255 次運算/節點)。

  • 提交 (Commit) —— 序列化修改後的節點並寫入磁碟。成本與節點大小成正比。有利於較窄的樹。

GD-5 在寫入的「遍歷 x 重雜湊」權衡中找到了最小值。其路徑比 GD-4 短 19%(約 52 vs 64 節點),且每個節點 31 次內部運算仍可接受。在 GD-6 時,重雜湊成本適度上升——283 毫秒 vs GD-5 的 242 毫秒(+17%)——但讀取和混合工作負載仍有改善。寫入特定的拐點位於 GD-5 和 GD-6 之間(雜湊/讀取比率超過 1.0),而讀取性能則在 GD-6 達到峰值。

跨越所有群組深度的五種模式

模式 1:狀態讀取佔主導地位。 無論群組深度或基準測試類型為何,50–85% 的區塊處理時間都花在從磁碟讀取狀態。state_read_ms 包含統一樹中的帳戶和程式碼查找,而不僅僅是存儲槽讀取。

模式 2:隨機存取每槽成本高出約 40 倍。 使用 Keccak 雜湊的鍵(ERC20)成本為 0.4–1.0 毫秒/槽,而順序存取(合成)僅為 0.02 毫秒/槽。此差距是由於 Keccak 分散的鍵導致 Pebble 區塊快取未命中。獨立的 NVMe 分頁讀取基準測試證實,隨機與順序 I/O 幾乎解釋了所有這項懲罰(詳見第 7 節硬體背景)。

模式 3:快取命中率停留在約 37–39%。 儘管增加了群組深度,Keccak 雜湊工作負載的存儲快取命中率從未超過約 39%。256 位元的鍵空間過於稀疏,除了共享的高層樹節點外,無法實現有意義的快取重用。

模式 4:樹更新對讀取微不足道,對寫入則佔主導。 balanceOf(純讀取):樹更新 < 1.3 毫秒。approve(讀取 + 寫入):樹更新最高達 691 毫秒 (GD-1)。這種不對稱性意味著節點寬度的權衡僅對寫入工作負載有影響。

模式 5:Mgas/s 的運行變異係數 (CV) 大多小於 10%。 第三階段驗證過的冷快取清除(120+ 次成功,0 次失敗)在所有八種配置中產生了可重複的結果。相較於早期階段的改進,驗證了冷快取方法論的有效性。

開放性問題

  • Pebble 區塊大小的交互作用。 所有測試均使用 4KB 區塊。NVMe 分頁讀取基準測試顯示,隨機 16KB 讀取的吞吐量是 4KB 的 2.3 倍 (174 vs 77 MB/s),而延遲僅增加 1.8 倍 (89.7 vs 50.6 µs)。較大的 Pebble 區塊可能會顯著受益於序列化節點超過 4KB 的較寬群組深度。

  • 並行區塊處理。 這些基準測試是按順序處理區塊的。並行執行引擎可能會將樹更新分攤到多個核心,從而減輕較寬群組深度的單個節點重雜湊懲罰。NVMe 隊列深度基準測試顯示,QD=8 的隨機 4KB 吞吐量比 QD=1 提高 8.7 倍 (673 vs 77 MB/s)。如果並行執行增加了有效的 I/O 隊列深度,不同群組深度間的讀取延遲差異可能會顯著縮小。


基準測試運行於 Ethereum execution-specs 框架。方法論、原始數據和可重複性腳本可在 execution-specs 儲存庫 中取得。

        1 則貼文 - 1 位參與者

        [閱讀完整主題](https://ethresear.ch/t/the-path-towards-binary-tries-1-optimal-group-depth-for-ethereums-binary-trie/24455)
https://ethresear.ch/t/the-path-towards-binary-tries-1-optimal-group-depth-for-ethereums-binary-trie/24455