端到端的基准测试框架 Base Benchmark

Base 构建了一个端到端的基准测试框架 Base Benchmark,用于在真实条件下测试以太坊客户端性能,以安全地扩展 Base 链。这些基准测试帮助识别瓶颈,验证硬件配置,并确保 Base 能够继续可靠地扩展,同时保持亚美分、亚秒级的交易。

TL;DR: 为了安全地扩展 Base Chain,我们构建了一个端到端的基准测试框架,以在真实条件下测试以太坊客户端的性能。这些基准测试帮助我们识别瓶颈,验证硬件配置,并确保 Base 能够在保持亚美分、亚秒级交易的同时,继续可靠地扩展。

随着 Base 的增长,我们看到比以往任何时候都多的链上活动,本周记录了创纪录的 1540 万笔以上的交易。为了满足不断增长的需求,我们正在大力投资于扩展工作:例如,仅在本月,我们就将 Base Chain 的容量翻了一番

为了安全地扩展,我们必须 提前 预测可能出现的任何性能挑战,以便我们能够在没有瓶颈的情况下继续增长。为了实现这一目标,我们构建了 Base Benchmark:一种新的以太坊 L2 基准测试工具,它模拟在更高负载下运行链,以识别执行客户端中的瓶颈。

我们为什么要构建 Base Benchmark?

我们今天面临的最大扩展挑战是执行速度。许多变量会影响执行速度,例如机器大小、可用缓存和客户端实现。此外,交易模式在不同区块之间差异很大,因此,一种适用于 CPU 密集型工作负载的硬件设置,可能不适用于存储密集型工作负载。此外,不同的预编译、存储操作和交易类型会导致客户端之间的性能变化。

当我们增加 Base Chain 的 gas limit 时,我们需要确保网络继续平稳运行,并且每个人的交易都能快速处理。这意味着确保我们计划扩展到的 gas limit 对于所有流量类型和模式都是安全的,并且我们对节点的推荐硬件配置有充分的了解。随着我们的扩展,链必须能够抵御垃圾邮件和其他资源密集型交易。

我们需要一种方法来测试各种条件下的最坏情况区块。不幸的是,测试网不足以模拟最坏情况,因为状态大小(部署在区块链上的所有帐户/合约数据的大小)对存储性能有很大影响,而测试网通常不具有与主网相同的状态大小。

我们考虑了各种替代方案,但没有一个能提供我们在区块链性能测试工具中想要的自动化和灵活性。

  • Spamoor, contender, tx-fuzz: 这些工具允许生成交易工作负载,但不处理设置网络和收集指标。我们设计 Base Benchmark 以允许将这些作为外部交易生成器运行。

  • Kurtosis: 这会设置一个 L1 区块链来运行针对它的交易垃圾邮件发送者,但我们需要一种自动化和轻量级的机制来快速设置和拆卸数百个测试链。

  • Bloatnet: 这是一个具有大量状态的公共测试网络,允许更准确地测试存储操作码。但是,我们希望使用实际的 Base Mainnet 快照进行测试。截至本文发布时,结果尚未准备好。

由于没有现有工具能够满足所有使我们能够安全有效地扩展的需求,因此我们构建了自己的工具。

Base Benchmark

Base Benchmark 是我们用于测试以太坊客户端针对各种交易工作负载的性能的工具。

借助 Base Benchmark,用户可以定义要运行的基准测试套件。我们允许测试各种 gas 目标、交易负载、客户端和调整选项。这些的每个组合都会运行一个区块构建器,该构建器接受来自 RPC 的交易并使用引擎 API 构建区块,以及一个验证器,该验证器接受构建的区块并将它们应用于链状态。

重要的是,Base Benchmark 还支持从快照运行基准测试,在现有链(如 Base Mainnet)之上构建区块。这使我们能够快速针对具有较大状态大小的数据库测试存储操作。

Base Benchmark 可帮助客户端开发人员和任何运行 L2 节点的人员衡量性能。它可以回答以下问题:

  • 排序器构建区块的速度有多快?

  • 验证器验证这些区块的速度有多快?

  • 我们证明一个区块的执行速度有多快?

  • Reth 中最慢的预编译/操作码是什么?

  • 在进行特定优化后,我将看到多少性能提升?

让我们看一下 Base Benchmark 可以用来衡量和比较客户端性能的一些方法。

用例 1:比较以太坊客户端的性能

Base 正在从主要运行 Geth 过渡到主要运行 Reth。与 Geth 不同,Reth 分阶段同步区块,并存储更少的数据,这使其在许多情况下更快。

为了比较客户端速度,我们使用一个没有状态的链,并模拟 Base 主网的操作码和存储分布,在不同的云实例类型上运行了一个简单的基准测试。基准测试工具将为参数的每个组合运行一个基准测试。这旨在作为近似模拟,而不是准确的比较。下面显示了一个交易负载的结果。

post image结果链接

结果页面是了解整体性能并注意任何需要深入调查的问题的一个很好的起点。

