性能对比:aelf智能合约运行环境性能是evm的1000倍
- 测试用例及代码库
- 机器配置
- 测试结果
3.1 EVM
3.2 AElf
3.2.1 LoopDivAdd10M
3.2.2 LoopExpNop1M - 测试结论
近期对标以太坊做了一系列针对测试,在此次测试过程中,我们发现在同一机型上,运行同样的测试用例,aelf的合约执行效率远高于以太坊EVM的合约执行效率。
以太坊的合约执行效率低,一方面因为虚拟机机制和gas费规则带来的一定开销导致效率降低,另一方面因为EVM的256位设计导致合约执行效率更低。
而aelf使用C#的发射机制来调用合约,并且没有多余设计,合约执行效率自然远高于以太坊的合约执行效率
1.测试用例及代码库
以下是对标以太坊 loop-DivAdd-10M.json 和 loop-exp-nop-1M.json的测试情况
ETH: 基于官网go实现版本
https://github.com/ethereum/go-ethereum
AELF: 基于官方C#实现版本
https://github.com/AElfProject/AElf
测试用例,对标ETH的标准测试:
https://github.com/ethereum/tests/tree/develop/src/VMTestsFiller
对应aelf测试用例:
https://github.com/AElfProject/AElf/blob/dev/bench/AElf.Benchmark
2.机器配置
Test Enviornment: OS=ubuntu 16.04 QEMU Virtual CPU, 2 CPU, 2 logical and 2 physical cores CPU MHz: 2194.916; cache size : 16384 KB AElf Test Environment: BenchmarkDotNet=v0.11.5 .NET Core SDK=2.2.203 [Host] : .NET Core 2.2.4 (CoreCLR 4.6.27521.02, CoreFX 4.6.27521.01), 64bit RyuJIT DEBUG
3.测试结果
LoopDivAdd10M:EVM耗时为aelf的169倍,差两个数量级
LoopExpNop1M:EVM耗时为aelf的1223倍,差三个数量级
3.1 EVM
官方go实现版本的自带测试程序执行结果
LoopDivAdd10M:14.236813572s
LoopExpNop1M: 639.16568ms
3.2 AElf
LoopDivAdd10M:84.01ms
LoopExpNop1M: 522.5us
3.2.1 LoopDivAdd10M
除法加法循环一千万次
方法
public override DoubleValue LoopDivAdd(DivAddTestInput input) { var r = input.X; for (uint i = 0; i < input.N; i++) { r /= input.Y; r += input.K; } return new DoubleValue {Value = r}; }
输入
new DivAddTestInput() { X = 100, Y = 300, K = 500, N = 10000000 }
执行结果:
3.2.2 LoopExpNop1M
方法
public override Int32Value LoopExpNop(PerformanceTesteInput input) { for (uint i = 0; i < input.N; i++) { } return new Int32Value {Value = input.Seed}; }
输入
new PerformanceTesteInput() { Exponent = 0, Seed = _executeResult, N = 1000000 }
执行结果:
4.测试结论
在试验机配置相同的情况下:
循环运行1000万次加法、除法测试后:
以太坊EVM约需要14236.81毫秒
而在aelf的节点测试中仅需84.01毫秒,高于EVM 169倍。
空循环运行100万次后:
以太坊EVM需要639.16毫秒
而在aelf的节点测试中仅需0.5225毫秒,高于EVM 1223倍。
- 以太坊私有链环境下智能合约部署流程
- 以太坊(3):以太坊私有链环境下的智能合约的编写、编译、创建与执行
- J2EE运行环境性能优化艺术之二
- django的几种运行方法性能对比
- 搭建以太坊私有链和部署智能合约开发环境
- 部署及运行一个以太坊的智能合约(图形界面)
- J2EE运行环境性能优化艺术之三
- 智能合约开发环境搭建及Hello World合约
- thrift的安装以及与http网络性能对比(MAC环境)
- Fabric智能合约编译与测试环境搭建
- 手把手教你搭建智能合约测试环境、开发、编译、部署以及如何通过JS调用合约方法
- 【区块链学习】以Linux为例,通过控制台部署和运行智能合约
- 手把手教你智能合约开发环境搭建及Hello World合约
- 智能合约开发环境搭建及Hello World合约
- 区块链搭建以及智能合约的运行
- HHVM安装使用教程-高效的PHP运行环境提升PHP性能9倍以上
- 11、单机运行环境搭建之 --Centos6.4下mysql5.6.10的性能优化
- Mac下基于testrpc和truffle的以太坊智能合约开发环境搭建
- [原] KVM 环境下MySQL性能对比
- 区块链开发(二)部署和运行第一个以太坊智能合约