本文介绍了 revmc
的开发背景、工作原理和性能测试,重点强调了将 EVM 字节码编译为本地代码的优势,能显著提高执行速度。文章还展望了 revmc
在 L2 环境中的应用前景,并提出了一些未来的发展计划,包括更多的优化和测试。
我们最近发布了 Reth 的高性能路线图,号召在 EVM 区块链中更广泛使用“每秒 gas”作为性能指标,并详细说明我们将区块链扩展到每秒 1 千兆 gas 及以上的计划,相比以太坊的现状提高了 1000 倍。
今天,我们很高兴地开源 revmc
,一个将 EVM 字节码降级为本地代码的编译器,在各种现实 EVM 基准测试中显示了 1.85 倍到 19 倍的改进。我们还 集成了 revmc
到 Reth 中并成功同步了链。接下来,我们将集成 revmc
到 OP Reth 中以用作 L2,在计算密集型工作负载中它的改进将更加明显。
Revmc 已经过广泛测试,并将进一步精细化以便于生产使用。代码在 github.com/paradigmxyz/revmc 下以 Apache/MIT 许可证开源。
开发 revmc 的动机在于提升 EVM 的性能,由于字节码解释的固有限制。传统的 EVM 执行涉及通过解释器顺序处理指令,这引入了显著的开销和延迟,因为指令并不是以本地汇编代码执行的。通过将 EVM 字节码编译成优化后的本地机器代码,编译器使得可以在硬件上直接执行,从而大幅减少与虚拟机层相关的开销。
此外,提前编译字节码 (AOT) 而非在执行时即时编译 (JIT) 缓解了与 JIT 编译相关的安全风险,例如潜在的恶意代码漏洞,用于利用 JIT 过程。AOT 方法允许将最高需求的合约预编译并安全存储,确保区块链高效运行而不牺牲安全性。
这些理念在加密领域之外存在已久,例如 Java 或 WASM 的 JIT 编译器,而在加密领域中也存在于 EVM 和其他 运行时 中。我们预计每个区块链的运行时都会有其运行时的编译本地汇编版本,以提供更高的性能。
Revmc 的功能是将 EVM 字节码(在以太坊虚拟机中执行的指令集)编译为本地机器代码,主机系统的处理器可以直接执行。
此过程分为两个关键步骤:
inkwell
crate 调用 LLVM,传递优化后的 IR,然后我们的工作基本完成。LLVM 将生成适合主机系统特定架构的相应本地机器代码。此步骤至关重要,因为它决定了生成的可执行代码的效率。编译器能够以阻塞或后台方式工作。当在热路径中运行时,编译器应在后台运行,以确保在运行时不会影响系统性能,一旦编译完成,它可以将解释执行热替换为本地执行。对于基准测试,最好先以阻塞模式编译所有合约,然后再针对工作负载进行测试。
编译完成后,本地代码可以存储在磁盘上。这确保在节点重新启动时不会浪费多余的时间重新编译合约,并且还允许节点操作员仅运行他们信任的合约,这些合约是提前编译的,而不是允许任何合约在运行时被编译。
Revmc
通过 Reth SDK 的 NodeBuilder API 集成到 Reth 中,允许节点操作员通过 --experimental.compiler
标志选择运行本地代码。我们提供了关于如何 将字节码编译 成本地代码的示例,以及如何将其集成到 revm 的 EVM Builder 中。我们已同步了启用 revmc
的节点,并成功验证了截至 2024 年 6 月 20 日的状态根。
我们定义了 criterion 基准测试,针对一些简单的工作负载,下面是我们的结果:
Fibonacci 展示了 19 倍的改进,这代表了计算密集型工作负载。LLVM 在这里特别令人印象深刻,因为它可以自动矢量化指令,并利用其自身的本地 U256 类型,其速度比 ruint 更快。不幸的是,LLVM 在优化除法方面并不出色,因此在此类或类似操作中重量型的代码可能无法获得如此大的收益。
WETH 和 Counter 是我们在区块链中常见的工作负载,首先你从主机(例如数据库)读取数据,然后进行一些简单的数学运算,最后将数据写回主机。由于主机操作无法通过字节码编译器加速,1.85x-2.77x 的改进算是相当不错了!
我们 集成并基准测试了 revmc
在以太坊 L1 的 Reth 执行阶段(使用 reth stage run execution
),这是我们历史同步的 主要组件。由于 L1 上大多数历史同步的工作负载并不计算密集,因此我们看到的结果不够出色,O(1-10%),具体取决于区块范围。
我们认为 revmc
将在计算密集型工作负载的高性能 L2 上真正闪耀,例如 Base 或 OP Mainnet。为此,我们将在即将发布的 Reth AlphaNet 中推出 revmc
。
在路线图方面,我们希望做以下几件事:
在此之前,请查看我们在 Github 上的实现。如果你对与我们合作感兴趣,请联系 georgios@paradigm.xyz。
- 原文链接: paradigm.xyz/2024/06/rev...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!