从EOS 2.0发布到现在有段时间了,今天单独研究下EOS VM的改进,以及相关的参数配置

引用官方介绍

借助EOSIO 2,我们将发布一个名为EOS VM的新WASM引擎,该引擎由三个组件组成,每个组件都有自己的功能并提供特定的性能增强。
区块链WebAssembly执行的强大组件三重奏

EOS VM Interpreter (eos-vm)

EOS VM解释器是一个WebAssembly解释器,提供了极快的解析/加载,确定性和高效的时限执行。从头开始设计解释器,使我们能够为将来对智能合约的调试支持腾出空间。

EOS VM Just In Time Compiler (JIT) (eos-vm-jit)

EOS VM即时(JIT)编译器是一种WebAssembly编译器,它采用WASM并即时生成本机代码。与WABT,Binaryen和EOS VM解释器之类的解释器相比,该体系结构能够非常快速地执行WASM智能合约,并提供显着的性能优势。这种JIT解决方案的绝对速度使我们能够在区块链上使用它,而无需其他解决方案进行较长的块编译时间。

EOS VM Optimized Compiler (eos-vm-oc-enable)

EOS VM Optimized编译器是EOS VM的第三个组件,它使用了利用多遍编译架构的专用编译器框架(LLVM)。通过优化编译器生成的本机代码通常比在WABT,Binaryen,EOS VM解释器和EOS VM JIT中执行的相同代码快一个数量级。最重要的是,它甚至比现有的WAVM引擎还要快,但是与WAVM不同,它可以利用我们的分层设计在区块链上安全使用。

参数配置

开启eos-vm-jit

wasm-runtime = eos-vm-jit

对于wasm-runtime还支持以下选项

  • wabt
  • eos_vm
  • eos_vm_jit
  • eos_vm_oc //EOS VM OC is a tier-up compiler and works in conjunction with the configured base WASM runtime. Enable EOS VM OC via 'eos-vm-oc-enable' option

开启 eos-vm-oc-enable

eos-vm-oc-enable = true

还可修改其他参数

  • eos-vm-oc-cache-size-mb // Maximum size (in MiB) of the EOS VM OC code cache
  • eos-vm-oc-compile-threads // eos-vm-oc-compile-threads must be set to a non-zero value

对于出块节点来说,官方意思EOS VM Optimized编译器还没有足够的实际场景测试,防止各BP节点部分开启与未开启的行为之间可能存在差异的风险,官方建议是在生产节点上不使用eos-vm-oc-enable = true 只单独使用eos-vm-jit
并且由于节点开启后处理会更快,也就是TPS会增加很多,将导致每个块的数据猛增,会导致查询慢,以及可能的稳定因素影响。官方建议先不要使用,等待官方更新支持。
可看此贴 https://github.com/EOSIO/eos/issues/8620

参考

https://eos.io/news/introducing-eosio-2/