Skip to content

Testing : IL-EVM aot-Precompiler mode #8435

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 398 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
398 commits
Select commit Hold shift + click to select a range
bee0270
opcode fixes, and tests upgrades
Demuirgos Oct 31, 2024
5899f78
fix MSTORE8
Demuirgos Oct 31, 2024
ecb3170
fix SWAPN
Demuirgos Oct 31, 2024
69cc361
fix LOG opcodes
Demuirgos Oct 31, 2024
6d2b76d
merge master into ilevm branch
Demuirgos Oct 31, 2024
3550369
fix Address property in Word
Demuirgos Oct 31, 2024
b237148
fix merge issue for LOG opcode
Demuirgos Oct 31, 2024
3930961
fixes for CODESIZE and BYTE and PREVRANDAO opcodes, rework for tests,…
Demuirgos Oct 31, 2024
a577b4d
Prioritize JIT over PAT when starting analysis, fix failing tests
Demuirgos Oct 31, 2024
f8dbb3d
Refactors
Demuirgos Nov 1, 2024
c3ee162
Fix/il evm opcodes [SLOAD, MCOPY, SAR] (#7703)
SiddharthV1 Nov 3, 2024
dc48774
remove unncessary loop in tests
Demuirgos Nov 3, 2024
3196fac
Merge branch 'feature/il-evm' of https://github.com/NethermindEth/net…
Demuirgos Nov 3, 2024
61b01e2
refactor + comment
Demuirgos Nov 3, 2024
5c5461a
revert SAR changes
Demuirgos Nov 3, 2024
354ac36
add fixes to SAR
Demuirgos Nov 3, 2024
afb56eb
Merge remote-tracking branch 'origin/master' into feature/il-evm
Demuirgos Nov 3, 2024
e45bd27
Fix TStore, TLoad gas (#7709)
SiddharthV1 Nov 4, 2024
5a8a7f2
Merge remote-tracking branch 'origin/master' into feature/il-evm
Demuirgos Nov 4, 2024
6beb634
Merge branch 'feature/il-evm' of https://github.com/NethermindEth/net…
Demuirgos Nov 4, 2024
772f565
fixed tests to use Prague fork
Demuirgos Nov 4, 2024
324393f
fix Instruction Metadata dictionary
Demuirgos Nov 4, 2024
f5f3cf7
fix ISZERO
Demuirgos Nov 5, 2024
62befd0
Merge remote-tracking branch 'origin/master' into feature/il-evm
Demuirgos Nov 5, 2024
6632bdc
minor changes to ISZERO to avoid triple loading
Demuirgos Nov 5, 2024
12b5ddc
fix SGT and SLT
Demuirgos Nov 7, 2024
3d21462
Added more tests
Demuirgos Nov 7, 2024
514e75e
Merge remote-tracking branch 'origin/master' into feature/il-evm
Demuirgos Nov 7, 2024
96b15ae
fixes for LOGx opcodes
Demuirgos Nov 7, 2024
11ae042
fix EXTCODEHASH
Demuirgos Nov 8, 2024
4dc8818
comment unused code
Demuirgos Nov 8, 2024
1a4c34a
fixes tracing for SSTORE
Demuirgos Nov 8, 2024
52edc4a
Merge remote-tracking branch 'origin/master' into feature/il-evm
Demuirgos Nov 8, 2024
128411f
fix BLOBHASH
Demuirgos Nov 8, 2024
f6f862d
Merge remote-tracking branch 'origin/master' into feature/il-evm
Demuirgos Nov 8, 2024
1079810
fix BLOCKHASH
Demuirgos Nov 8, 2024
6ecdaea
Experiment : Add DebugTracer to ILEVM to ease debugging JITTED code
Demuirgos Nov 9, 2024
72d68ac
Added more tests
Demuirgos Nov 10, 2024
832ee45
fix SIGNEXTEND
Demuirgos Nov 11, 2024
91a7c47
Merge remote-tracking branch 'origin/master' into feature/il-evm
Demuirgos Nov 11, 2024
455b9d2
fix JUMP bounds check, and CODESIZE, and BLOBHASH
Demuirgos Nov 12, 2024
7e0d6c8
Merge remote-tracking branch 'origin/master' into feature/il-evm
Demuirgos Nov 12, 2024
029c8a3
fix pc type (from ushort to int)
Demuirgos Nov 13, 2024
199e626
Merge remote-tracking branch 'origin/master' into feature/il-evm
Demuirgos Nov 13, 2024
c63d862
removed some logging lines
Demuirgos Nov 13, 2024
f6ea2e9
remove tracing from ILVM for testing purposes
Demuirgos Nov 13, 2024
49ef5e6
turn on ILVM
Demuirgos Nov 13, 2024
4bc4c5a
Merge remote-tracking branch 'origin/master' into feature/il-evm
Demuirgos Nov 14, 2024
62f6751
minor refactors
Demuirgos Nov 14, 2024
182a045
minor refactors
Demuirgos Nov 15, 2024
7b1b729
improved PUSH1-8
Demuirgos Nov 15, 2024
cf2908c
use generic structs to to remove ilevm call when it is turned off
Demuirgos Nov 15, 2024
ee434b5
remove leftover debugging code
Demuirgos Nov 15, 2024
32832ce
change dictionary type from concurrentDictionary to FrozenDictionary
Demuirgos Nov 16, 2024
130d236
fixed branchJump method
Demuirgos Nov 17, 2024
67720a4
optimiizations for Math opcodes
Demuirgos Nov 18, 2024
d235dc1
add tests
Demuirgos Nov 18, 2024
8dc4fe2
- amortise stack checks at each subsegment
Demuirgos Nov 18, 2024
8e8b9d6
- add benchmark
Demuirgos Nov 18, 2024
e0b41f9
fix amortized stackHeigh analysis
Demuirgos Nov 18, 2024
9d2107f
remove IsEnabled call for core opcodes
Demuirgos Nov 18, 2024
93376e2
Added reachable code analysis
Demuirgos Nov 19, 2024
ffa4842
Merge remote-tracking branch 'origin/master' into feature/il-evm
Demuirgos Nov 19, 2024
230e5d3
removed Logs
Demuirgos Nov 20, 2024
0a9fc6d
Add check for reachable code checks
Demuirgos Nov 20, 2024
aa82882
reduce compiling failing segments (because of op INVALID or equiv) to…
Demuirgos Nov 21, 2024
aa844fc
extended mul opt range from uint16 to uin32 since uint32.max * uint32…
Demuirgos Nov 21, 2024
e1c2d56
change tracing interface
Demuirgos Nov 22, 2024
0636dc0
minor refactors
Demuirgos Nov 24, 2024
afe6bca
added some simple perf tests
Demuirgos Nov 24, 2024
54e2cd7
Add dummy benchmarks as tests
Demuirgos Nov 25, 2024
1fe2f9c
Added some extra basic banchmarks
Demuirgos Nov 25, 2024
3bc8250
merge master and resolve conflicts
Demuirgos Nov 25, 2024
684894f
remove unnacurate benchmark code, fix build issue
Demuirgos Nov 25, 2024
8a900b5
add more optimizations to math opcodes
Demuirgos Nov 26, 2024
fa1abf4
remove ILEVMSTATE and provide direct access to its fields via arguments
Demuirgos Dec 2, 2024
dbd6774
Added some comments
Demuirgos Dec 3, 2024
fa94c06
Added optimizations and refactors
Demuirgos Dec 12, 2024
da7a2a0
merge master
Demuirgos Dec 12, 2024
de2f0ee
migrate to using Ref Word indtead of Span<Word>
Demuirgos Dec 17, 2024
1c2e3e6
Merge remote-tracking branch 'origin/master' into feature/il-evm
Demuirgos Dec 17, 2024
a04cdb3
remove unused variable
Demuirgos Dec 17, 2024
2621ea7
minor refactors and added benchmarks
Demuirgos Dec 19, 2024
40a8e44
Merge remote-tracking branch 'origin/master' into feature/il-evm
Demuirgos Dec 19, 2024
15b5ec1
refactors to analyzer, and merging stack analysis and gas analysis an…
Demuirgos Dec 23, 2024
149f6b1
Merge remote-tracking branch 'origin/master' into feature/il-evm
Demuirgos Dec 23, 2024
4de1ba7
adding more boilerplate
Demuirgos Dec 23, 2024
33a83e5
refactor locals and argument loading
Demuirgos Dec 24, 2024
0d0ebb4
IL-EVM: Increase test coverage for JIT equivalence tests. (#7970)
SiddharthV1 Dec 24, 2024
4e05336
fix build issue in EthereumTests.sln
Demuirgos Dec 24, 2024
deb99c0
Merge branch 'feature/il-evm' of https://github.com/NethermindEth/net…
Demuirgos Dec 24, 2024
1ce84ee
fix wrong test
Demuirgos Dec 24, 2024
5bf2b8d
merge main IL-EVM branch
Demuirgos Dec 24, 2024
b14670d
reafactor opcode IL emition
Demuirgos Dec 25, 2024
b8ca718
major refactors, placeholder code for fullAot env loader
Demuirgos Dec 26, 2024
c5d0b3d
write prototype full AOT compiler, and boilerplate hooks for it
Demuirgos Dec 27, 2024
e6108e9
fixed code emition issues, fix building issues
Demuirgos Dec 27, 2024
7baa802
fix all compilations issues (work around)
Demuirgos Dec 28, 2024
5013a9a
switch constructor emition to ILGenerator (due to Sigil issue)
Demuirgos Jan 1, 2025
ff492ae
Merge remote-tracking branch 'origin/master' into feature/il-evm
Demuirgos Jan 1, 2025
f115174
Merge remote-tracking branch 'origin/feature/il-evm' into feature/il-…
Demuirgos Jan 1, 2025
da0e3b1
added more config options
Demuirgos Jan 2, 2025
858a9f8
fixes and refactors
Demuirgos Jan 5, 2025
ea44c01
major refactors, to remove constant instatiation of Contract instance
Demuirgos Jan 10, 2025
230ce6a
fix constructor failure, fix BlockHash opcode failure
Demuirgos Jan 16, 2025
6c9fa7e
amortize opcode validity checks
Demuirgos Jan 22, 2025
6c35dd6
minor changes
Demuirgos Jan 27, 2025
d037b12
turn ILVM always on
Demuirgos Jan 27, 2025
cefc170
make generated type a class, to avoid boxing and unboxing penalty, re…
Demuirgos Jan 28, 2025
0b66d43
refactored and seprated code emitters into separate files
Demuirgos Jan 28, 2025
277295d
Merge branch 'feature/il-contract' into testing/il-contract
Demuirgos Jan 28, 2025
bf69521
remove sigil deep verifications
Demuirgos Jan 30, 2025
656cc18
fix merge issues (build issues)
Demuirgos Jan 31, 2025
7b4cdd4
fix merge issues
Demuirgos Feb 4, 2025
6194064
fix failing tests
Demuirgos Feb 5, 2025
9bba69d
Merge branch 'feature/il-contract' into testing/il-contract
Demuirgos Feb 6, 2025
40453d3
Merge remote-tracking branch 'origin/master' into feature/il-contract
Demuirgos Feb 10, 2025
a9cbd34
Merge branch 'feature/il-contract' into testing/il-contract
Demuirgos Feb 10, 2025
ba7b1e1
fix delegate call and static call validity checks
Demuirgos Feb 11, 2025
2d66994
Merge branch 'feature/il-contract' into testing/il-contract
Demuirgos Feb 11, 2025
9ffbe84
skip and dont throw when code is too small to be analyzed
Demuirgos Feb 11, 2025
456982a
Merge branch 'feature/il-contract' into testing/il-contract
Demuirgos Feb 11, 2025
f06a6ba
emit delegate instead of type in FULLAOT
Demuirgos Feb 11, 2025
303055d
Swapped CodeInfoRepository with CodeInfoRepository in TestBlockChain …
Demuirgos Feb 18, 2025
330796e
merge some stuff
Demuirgos Feb 20, 2025
a2e71db
fixes to CALL opcodes and CREATE opcodes
Demuirgos Feb 20, 2025
aa0f4bd
Merge branch 'feature/il-contract' into testing/il-contract
Demuirgos Feb 20, 2025
7f831a2
Merge remote-tracking branch 'origin/master' into feature/il-contract
Demuirgos Feb 20, 2025
8eba458
Merge branch 'feature/il-contract' into testing/il-contract
Demuirgos Feb 20, 2025
c515437
+ fix tracing issue
Demuirgos Feb 21, 2025
a85ca30
removed testing artifacts
Demuirgos Feb 21, 2025
7f1d430
+ fix extcode(size|copy) opcodes interaction with CodeInfoRepository
Demuirgos Feb 21, 2025
d63c813
+ fix Extcodes interaction with CodeInfoRepo
Demuirgos Feb 21, 2025
23ca366
fix out of bounds stack index for CREATE/CREATE2
Demuirgos Feb 25, 2025
db838f6
Merge fixes for stack indexing in CREATE2/CREATE
Demuirgos Feb 25, 2025
9a8d3b9
fix JUMPI issue
Demuirgos Feb 26, 2025
b7cb142
amortize is static checks
Demuirgos Feb 26, 2025
cc7b857
Merge branch 'testing/il-contract' into feature/il-contract
Demuirgos Feb 26, 2025
840f3e8
remove forced analysis
Demuirgos Feb 26, 2025
264cbab
fixing jump orders in short-circuited paths in DIV/SDIV/MULMOD
Demuirgos Feb 28, 2025
182c313
Merge fixes from "testing/il-contract" : SDIV/DIV/MULMOD
Demuirgos Feb 28, 2025
26a7096
Merge remote-tracking branch 'origin/master' into testing/il-contract
Demuirgos Feb 28, 2025
bbe23f7
Merge remote-tracking branch 'origin/master' into testing/il-contract
Demuirgos Feb 28, 2025
4c0788a
remove leftover tracer from EthereumTest suite
Demuirgos Feb 28, 2025
74b8d81
fix Benchmark.slnx build issues
Demuirgos Feb 28, 2025
d4d5e77
Merge branch 'testing/il-contract' into feature/il-contract
Demuirgos Feb 28, 2025
35224b7
push nullPtrException fix
Demuirgos Feb 28, 2025
0ce05fc
fix benchmarks setup
Demuirgos Feb 28, 2025
9f0e76d
merged master
Demuirgos Mar 5, 2025
8cef53c
fix ilvm test
Demuirgos Mar 5, 2025
620abe3
hotwire ILVM to be activated for fullAot bydefault
Demuirgos Mar 5, 2025
40046f1
* remove Partial AOT mode to reduce support load
Demuirgos Mar 8, 2025
94372fc
Merge remote-tracking branch 'origin/master' into feature/il-evm
Demuirgos Mar 8, 2025
6aed74f
Merge remote-tracking branch 'origin/master' into feature/il-contract
Demuirgos Mar 8, 2025
a80d8c6
Merge remote-tracking branch 'origin/master' into testing/il-contract
Demuirgos Mar 8, 2025
87b4ce6
fix mishandled contract analysis process
Demuirgos Mar 9, 2025
5951c8d
Merge branch 'testing/il-contract' into feature/il-contract
Demuirgos Mar 9, 2025
f6e75d7
Merge branch 'feature/il-contract' into feature/il-evm
Demuirgos Mar 9, 2025
6725c8f
more cleanup in config, simplify analysis queue-ing process, avoid do…
Demuirgos Mar 10, 2025
a0b8c65
Merge remote-tracking branch 'origin/master' into testing/il-contract
Demuirgos Mar 10, 2025
27ddc5f
Merge branch 'testing/il-contract' into feature/il-contract
Demuirgos Mar 10, 2025
6be9c95
switch defaukt to ILMode.NoIlvm
Demuirgos Mar 10, 2025
acdb50a
Merge branch 'feature/il-contract' into feature/il-evm
Demuirgos Mar 10, 2025
fb69eca
fix Benchmark.slnx build failure
Demuirgos Mar 10, 2025
2d564ec
Merge branch 'testing/il-contract' into feature/il-contract
Demuirgos Mar 10, 2025
4fb2e25
Merge branch 'testing/il-contract' into feature/il-evm
Demuirgos Mar 10, 2025
c43830d
force compiling contracts
Demuirgos Mar 10, 2025
2c4912c
fix aggressive flag hanling in opcode emitter and ILVM compier
Demuirgos Mar 12, 2025
be992a8
work around unreachable code
Demuirgos Mar 13, 2025
aba4ba9
merge fixes introduced in Testing/Il-Contract
Demuirgos Mar 13, 2025
b65320e
Merge branch 'feature/il-contract' into feature/il-evm
Demuirgos Mar 13, 2025
b82560a
remove forced analysis
Demuirgos Mar 13, 2025
36b816b
remove forced analysis
Demuirgos Mar 13, 2025
d15e1e2
turb ilvm on
Demuirgos Mar 13, 2025
28c3598
tighter tresholds
Demuirgos Mar 13, 2025
935b398
Merge remote-tracking branch 'origin/master' into testing/il-contract
Demuirgos Mar 14, 2025
67191f1
fix out of range indexing in stack
Demuirgos Mar 17, 2025
b641de9
activate ILVM aggressive
Demuirgos Mar 17, 2025
33d58b3
fix analyzer indexing being wrong
Demuirgos Mar 17, 2025
58a3b5b
revert arithmteic opcode emitter changes
Demuirgos Mar 19, 2025
4d74ae7
Fix arithmetic operations misbehaving
Demuirgos Mar 20, 2025
10b16f4
prepare for node testing
Demuirgos Mar 20, 2025
f51005c
merge fixes from the testing branch for : Call* opcodes stack indexin…
Demuirgos Mar 20, 2025
e20ff36
Merge remote-tracking branch 'origin/master' into feature/il-contract
Demuirgos Mar 20, 2025
d464083
Merge branch 'feature/il-contract' into feature/il-evm
Demuirgos Mar 20, 2025
dad2249
remove metadata storage after contract analysis
Demuirgos Mar 23, 2025
26b45e8
force analysis of contract on call site
Demuirgos Mar 23, 2025
530f1ac
merge master
Demuirgos Mar 23, 2025
0a51974
fix clr stack issue
Demuirgos Mar 23, 2025
fd41013
fixes to PUSH opcodes and to subsegment stack handling
Demuirgos Mar 24, 2025
adb54aa
prepare for node running
Demuirgos Mar 24, 2025
cd75663
merge fixes from testing/il-contract
Demuirgos Mar 24, 2025
54f9a7f
Merge branch 'feature/il-contract' into feature/il-evm
Demuirgos Mar 24, 2025
a5e0985
remove unused memory from AOT mode
Demuirgos Mar 24, 2025
7dada3c
Merge remote-tracking branch 'origin/master' into testing/il-contract
Demuirgos Mar 24, 2025
f754c70
minor changes
Demuirgos Mar 24, 2025
2359d9e
force ILVM on
Demuirgos Mar 24, 2025
60ae920
reduce memory load while compiling bytecode
Demuirgos Mar 25, 2025
91a355a
change ilvm defaults
Demuirgos Mar 25, 2025
5785b32
move static code to static classes
Demuirgos Mar 25, 2025
2d73d09
remove unsued code, use MemoryMarshall instead of raw loops
Demuirgos Mar 26, 2025
a75af6e
emit opcode checks for only needed ones
Demuirgos Mar 26, 2025
177451d
limit amount of analyzing tasks
Demuirgos Mar 26, 2025
83eb7aa
Merge remote-tracking branch 'origin/master' into testing/il-contract
Demuirgos Mar 26, 2025
54820e0
remove Pattern-Checker mode from branch
Demuirgos Mar 26, 2025
2b8803c
fix Nethermind.Runner VMConfig issue
Demuirgos Mar 26, 2025
60cc224
increase SwapTestTreshold
Demuirgos Mar 26, 2025
291fff9
fix benchmarks
Demuirgos Mar 27, 2025
9607bae
Merge remote-tracking branch 'origin/master' into feature/ilevm/aot-p…
Demuirgos Mar 27, 2025
6aa902f
hotwire ILEVM to be on
Demuirgos Mar 27, 2025
87bc1fd
Dispose of Locals after emittion
Demuirgos Mar 27, 2025
cd4793c
Merge branch 'feature/ilevm/aot-precompiler' into testing/ilevm/aot-p…
Demuirgos Mar 27, 2025
3b45e92
turn on aggressive mode
Demuirgos Mar 27, 2025
67b2da8
decrease treshold for precompilation
Demuirgos Mar 27, 2025
9e05832
remove aggressive mode
Demuirgos Mar 27, 2025
3524303
Reduce Sigil Name allocations and contention
benaadams Mar 27, 2025
d9a8633
turn on aggressive mode (to run CI tests on it)
Demuirgos Mar 27, 2025
2a219a5
remove forced analysis of contracts
Demuirgos Mar 27, 2025
5144930
Atomic start
benaadams Mar 28, 2025
c1fe385
added a simple processing cache
Demuirgos Mar 28, 2025
9b505bb
some few extra atomic exchanges
Demuirgos Mar 28, 2025
fc031d6
Added task count config for ILVM
Demuirgos Mar 29, 2025
58bc91c
added more metrics
Demuirgos Apr 3, 2025
766c8b7
add missing cache check from constructor
Demuirgos Apr 3, 2025
d597a65
add metrics to cache call in ctor
Demuirgos Apr 3, 2025
f91eae2
Add Contract persistence to DLL
Demuirgos Apr 4, 2025
7e2a84c
merge cache feature
Demuirgos Apr 4, 2025
f567195
load contract DLLs on startup
Demuirgos Apr 4, 2025
3b49740
add writing to disk to default config
Demuirgos Apr 5, 2025
a5a2c58
fix loading iled-contracts from dll on startup
Demuirgos Apr 5, 2025
e17be9f
merge master
Demuirgos Apr 6, 2025
97fb575
Merge branch 'feature/ilevm/aot-precompiler' into testing/ilevm/aot-p…
Demuirgos Apr 6, 2025
075f771
fix build issue
Demuirgos Apr 6, 2025
3e3277e
remove local testing flags
Demuirgos Apr 7, 2025
6f3e7dc
fix verification stack overflow
Demuirgos Apr 7, 2025
56e3320
fix Benchmarks.slnx build failure
Demuirgos Apr 7, 2025
579d2c4
remove testing artifact
Demuirgos Apr 8, 2025
01d8324
add more tests, fix PREVRANDAO
Demuirgos Apr 8, 2025
c4f1262
Merge branch 'feature/ilevm/aot-precompiler' of https://github.com/Ne…
Demuirgos Apr 8, 2025
86c80f7
Merge remote-tracking branch 'origin/master' into feature/ilevm/aot-p…
Demuirgos Apr 8, 2025
e0a4348
change background task model
Demuirgos Apr 9, 2025
55386cc
Hot wire config for testing
Demuirgos Apr 9, 2025
c5df100
log ilevm config
Demuirgos Apr 9, 2025
4404ec6
+ add DLL persistence
Demuirgos Apr 17, 2025
8e01de2
prepare for testing
Demuirgos Apr 18, 2025
c6275c3
TEMPORARY Stuff
Demuirgos Apr 22, 2025
71bd917
fix null key forced analysis
Demuirgos Apr 24, 2025
aba095a
add fixedf statement to call site of ILEVM contract
Demuirgos Apr 24, 2025
fdddbaf
avoid naming collision in tests
Demuirgos Apr 25, 2025
690b1a0
fix build issue
Demuirgos Apr 28, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/Nethermind/Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@
<PackageVersion Include="RocksDB" Version="[9.7.3.54622]" />
<PackageVersion Include="SCrypt" Version="2.0.0.2" />
<PackageVersion Include="Shouldly" Version="4.2.1" />
<PackageVersion Include="Sigil" Version="5.0.0" />
<PackageVersion Include="Snappier" Version="1.1.6" />
<PackageVersion Include="System.CommandLine" Version="2.0.0-beta4.24528.1" />
<PackageVersion Include="System.Configuration.ConfigurationManager" Version="9.0.1" />
Expand Down
1 change: 1 addition & 0 deletions src/Nethermind/Ethereum.Test.Base/BlockchainTestBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ public UInt256 Calculate(BlockHeader header, BlockHeader parent)

protected async Task<EthereumTestResult> RunTest(BlockchainTest test, Stopwatch? stopwatch = null, bool failOnInvalidRlp = true)
{
Debug.WriteLine("============================================================================================================");
TestContext.Out.WriteLine($"Running {test.Name}, Network: [{test.Network.Name}] at {DateTime.UtcNow:HH:mm:ss.ffffff}");
if (test.NetworkAfterTransition is not null)
TestContext.Out.WriteLine($"Network after transition: [{test.NetworkAfterTransition.Name}] at {test.TransitionForkActivation}");
Expand Down
2 changes: 2 additions & 0 deletions src/Nethermind/Nethermind.Api/IBasicApi.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
using Nethermind.Core.Timers;
using Nethermind.Crypto;
using Nethermind.Db;
using Nethermind.Evm.Config;
using Nethermind.KeyStore;
using Nethermind.Logging;
using Nethermind.Serialization.Json;
Expand All @@ -33,6 +34,7 @@ public interface IBasicApi
ICryptoRandom CryptoRandom { get; }
IDbProvider? DbProvider { get; set; }
IDbFactory? DbFactory { get; set; }
IVMConfig? VMConfig { get; }
IEthereumEcdsa? EthereumEcdsa { get; set; }
[SkipServiceCollection]
IJsonSerializer EthereumJsonSerializer { get; }
Expand Down
2 changes: 2 additions & 0 deletions src/Nethermind/Nethermind.Api/NethermindApi.cs
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@
using Nethermind.Wallet;
using Nethermind.Sockets;
using Nethermind.Trie;
using Nethermind.Evm.Config;
using Nethermind.Consensus.Processing.CensorshipDetector;
using Nethermind.Facade.Find;

Expand Down Expand Up @@ -123,6 +124,7 @@ public IBlockchainBridge CreateBlockchainBridge()
}

public IAbiEncoder AbiEncoder { get; } = Nethermind.Abi.AbiEncoder.Instance;
public IVMConfig? VMConfig { get; }
public IBlobTxStorage? BlobTxStorage { get; set; }
public CompositeBlockPreprocessorStep BlockPreprocessor { get; } = new();
public IBlockProcessingQueue? BlockProcessingQueue { get; set; }
Expand Down
114 changes: 111 additions & 3 deletions src/Nethermind/Nethermind.Benchmark.Runner/Program.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited
// SPDX-License-Identifier: LGPL-3.0-only


// #define BENCHMARK
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
Expand All @@ -11,6 +13,20 @@
using BenchmarkDotNet.Running;
using System.Linq;
using BenchmarkDotNet.Toolchains.InProcess.NoEmit;
using Nethermind.Evm.Benchmark;
using Nethermind.Evm.Config;
using Nethermind.Abi;
using Nethermind.Evm;
using System;
using Nethermind.Core.Extensions;
using NSubstitute;
using Nethermind.Int256;
using BenchmarkDotNet.Toolchains.DotNetCli;
using CommandLine;
using System.IO;
using Nethermind.Evm.CodeAnalysis.IL;
using static Nethermind.Evm.VirtualMachine;
using Microsoft.Diagnostics.Runtime;
using BenchmarkDotNet.Columns;
using Nethermind.Precompiles.Benchmark;

Expand Down Expand Up @@ -46,14 +62,106 @@ public PrecompileBenchmarkConfig() : base(Job.MediumRun.WithRuntime(CoreRuntime.

public static class Program
{
public class Options
{
[Option('m', "mode", Default = "full", Required = true, HelpText = "Available modes: full, evm, ilevm")]
public string Mode { get; set; }

[Option('b', "bytecode", Required = false, HelpText = "Hex encoded bytecode")]
public string ByteCode { get; set; }

[Option('n', "identifier", Required = false, HelpText = "Benchmark Name")]
public string Name { get; set; }

[Option('c', "config", Required = false, HelpText = "EVM configs : 0-STD, 2-AOT")]
public string Config { get; set; }
}

public static void Run(ILocalSetup setup, int iterations)
{
for (int i = 0; i < iterations; i++)
{
setup.Setup();
setup.Run();
setup.Reset();
}
}

public static void Main(string[] args)
{
List<Assembly> additionalJobAssemblies = [
ParserResult<Options> options = Parser.Default.ParseArguments<Options>(args);
switch (options.Value.Mode)
{
case "full":
RunFullBenchmark(args);
break;
case "evm":
RunEvmBenchmarks(options.Value);
break;
case "ilevm":
RunIlEvmBenchmarks(options.Value);
break;
default:
throw new Exception("Invalid mode");
}
}

public static void RunEvmBenchmarks(Options options)
{
int mode = 1 | 2 | 4 | 8;
Environment.SetEnvironmentVariable("NETH.BENCHMARK.BYTECODE.MODE", mode.ToString());

if (String.IsNullOrEmpty(options.ByteCode) || String.IsNullOrEmpty(options.Name))
{
BenchmarkRunner.Run(typeof(Nethermind.Evm.Benchmark.EvmBenchmarks), new DashboardConfig(Job.VeryLongRun.WithRuntime(CoreRuntime.Core90)));
}
else
{
string bytecode = options.ByteCode;
if (Path.Exists(bytecode))
{
bytecode = File.ReadAllText(bytecode);
}

Environment.SetEnvironmentVariable("NETH.BENCHMARK.BYTECODE.CODE", bytecode);
Environment.SetEnvironmentVariable("NETH.BENCHMARK.BYTECODE.NAME", options.Name);
var summary = BenchmarkRunner.Run<CustomEvmBenchmarks>(new DashboardConfig(Job.MediumRun.WithRuntime(CoreRuntime.Core90)));
}
}


public static void RunIlEvmBenchmarks(Options options)
{
Environment.SetEnvironmentVariable("NETH.BENCHMARK.BYTECODE.MODE", options.Config);

if (String.IsNullOrEmpty(options.ByteCode) || String.IsNullOrEmpty(options.Name))
{
BenchmarkRunner.Run(typeof(Nethermind.Evm.Benchmark.EvmBenchmarks), new DashboardConfig(Job.VeryLongRun.WithRuntime(CoreRuntime.Core90)));
}
else
{
string bytecode = options.ByteCode;
if (Path.Exists(bytecode))
{
bytecode = File.ReadAllText(bytecode);
}

Environment.SetEnvironmentVariable("NETH.BENCHMARK.BYTECODE.CODE", bytecode);
Environment.SetEnvironmentVariable("NETH.BENCHMARK.BYTECODE.Name", options.Name);
var summary = BenchmarkRunner.Run<CustomEvmBenchmarks>(new DashboardConfig(Job.MediumRun.WithRuntime(CoreRuntime.Core90)));
}
}

public static void RunFullBenchmark(string[] args)
{
List<Assembly> additionalJobAssemblies = new()
{
typeof(JsonRpc.Benchmark.EthModuleBenchmarks).Assembly,
typeof(Benchmarks.Core.Keccak256Benchmarks).Assembly,
typeof(Evm.Benchmark.EvmStackBenchmarks).Assembly,
typeof(Network.Benchmarks.DiscoveryBenchmarks).Assembly,
];
typeof(Precompiles.Benchmark.KeccakBenchmark).Assembly
};

List<Assembly> simpleJobAssemblies = [
// typeof(EthereumTests.Benchmark.EthereumTests).Assembly,
Expand All @@ -67,7 +175,7 @@ public static void Main(string[] args)
{
foreach (Assembly assembly in additionalJobAssemblies)
{
BenchmarkRunner.Run(assembly, new DashboardConfig(Job.MediumRun.WithRuntime(CoreRuntime.Core90)), args);
BenchmarkRunner.Run(assembly, new DashboardConfig(Job.MediumRun.WithRuntime(CoreRuntime.Core80)), args);
}

foreach (Assembly assembly in simpleJobAssemblies)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"profiles": {
"Nethermind.Benchmark.Runner": {
"commandName": "Project",
"commandLineArgs": "-m ilevm -c 2"
}
}
}
4 changes: 2 additions & 2 deletions src/Nethermind/Nethermind.Core/Collections/ArrayPoolList.cs
Original file line number Diff line number Diff line change
Expand Up @@ -375,19 +375,19 @@ public void Dispose()
GC.SuppressFinalize(this);
#endif
}

#if DEBUG
private readonly StackTrace _creationStackTrace = new();

/*
~ArrayPoolList()
{
if (_capacity != 0 && !_disposed)
{
throw new InvalidOperationException($"{nameof(ArrayPoolList<T>)} hasn't been disposed. Created {_creationStackTrace}");
}
}
*/
#endif

public Span<T> AsSpan() => _array.AsSpan(0, Count);
public Memory<T> AsMemory() => new(_array, 0, Count);
public ReadOnlyMemory<T> AsReadOnlyMemory() => new(_array, 0, Count);
Expand Down
5 changes: 5 additions & 0 deletions src/Nethermind/Nethermind.Core/Extensions/IntExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,11 @@ namespace Nethermind.Core.Extensions;

public static class IntExtensions
{
public static bool HasFlag(this int @this, int flag)
{
return (@this & flag) == flag;
}

public static string ToHexString(this int @this)
{
return $"0x{@this:x}";
Expand Down
Loading