zkVM跟踪生成方法评估:AOT vs. JIT

本文深入探讨了零知识虚拟机(zkVM)中生成零知识证明(ZKP)的过程,重点介绍了通过提前编译(AOT)和即时编译(JIT)优化跟踪生成,实现实时证明的技术。AOT编译通过将RISC-V ELF文件转换为优化的本地汇编代码,实现并行执行和高效的最小化跟踪生成;而JIT编译则在运行时动态转译和执行代码,进一步优化性能,适用于动态工作负载。

1 介绍

1.1 zkVM 简要介绍

zkVM,或零知识虚拟机(Zero-Knowledge Virtual Machine),是一种专门的虚拟机,旨在以一种方式执行程序,该方式使用零知识证明(ZKPs)生成可验证的计算证明。它通常在 RISC-V 等架构上运行,允许开发人员运行任意代码,同时生成密码学证明,证明执行是正确的,而不会泄露敏感数据。zkVM 在区块链和保护隐私的计算中至关重要,能够实现可扩展且安全的计算验证。

1.2 重要性以及与以太坊证明的关系

zkVM 在以太坊等生态系统中起着关键作用,它与以太坊证明(在 zk-rollup 上下文中通常被称为“ethproofs”)集成。这些证明允许高效地在链上验证链下计算,从而降低 gas 成本并提高可扩展性。例如,zkVM 可以为智能合约执行或 layer-2 交易生成简洁的证明,从而确保无需信任的验证。它的重要性在于弥合了高性能计算和密码学安全之间的差距,使其对于需要隐私和效率的去中心化应用程序 (dApp) 至关重要。

1.3 实现实时证明

zkVM 中的实时证明涉及足够快地生成和验证证明以用于交互式应用程序,例如实时区块链交易。 为了实现这一点,跟踪生成方面的优化是关键。 基准测试数据表明,优化的 zkVM 可以将证明生成时间从几分钟减少到几秒,从而实现接近实时的用例,例如基于 zk 的游戏或即时验证。 这是通过可并行化的跟踪格式和硬件加速来实现的。

在探索 zkVM 系统中的挑战和优化之前,让我们首先了解生成零知识证明(ZKP)所涉及的基本步骤。 此概述将提供关于将程序执行转换为可验证证明的多阶段流程的重要背景信息,高亮显示不同阶段如何影响整体性能以及 AOT 和 JIT 等技术可以在何处产生重大影响。

2 zkVM 证明生成过程

zkVM 中的证明生成过程是一个多阶段流程,旨在生成可验证的程序执行零知识证明。它通常涉及以下关键步骤,执行速度和硬件依赖性各不相同:

总的来说,跟踪生成通常是主要的瓶颈(在未优化的设置中,占总时间的 50-70%),它依赖于 CPU 并且不太容易进行 GPU 并行化。 相比之下,证明阶段利用 GPU 进行大规模加速,使得硬件选择对于实时应用程序至关重要。 混合 CPU-GPU 设置很常见,CPU 处理顺序逻辑,GPU 卸载并行计算。

3 最小跟踪生成的演变:从传统模拟到并行优化

为了解决这些瓶颈,生成最小跟踪至关重要。 最小跟踪仅捕获必要的执行步骤(例如,热点或内存交互),同时省略冗余数据,允许将跟踪分成块以进行并发处理并减少总时间。

传统上,最小跟踪是使用 Rust 实现的 CPU 模拟器生成的,以模拟 RISC-V 虚拟机。 在这种方法中,RISC-V ELF 二进制文件被加载到模拟器中,该模拟器以软件方式逐步解释和执行每个指令。 在执行过程中,模拟器记录必要的state 更改,例如寄存器更新、内存访问和控制流决策,同时滤除冗余信息,以生成适合以后重放和见证计算的紧凑跟踪。

虽然这种传统模拟对于简单程序有效,但本质上是顺序的并且受 CPU 限制,加剧了内存密集型工作负载中的 I/O 瓶颈。它依赖于主机 CPU 的性能,但不利用本机执行或并行性,这通常导致跟踪生成比优化方法慢。基准测试表明,对于复杂的计算,它可能会慢 5-10 倍,使其不太适合实时证明。

这个基线突出了对更有效方法的需求,这些方法可以通过最小跟踪实现并行性。实现此目的的两种主要高级方法是预先 (Ahead-of-Time, AOT) 编译和即时 (Just-in-Time, JIT) 编译,我们将在下面对其进行评估。

