Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
G
Geth-Modification
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
张蕾
Geth-Modification
Commits
6dc32e89
Commit
6dc32e89
authored
Jun 28, 2017
by
Martin Holst Swende
Committed by
Felix Lange
Jun 28, 2017
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
core/vm: add benchmarks for some ops and precompiles (#14641)
parent
9e5f03b6
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
242 additions
and
0 deletions
+242
-0
instructions_test.go
core/vm/instructions_test.go
+242
-0
No files found.
core/vm/instructions_test.go
View file @
6dc32e89
package
vm
import
(
"fmt"
"math/big"
"testing"
...
...
@@ -40,3 +41,244 @@ func TestByteOp(t *testing.T) {
}
}
}
func
opBenchmark
(
bench
*
testing
.
B
,
op
func
(
pc
*
uint64
,
evm
*
EVM
,
contract
*
Contract
,
memory
*
Memory
,
stack
*
Stack
)
([]
byte
,
error
),
args
...
string
)
{
var
(
env
=
NewEVM
(
Context
{},
nil
,
params
.
TestChainConfig
,
Config
{
EnableJit
:
false
,
ForceJit
:
false
})
stack
=
newstack
()
)
// convert args
byteArgs
:=
make
([][]
byte
,
len
(
args
))
for
i
,
arg
:=
range
args
{
byteArgs
[
i
]
=
common
.
Hex2Bytes
(
arg
)
}
pc
:=
uint64
(
0
)
bench
.
ResetTimer
()
for
i
:=
0
;
i
<
bench
.
N
;
i
++
{
for
_
,
arg
:=
range
byteArgs
{
a
:=
new
(
big
.
Int
)
.
SetBytes
(
arg
)
stack
.
push
(
a
)
}
op
(
&
pc
,
env
,
nil
,
nil
,
stack
)
stack
.
pop
()
}
}
func
precompiledBenchmark
(
addr
,
input
,
expected
string
,
gas
uint64
,
bench
*
testing
.
B
)
{
contract
:=
NewContract
(
AccountRef
(
common
.
HexToAddress
(
"1337"
)),
nil
,
new
(
big
.
Int
),
gas
)
p
:=
PrecompiledContracts
[
common
.
HexToAddress
(
addr
)]
in
:=
common
.
Hex2Bytes
(
input
)
var
(
res
[]
byte
err
error
)
data
:=
make
([]
byte
,
len
(
in
))
bench
.
ResetTimer
()
for
i
:=
0
;
i
<
bench
.
N
;
i
++
{
contract
.
Gas
=
gas
copy
(
data
,
in
)
res
,
err
=
RunPrecompiledContract
(
p
,
data
,
contract
)
}
bench
.
StopTimer
()
//Check if it is correct
if
err
!=
nil
{
bench
.
Error
(
err
)
return
}
if
common
.
Bytes2Hex
(
res
)
!=
expected
{
bench
.
Error
(
fmt
.
Sprintf
(
"Expected %v, got %v"
,
expected
,
common
.
Bytes2Hex
(
res
)))
return
}
}
func
BenchmarkPrecompiledEcdsa
(
bench
*
testing
.
B
)
{
var
(
addr
=
"01"
inp
=
"38d18acb67d25c8bb9942764b62f18e17054f66a817bd4295423adf9ed98873e000000000000000000000000000000000000000000000000000000000000001b38d18acb67d25c8bb9942764b62f18e17054f66a817bd4295423adf9ed98873e789d1dd423d25f0772d2748d60f7e4b81bb14d086eba8e8e8efb6dcff8a4ae02"
exp
=
"000000000000000000000000ceaccac640adf55b2028469bd36ba501f28b699d"
gas
=
uint64
(
4000000
)
)
precompiledBenchmark
(
addr
,
inp
,
exp
,
gas
,
bench
)
}
func
BenchmarkPrecompiledSha256
(
bench
*
testing
.
B
)
{
var
(
addr
=
"02"
inp
=
"38d18acb67d25c8bb9942764b62f18e17054f66a817bd4295423adf9ed98873e000000000000000000000000000000000000000000000000000000000000001b38d18acb67d25c8bb9942764b62f18e17054f66a817bd4295423adf9ed98873e789d1dd423d25f0772d2748d60f7e4b81bb14d086eba8e8e8efb6dcff8a4ae02"
exp
=
"811c7003375852fabd0d362e40e68607a12bdabae61a7d068fe5fdd1dbbf2a5d"
gas
=
uint64
(
4000000
)
)
precompiledBenchmark
(
addr
,
inp
,
exp
,
gas
,
bench
)
}
func
BenchmarkPrecompiledRipeMD
(
bench
*
testing
.
B
)
{
var
(
addr
=
"03"
inp
=
"38d18acb67d25c8bb9942764b62f18e17054f66a817bd4295423adf9ed98873e000000000000000000000000000000000000000000000000000000000000001b38d18acb67d25c8bb9942764b62f18e17054f66a817bd4295423adf9ed98873e789d1dd423d25f0772d2748d60f7e4b81bb14d086eba8e8e8efb6dcff8a4ae02"
exp
=
"0000000000000000000000009215b8d9882ff46f0dfde6684d78e831467f65e6"
gas
=
uint64
(
4000000
)
)
precompiledBenchmark
(
addr
,
inp
,
exp
,
gas
,
bench
)
}
func
BenchmarkPrecompiledIdentity
(
bench
*
testing
.
B
)
{
var
(
addr
=
"04"
inp
=
"38d18acb67d25c8bb9942764b62f18e17054f66a817bd4295423adf9ed98873e000000000000000000000000000000000000000000000000000000000000001b38d18acb67d25c8bb9942764b62f18e17054f66a817bd4295423adf9ed98873e789d1dd423d25f0772d2748d60f7e4b81bb14d086eba8e8e8efb6dcff8a4ae02"
exp
=
"38d18acb67d25c8bb9942764b62f18e17054f66a817bd4295423adf9ed98873e000000000000000000000000000000000000000000000000000000000000001b38d18acb67d25c8bb9942764b62f18e17054f66a817bd4295423adf9ed98873e789d1dd423d25f0772d2748d60f7e4b81bb14d086eba8e8e8efb6dcff8a4ae02"
gas
=
uint64
(
4000000
)
)
precompiledBenchmark
(
addr
,
inp
,
exp
,
gas
,
bench
)
}
func
BenchmarkOpAdd
(
b
*
testing
.
B
)
{
x
:=
"ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff"
y
:=
"ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff"
opBenchmark
(
b
,
opAdd
,
x
,
y
)
}
func
BenchmarkOpSub
(
b
*
testing
.
B
)
{
x
:=
"ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff"
y
:=
"ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff"
opBenchmark
(
b
,
opSub
,
x
,
y
)
}
func
BenchmarkOpMul
(
b
*
testing
.
B
)
{
x
:=
"ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff"
y
:=
"ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff"
opBenchmark
(
b
,
opMul
,
x
,
y
)
}
func
BenchmarkOpDiv
(
b
*
testing
.
B
)
{
x
:=
"ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff"
y
:=
"ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff"
opBenchmark
(
b
,
opDiv
,
x
,
y
)
}
func
BenchmarkOpSdiv
(
b
*
testing
.
B
)
{
x
:=
"ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff"
y
:=
"ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff"
opBenchmark
(
b
,
opSdiv
,
x
,
y
)
}
func
BenchmarkOpMod
(
b
*
testing
.
B
)
{
x
:=
"ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff"
y
:=
"ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff"
opBenchmark
(
b
,
opMod
,
x
,
y
)
}
func
BenchmarkOpSmod
(
b
*
testing
.
B
)
{
x
:=
"ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff"
y
:=
"ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff"
opBenchmark
(
b
,
opSmod
,
x
,
y
)
}
func
BenchmarkOpExp
(
b
*
testing
.
B
)
{
x
:=
"ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff"
y
:=
"ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff"
opBenchmark
(
b
,
opExp
,
x
,
y
)
}
func
BenchmarkOpSignExtend
(
b
*
testing
.
B
)
{
x
:=
"ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff"
y
:=
"ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff"
opBenchmark
(
b
,
opSignExtend
,
x
,
y
)
}
func
BenchmarkOpLt
(
b
*
testing
.
B
)
{
x
:=
"ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff"
y
:=
"ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff"
opBenchmark
(
b
,
opLt
,
x
,
y
)
}
func
BenchmarkOpGt
(
b
*
testing
.
B
)
{
x
:=
"ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff"
y
:=
"ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff"
opBenchmark
(
b
,
opGt
,
x
,
y
)
}
func
BenchmarkOpSlt
(
b
*
testing
.
B
)
{
x
:=
"ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff"
y
:=
"ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff"
opBenchmark
(
b
,
opSlt
,
x
,
y
)
}
func
BenchmarkOpSgt
(
b
*
testing
.
B
)
{
x
:=
"ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff"
y
:=
"ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff"
opBenchmark
(
b
,
opSgt
,
x
,
y
)
}
func
BenchmarkOpEq
(
b
*
testing
.
B
)
{
x
:=
"ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff"
y
:=
"ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff"
opBenchmark
(
b
,
opEq
,
x
,
y
)
}
func
BenchmarkOpAnd
(
b
*
testing
.
B
)
{
x
:=
"ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff"
y
:=
"ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff"
opBenchmark
(
b
,
opAnd
,
x
,
y
)
}
func
BenchmarkOpOr
(
b
*
testing
.
B
)
{
x
:=
"ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff"
y
:=
"ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff"
opBenchmark
(
b
,
opOr
,
x
,
y
)
}
func
BenchmarkOpXor
(
b
*
testing
.
B
)
{
x
:=
"ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff"
y
:=
"ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff"
opBenchmark
(
b
,
opXor
,
x
,
y
)
}
func
BenchmarkOpByte
(
b
*
testing
.
B
)
{
x
:=
"ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff"
y
:=
"ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff"
opBenchmark
(
b
,
opByte
,
x
,
y
)
}
func
BenchmarkOpAddmod
(
b
*
testing
.
B
)
{
x
:=
"ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff"
y
:=
"ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff"
z
:=
"ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff"
opBenchmark
(
b
,
opAddmod
,
x
,
y
,
z
)
}
func
BenchmarkOpMulmod
(
b
*
testing
.
B
)
{
x
:=
"ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff"
y
:=
"ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff"
z
:=
"ABCDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff"
opBenchmark
(
b
,
opMulmod
,
x
,
y
,
z
)
}
//func BenchmarkOpSha3(b *testing.B) {
// x := "0"
// y := "32"
//
// opBenchmark(b,opSha3, x, y)
//
//
//}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment