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


    1. 测试用例及代码库
    2. 机器配置
    3. 测试结果
      3.1 EVM
      3.2 AElf
      3.2.1 LoopDivAdd10M
      3.2.2 LoopExpNop1M
    4. 测试结论

    近期对标以太坊做了一系列针对测试,在此次测试过程中,我们发现在同一机型上,运行同样的测试用例,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倍。

  • 相关阅读:
    进程&多道技术
    linux 三大利器 grep sed awk sed
    linux 三大利器 grep sed awk 正则表达式
    cmd pyhton
    ConfigParser 模块
    几种数据类型的简单概念
    python基础关于字符串的常用操作
    寻租行为
    集约式发展 与 粗放式发展
    最小二乘法
  • 原文地址:https://www.cnblogs.com/loning/p/10851968.html
Copyright © 2020-2023  润新知