4 预先 (AOT) 编译

4.1 AOT 编译的基本介绍

预先 (AOT) 编译是一种在运行时之前将源代码或中间表示编译为本机机器代码的技术。 与解释器或即时编译器不同,AOT 预先执行编译步骤,从而生成可在目标硬件上直接运行的可执行二进制文件,而无需在执行期间进行额外的编译开销。 这种方法通常用于对性能要求严格的应用程序,例如系统软件、游戏和嵌入式系统,在这些应用程序中,启动时间和一致的性能优先于运行时灵活性。

4.2 Zisk AOT 方法介绍

在 Zisk zkVM 的上下文中,AOT 编译是一种用于跟踪生成的强大方法。它利用本机代码执行和并行设计来显着提高性能。 这种方法特别适合需要快速证明生成的大规模区块链应用。 该过程从汇编生成开始,然后进入汇编模式下的优化执行流程,其中 ZiskRom 被转换为 x86-64 汇编以进行本机执行。 这使得并行 runners 能够有效地创建最小的跟踪,然后再进入规划和见证计算等证明生成步骤。

4.3 汇编生成和优化

ELF 到汇编转换流程

AOT 过程首先将 RISC-V ELF 文件转换为优化的本机汇编代码。 首先,elf2rom 将 ELF 转换为 ZiskRom——一种包含指令、只读数据、启动代码和元数据的结构,例如指令映射和优化数组,以便快速访问。

此汇编代码构成汇编模式执行的基础。 它以本机方式运行以生成最小跟踪、计数和用于规划和见证阶段的数据。

汇编模式下的执行流程和见证计算

4.4 架构亮点

  • 并行性:三个 runners 通过共享内存并发工作,实现零拷贝数据传输。
  • 数据总线:将执行与收集分离,将操作路由到适当的收集器。
  • 基于块的处理:支持并行处理执行段。
  • 两阶段执行:首先有效生成最小跟踪,然后重放以获得完整见证。

此流程通过将本机执行的跟踪创建和计数合并到单个过程中,从而优化了生产证明生成。

4.5 AOT 结论及未来展望

AOT 编译在 zkVM 环境中提供了几个关键优势:对于证明生成调度至关重要的可预测性能、消除运行时开销、早期错误检测、高级优化机会以及卓越的可扩展性。 这种方法支持实时证明功能,并为交互式零知识应用程序奠定了基础。

未来的增强功能可能包括基于运行时分析的自适应优化、用于频繁执行路径的动态代码再生以及通过专用协处理器进行的硬件加速集成。

5 即时 (JIT) 编译

5.1 JIT 方法的一般介绍

即时 (JIT) 编译在运行时、执行之前编译代码,从而可以根据实际使用模式进行动态优化。 它很灵活,可以更好地进行代码优化,例如内联频繁调用的函数或适应硬件特性。 JIT 常见于 Java 的 JVM 或 V8 等 JavaScript 引擎中,可在可移植性与性能之间取得平衡。

5.2 将 JIT 应用于 zkVM 跟踪生成

在 zkVM 中,JIT 通过在主机系统(例如,x86)上动态转换和执行 RISC-V 代码来优化跟踪生成,同时捕获用于并行性的最小跟踪。 该过程分为三个主要阶段:执行、生成和跟踪块。

5.3 JIT 结论及未来展望

JIT 在 zkVM 中提供了运行时适应性和动态工作负载的有效处理,通过最小跟踪和并行性减少了 I/O 瓶颈。 但是,它会引入来自转换和检测的初始开销。 未来的改进可能包括分层 JIT,以便在实时证明场景中进行更好的优化。

6 总结

6.1 挑战与经验

主要挑战包括平衡跟踪的最小性和完整性以避免证明失效、处理 JIT 中的动态内存以及确保 AOT 中的跨架构兼容性。 经验强调需要使用分析工具来识别热点,以及最小跟踪在实现并行性方面的价值,从而在基准测试中显着减少 I/O 瓶颈。

6.2 AOT 和 JIT 的比较:优点和缺点

总的来说,AOT 更适合需要生产规模性能的可预测、高吞吐量 zkVM 任务,而 JIT 在具有动态工作负载的自适应、实时场景中表现出色。 混合方法可能为下一代区块链基础设施和 zk-rollup 实现提供两全其美的优势。

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

0 条评论

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