EVM-MLIR:以MLIR编写的EVM

1. 引言

EVM_MLIR:

  • 以MLIR编写的EVM。

开源代码实现见:

  • https://github.com/lambdaclass/evm_mlir(Rust)
    • 为使用MLIR和LLVM,将EVM-bytecode,转换为,machine-bytecode。
    • LambdaClass团队在2周内,用5个新员工,借助编译器将VM opcode逻辑编译为原生机器码,实现了约75%的以太坊虚拟机功能,即实现了149个opcodes中的111个。
    • 相比于revm,运行factorial和fibnacci程序,其性能提升了300%到600%。

有很多其它虚拟机会将bytecode编译为原生指令,但奇怪的是,以太坊虚拟机(EVM)的实现并没有做这种编译。LambdaClass在做Cairo Native时(见https://github.com/lambdaclass/cairo_native(Rust + Cairo)),学到了很多MLIR/LLVM的知识(详情见:LambdaClass 2023年5月3日博客 Exciting times at the intersection of Compilers and Applied Cryptography: Cairo and MLIR),为此,开启了EVM-MLIR项目,来实现比revm更快的替代方案。

2. 将MLIR用于EVM

EVM:

  • 为基于栈的虚拟机
  • 所编译的bytecode表示了一组指令,每个指令包含1-byte opcodes 及其参数。
  • Push操作可包含多达32字节的额外数据(即推送到栈上的数据量)

EVM的内存架构包含5大组件:

  • Stack:存储最多1024个256-bit宽整数。每个操作会从Stack上pop操作数,并(或)将结果推送到Stack上。若某程序run out of stack,则该程序终结。
  • Memory:为字节数组。支持按字节随机寻址。用于按顺序存储和访问可变数据。
  • Calldata:为与Memory类似的只读字节数组,作为每笔交易的输入发送。某些操作数支持从calldata拷贝到stack或memory。
  • Storage:为具有256-bit keys和values的字典。对其的修改是持久的,除非交易被revert。
  • Transient Storage:与Storage类似,但其修改会在交易结束时丢弃。

由此可知,EVM的执行模型非常简单。
指令序列上的naive interpreter loop很容易实现,但很难优化。有很多方法可实现bytecode interpreters ,但通过直接将每个操作码翻译成机器指令来消除interpreter开销是非常有效的。唯一的困难是:

  • 需要一个编译器后端以及链接和调用所生成代码的方法。

LambdaClass团队决定利用其在MLIR方面的经验,编写一个库:

  • 将每个操作转换为a sequence of MLIR blocks,每个MLIR block包含了实现每个opcode行为的MLIR操作,
  • 并通过将每个操作码连接到下一个操作码来将其串起来
  • 最后,这个表示可以转换为LLVM IR,并通过LLVM的optimizer传递。

为此:

  • 不仅将每个opcode逻辑转换为了MLIR操作,

还需要转换内存架构:

  • Stack:在开始构建MLIR blocks sequence之前,预分配最大stack size(1024个元素)。当前指针和base指针,均用于维护该stack,并检查overflow或underflow。
  • Memory:在Rust中处理内存分配,扩展为所需的FFI callbacks。
  • Calldata:存储在Rust端,将其作为EVM的输入。
  • Storage/Transient storage:通过syscalls来处理,具有与revm类似的api。

3. EVM-MLIR benchmarks

具体的benchmark代码见:

  • https://github.com/lambdaclass/evm_mlir/tree/main/bench/revm_comparison/src

未来将添加更多复杂的程序。

3.1 以Factorial为例的benchmark

以Factorial为例:

  • 计算第N个阶乘,其中N作为calldata传入。

选择N=1000为例,将该程序循环执行10万次,有:
在这里插入图片描述

3.2 以Fibonacci为例的benchmark

以Fibonacci为例:

  • 计算第N个Fibonacci值,其中N作为calldata传入。

选择N=1000为例,将该程序循环执行10万次,有:
在这里插入图片描述

4. 未来规划

LambdaClass团队会保留一个骨干团队来完成剩余的功能并继续优化,并专注于其新执行客户端——以ETHereum Rust Execution命名为ethrex——见https://github.com/lambdaclass/ethereum_rust。
该新执行客户端的目标是:

  • 在未来两个月内为以太坊生态系统提供一个具有简单、直接代码的替代Rust执行客户端。
  • MLIR EVM准备好后,打算将其整合到ethrex中,作为 dog-fooding effort的一部分。

参考资料

[1] LambdaClass团队2024年6月14日博客 EVM performance boosts with MLIR

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/776059.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

无人机水运应用场景

航行运输 通航管理(海事通航管理处) 配员核查流程 海事员通过VHF(甚高频)系统与船长沟通核查时间。 无人机根据AIS(船舶自动识别系统)报告的船舶位置,利用打点定位 功能飞抵船舶上方。 使用…

大型能源电力集团需要什么样的总部数据下发系统?

能源电力集团的组织结构是一个复杂的系统,包括多个职能部门和子分公司。这些子分公司负责具体的电力生产、销售、运维等业务。这些部门和公司协同工作,确保电力生产的顺利进行,同时关注公司的长期发展、市场拓展、人力资源管理、财务管理和公…

SCI一区级 | Matlab实现BO-Transformer-LSTM多特征分类预测/故障诊断

SCI一区级 | Matlab实现BO-Transformer-LSTM多特征分类预测/故障诊断 目录 SCI一区级 | Matlab实现BO-Transformer-LSTM多特征分类预测/故障诊断效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.【SCI一区级】Matlab实现BO-Transformer-LSTM特征分类预测/故障诊断&…

winform2

12.TabControl 导航控制条 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace zhiyou_…

发现CPU占用过高,该如何排查解决?

1.使用top命令 查看cpu占用最多的进程 2.使用 top -H -p pid 发现有两个线程占用比较大 3.将线程id转换为16进制 使用命令 printf 0x%x\n pid 4.使用 jstack pid | grep 线程id(16进制) -A 20 (显示20行) 根据代码显示进行错误排查

2024年7月5日 (周五) 叶子游戏新闻

老板键工具来唤去: 它可以为常用程序自定义快捷键,实现一键唤起、一键隐藏的 Windows 工具,并且支持窗口动态绑定快捷键(无需设置自动实现)。 卸载工具 HiBitUninstaller: Windows上的软件卸载工具 《乐高地平线大冒险》为何不登陆…

娱乐圈惊爆已婚男星刘端端深夜幽会

【娱乐圈惊爆!已婚男星刘端端深夜幽会,竟是《庆余年》二皇子“戏外风云”】在这个信息爆炸的时代,娱乐圈的每一次风吹草动都能瞬间点燃公众的热情。今日,知名娱乐博主刘大锤的一则预告如同投入湖中的巨石,激起了层层涟…

关于下载obsidian SimpRead Sync中报错的问题

参考Kenshin的配置方法,我却在输入简悦的配置文件目录时多次报错。 bug如下: 我发现导出来的配置文件格式如下: 然后根据报错的bug对此文件名进行修改,如下: 解决。

Java数据结构-树的面试题

目录 一.谈谈树的种类 二.红黑树如何实现 三.二叉树的题目 1.求一个二叉树的高度,有两种方法。 2.寻找二叉搜索树当中第K大的值 3、查找与根节点距离K的节点 4.二叉树两个结点的公共最近公共祖先 本专栏全是博主自己收集的面试题,仅可参考&#xf…

暑假前端知识速成【CSS】系列一

坚持就是希望! 什么是CSS? CSS 指的是层叠样式表* (Cascading Style Sheets)CSS 描述了如何在屏幕、纸张或其他媒体上显示 HTML 元素CSS 节省了大量工作。它可以同时控制多张网页的布局外部样式表存储在 CSS 文件中 *:也称级联样式表。 CSS语法 在此例…

微信小程序的智慧物流平台-计算机毕业设计源码49796

目 录 摘要 1 绪论 1.1 研究背景 1.2 研究意义 1.3研究方法 1.4开发技术 1.4.1 微信开发者工具 1.4.2 Node.JS框架 1.4.3 MySQL数据库 1.5论文结构与章节安排 2系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 用户登录流程 2.2.2 数据删除流程 2.3 系统功能分…

Windows 上帝模式是什么?开启之后有什么用处?

Windows 上帝模式是什么 什么是上帝模式?Windows 上帝模式(God Mode)是一个隐藏的文件夹,通过启用它,用户可以在一个界面中访问操作系统的所有管理工具和设置选项。这个功能最早出现在 Windows Vista 中,并…

【K8s】专题六(4):Kubernetes 稳定性之初始化容器

以下内容均来自个人笔记并重新梳理,如有错误欢迎指正!如果对您有帮助,烦请点赞、关注、转发!欢迎扫码关注个人公众号! 目录 一、基本介绍 二、主要特点 三、资源清单(示例) 一、基本介绍 初…

小学英语语法

目录 a和an的用法名词的单复数be动词和人称代词(主格)指示代词形容词物主代词名词所有格双重所有格方位介词some,any和no的用法How many和How much的用法情态动词can的用法祈使句人称代词(宾格)常见实义动词的用法一般…

【MySQL备份】Percona XtraBackup总结篇

目录 1.前言 2.问题总结 2.1.为什么在恢复备份前需要准备备份 2.1.1. 保证数据一致性 2.1.2. 完成崩溃恢复过程 2.1.3. 解决非锁定备份的特殊需求 2.1.4. 支持增量和差异备份 2.1.5. 优化恢复性能 2.2.Percona XtraBackup的工作原理 3.注意事项 1.前言 在历经了详尽…

深入理解 Webhook 与 API 的区别

作为人类,我们希望技术能帮助我们更快捷、更便捷地与更多人交流。但要实现这一目标,我们首先需要找到一种方法让技术能够彼此对话。 这就是 API 和 Webhook 的用武之地。 API 和 Webhook 都能够促进两个应用之间的数据同步和传递。然而,它们…

MySQL视图教程(03):列出视图

文章目录 MySQL 列出视图语法使用场景示例结论 MySQL 列出视图 MySQL 是一种流行的关系型数据库管理系统,用于创建和管理数据库中的表、视图等对象。在 MySQL 中,视图是一种虚拟表,可以从一个或多个实际表中检索数据,并根据特定的…

springboot整合Camunda实现业务

1.bean实现 业务 1.画流程图 系统任务,实现方式 2.定义bean package com.jmj.camunda7test.process.config;import lombok.extern.slf4j.Slf4j; import org.camunda.bpm.engine.TaskService; import org.camunda.bpm.engine.delegate.JavaDelegate; import org.…

【一】m2芯片的mac中安装ubuntu24虚拟机集群

文章目录 1. 虚拟机配置2. 复制虚拟机2.1 修改主机名2.2 修改网络 1. 虚拟机配置 在官方网站下载好ubuntu24-arm版镜像开始安装,安装使用VMWare Fusion的社区免费授权版,使用一台m2芯片的mac电脑作为物理机平台。 为什么选择ubuntu24?因为centOS7目前已…

php简单商城小程序系统源码

🛍️【简单商城小程序】🛍️ 🚀一键开启,商城搭建新体验🚀 你还在为繁琐的商城搭建流程头疼吗?现在,有了简单商城系统小程序,一切变得轻松又快捷!无需复杂的编程知识&a…