性能对比:aelf智能合约运行环境性能是EVM的1000倍

近期对标以太坊作了一系列针对测试,在这次测试过程当中,咱们发如今同一机型上,运行一样的测试用例,AElf的合约执行效率远高于以太坊的EVM的合约执行效率。git

以太坊的合约执行效率低,一方面由于虚拟机机制和gas费规则带来的必定开销致使效率下降,另外一方面由于EVM的256位设计致使合约执行效率更低。 而AElf使用C#的发射机制来调用合约,而且没有多余设计,合约执行效率天然远高于以太坊的合约执行效率。github

1.测试用例及代码库

如下是对标以太坊 loop-divadd-10M.json 和 loop-exp-nop-1M.json的测试状况。json

ETH: 基于官网go实现版本 github.com/ethereum/go…ubuntu

AElf: 基于官方C#实现版本 github.com/AElfProject…bash

测试用例, 对标ETH的标准测试 github.com/ethereum/te…ide

对应AElf 测试程序:github.com/AElfProject…oop

2.机器配置

机器型号
OS=ubuntu 16.04
QEMU Virtual CPU, 2 CPU, 2 logical and 2 physical cores

cpu MHz  : 2194.916; cache size : 16384 KB

AElf 相关环境

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倍,差三个数量级ui

3.1 EVM

官方go实现版本的自带测试程序执行结果spa

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倍。

相关文章
相关标签/搜索