对于每个测试用例,基准测试工具首先通过将交易发送到排序器来构建区块。我们测量排序器接受传入交易的速度有多快。在达到某个 gas limit 后,排序器停止接受交易并构建较小的区块。这有助于我们了解在非常接近我们在 Basic Mainnet 上看到的情况下的排序器的限制。

在对区块进行排序后,通过将区块发送到单独的验证器节点来测试区块的同步速度。验证器节点必须执行区块的工作,但可以跳过排序器已经完成的 mempool 工作。这有助于我们测试排序器以外的外部节点处理交易的速度有多快。我们在大型服务器上运行排序器,以便能够处理排序工作负载,但我们不希望每个人都在如此大型的服务器上运行 Base。

💡 此测试对于确保我们能够准确测量 Base 团队以外的团队运行的验证器节点的限制来扩展至关重要。

在这个测试中,Reth 的表现优于 Geth。我们使用的实际基准测试更复杂,并且仍在开发中,但这表明该工具如何用于比较以太坊 L2 客户端实现。

用例 2:比较机器实例类型

我们经常收到的另一个问题是:我的验证器节点的最佳节点配置是什么?Base Benchmark 通过提供一致的工作负载来针对其进行基准测试,从而帮助回答这个问题。

对于此测试,我们针对两种不同的实例类型运行了我们的测试套件:AWS i7ie.48xlarge 和 GCP z3-highmem-88-highlssd。我们可以轻松地比较每个实例的指标。

同样,此基准测试运行不一定表示实际性能,但为调查客户端中的性能问题提供了一个良好的相对测试设置。

post image结果链接

上面显示的指标页面允许比较每个测试设置的逐块性能。这使得节点提供商可以在切换之前测试各种节点大小的性能,并且还使我们能够确保 gas limit 的增加在各种客户端和配置中都是安全的。此页面还包括分解每个区块处理阶段所花费时间的指标。

用例 3:调整节点参数,如缓存大小

最后,我们可以使用此工具来测试代码和参数更改对性能的影响。例如,我们可以测试 Reth,其中 SAFE_NO_SYNC 标志位于 MDBX 上,这消除了提交到磁盘的需要,以换取如果程序崩溃可能会丢失一些交易。

post image结果链接

此测试的结果表明 Reth 中的 DURABLE 和 SAFE_NO_SYNC 选项之间的差异微不足道。这意味着在 Reth 中打开 SAFE_NO_SYNC 选项可能没有太大的好处。

此运行表明基准测试工具如何有助于测试新的客户端功能。Reth 最近添加了并行状态根计算,这可能值得与单线程计算进行比较。Base Benchmark 应该使客户端开发人员更容易推动性能发展。

这些测试的所有配置和结果都可以在此链接中找到。

以太坊如何通过识别 DoS 风险来更快地扩展

从长远来看,扩展的关键在于以更少的投入做更多的事情。通过降低诸如 DoS 漏洞之类的风险,某些 EIP 之类的更新可以释放更高的扩展上限,从而允许网络更快地增长并为更多用户提供服务。

例如,在 Dencun 硬分叉中,一项更改减少了由 SELFDESTRUCT 操作码触发的慢速数据库操作的可能性。通过降低操作码的性能负担,以太坊消除了因扩展而恶化的安全风险。新的 Base Benchmark 工具旨在发现此类瓶颈,以便我们能够先于解决它们,以继续安全地扩展 Base。

帮助以太坊变得更快

我们希望通过 Base Benchmark 拥有一套标准的基准测试,我们可以为任何客户端运行这些基准测试来评估扩展限制。你可以立即下载并运行 Base Benchmark,方法是按照 repo 中的说明进行操作。

对于运行 Base 的节点提供商,我们建议遵循我们的推荐硬件规范以及 base/node repo 中提供的配置。我们鼓励你使用 Base Benchmark 工具尝试不同的硬件规范和配置来衡量性能。我们希望我们可以合作改进节点配置,以便每个人都可以从性能调整改进中受益。

如果你是客户端开发人员,我们强烈建议在 Base Benchmark 中实现客户端,以将其包含在我们的测试套件中。这将有助于比较不同交易类型与其他的客户端的性能,以查找性能回归或优化机会。实现后,客户端将显示在我们的公共测试页面上。

欢迎其他任何人贡献可以测试的交易负载、受支持的节点和配置以及要收集的指标。尽管我们目前开箱即用地支持 Geth 和 Reth,但我们很乐意将支持扩展到其他客户端,例如 Nethermind 和 Erigon。

作为在开放环境中构建的一部分,我们计划公开我们的基准测试结果,并将其作为我们扩展旅程和过程的一部分进行分享。目前,我们的公共测试页面显示了在没有现有状态的 devnet 运行中的结果。我们将很快扩展此功能,以包括在 Base Mainnet 状态下运行的结果。


如果你有兴趣帮助我们建立一个可以提高创新、创造力和自由的全球经济,我们正在招聘

在社交媒体上关注我们以了解最新信息:X (X 上的 Base 团队) | Base App | Discord

  • 原文链接: blog.base.dev/scaling-ba...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
Base 中文
Base 中文
江湖只有他的大名,没有他的介绍。