测试用例及代码库
机器配置
测试结果
- 3.1 EVM
- 3.2 AElf
- 3.2.1 LoopDivAdd10M
- 3.2.2 LoopExpNop1M
近期对标以太坊做了一系列针对测试, 在此次测试过程中, 我们发现在同一机型上, 运行同样的测试用例, aelf 的合约执行效率远高于以太坊 EVM 的合约执行效率.
以太坊的合约执行效率低, 一方面因为虚拟机机制和 gas 费规则带来的一定开销导致效率降低, 另一方面因为 EVM 的 256 位设计导致合约执行效率更低.
而 aelf 使用 C# 的发射机制来调用合约, 并且没有多余设计, 合约执行效率自然远高于以太坊的合约执行效率
1.Test case and Code
以下是对标以太坊 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 的标准测试:
对应 aelf 测试用例:
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
- }
执行结果:
来源: https://www.cnblogs.com/loning/p/10851968.html