查看原文
其他

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

aelf社区 2022-01-06


aelf作为公链领域中的linux,自立项之初便以商业化的视角来设计公链架构。时至今日,无论是整个网络的架构设计,还是已知的TPS测试数据,aelf都直击着以太坊的痛点。


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


近期,aelf展开与以太坊EVM性能对比的测试,测试情况如下:



测试用例及代码库


以下是对以太坊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



机器配置


· 机器型号:


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



测试结果


· LoopDivAdd10M:EVM耗时为aelf的169倍,差两个数量级


· LoopExpNop1M:EVM耗时为aelf的1223倍,差三个数量级



❏ EVM


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


LoopDivAdd10M:14236.81ms 

LoopExpNop1M:639.16568ms 




❏ AELF


LoopDivAdd10M:84.01ms 

LoopExpNop1M:0.5225ms


· LoopDivAdd10M


除法/加法循环1000万次


❏ 方法:


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

}


❏ 结果: 



· 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

}


❏ 结果: 




在试验机配置相同的情况下:


循环运行1000万次加法、除法测试后,以太坊EVM约需要14236.81毫秒,而在aelf的节点测试中仅需84.01毫秒,高于EVM169倍。


空循环运行100万次后,以太坊EVM需要639.16毫秒,而在aelf的节点测试中仅需0.5225毫秒,高于EVM1223倍。


除法加法循环测试(AELF)


https://github.com/AElfProject/AElf/blob/dev/bench/AElf.Benchmark.PerformanceTestContract/PerformanceTestContract.cs


除法加法循环测试(ETH)


https://github.com/ethereum/tests/blob/develop/src/VMTestsFiller/loop-mul.sol


空循环测试(AELF)


https://github.com/AElfProject/AElf/blob/dev/bench/AElf.Benchmark.PerformanceTestContract/PerformanceTestContract.cs


空循环测试(ETH)


https://github.com/ethereum/tests/blob/develop/src/VMTestsFiller/loop-exp.sol


以上链接为测试相关代码GitHub链接,欢迎大家前去查看。





您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存