-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Move benchmark contracts to era_vm (#218)
* Add benchmark contracts and modify Makefile accordingly * Add benchmark results processing script * Update zksync-era commit pointer * Add flamegraph command to Makefile * makefile: make contract build always phony * makefile: update target name * makefile: update makefile * ci: add flamegraph check * ci: cargo-flamegraph through binstall * ci: install flamegraph with cargo-bin * ci: add zksync-home env-var * ci: add perf deps * ci: do not open svg on fg check * ci: do not check flamegraphs --------- Co-authored-by: Julian Ventura <[email protected]> Co-authored-by: Fran <[email protected]>
- Loading branch information
1 parent
817d0f3
commit 6b5efb9
Showing
10 changed files
with
194 additions
and
10 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
import re | ||
import sys | ||
|
||
def convert_to_ms(value, unit): | ||
if unit == 'µs': | ||
return value / 1000 | ||
elif unit == 'ms': | ||
return value | ||
elif unit == 's': | ||
return value * 1000 | ||
else: | ||
raise ValueError(f"Unknown time unit: {unit}") | ||
|
||
def parse_benchmark_file(file_path): | ||
machines = {} | ||
pattern = r'(\w+)/\w+\s+time:\s+\[\d+(?:\.\d+)?\s(\w+)\s(\d+(?:\.\d+)?)\s(\w+)\s\d+(?:\.\d+)?\s(\w+)\]' | ||
|
||
with open(file_path, 'r') as file: | ||
content = file.read() | ||
# Clean the file content | ||
cleaned_content = re.sub(r'\n(\s+)time:', ' time:', content) | ||
for line in cleaned_content.split('\n'): | ||
match = re.match(pattern, line) | ||
if match: | ||
machine, lower_unit, mid_time, mid_unit, upper_unit = match.groups() | ||
# Convert mid_time to milliseconds | ||
mid_time_ms = convert_to_ms(float(mid_time), mid_unit) | ||
machines[machine] = machines.get(machine, 0) + mid_time_ms | ||
|
||
return machines | ||
|
||
def main(): | ||
if len(sys.argv) != 2: | ||
print("Usage: results.py <path-to-file>") | ||
return | ||
file_path = sys.argv[1] | ||
results = parse_benchmark_file(file_path) | ||
|
||
for machine, total_time in results.items(): | ||
print(f"Total {machine} time: {total_time:.3f} ms") | ||
|
||
if not "lambda" in results: | ||
return | ||
|
||
print("") | ||
|
||
if "legacy" in results: | ||
lambda_vs_legacy = round(results["lambda"] / results["legacy"], 1) | ||
print(f"lambda_vm took x{lambda_vs_legacy} more than legacy_vm") | ||
if "fast" in results: | ||
lambda_vs_fast = round(results["lambda"] / results["fast"], 1) | ||
print(f"lambda_vm took x{lambda_vs_fast} more than fast_vm") | ||
|
||
if __name__ == "__main__": | ||
main() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
pragma solidity ^0.8.0; | ||
|
||
contract benchmark { | ||
uint256 value; | ||
constructor() { | ||
value = fac(57); | ||
} | ||
|
||
function get_calculation() public view returns (uint256) { | ||
return value; | ||
} | ||
|
||
function fac(uint n) internal pure returns(uint256) { | ||
uint256 r = 1; | ||
for (uint256 k = 2; k <= n; k++) { | ||
r = k * r; | ||
} | ||
|
||
return r; | ||
} | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
pragma solidity ^0.8.0; | ||
|
||
contract benchmark { | ||
uint256 value; | ||
constructor() { | ||
value = fac(57); | ||
} | ||
|
||
function get_calculation() public view returns (uint256) { | ||
return value; | ||
} | ||
|
||
function fac(uint256 n) internal returns (uint256) { | ||
if (n <= 1) { | ||
return 1; | ||
} | ||
return n * fac(n - 1); | ||
} | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
pragma solidity ^0.8.0; | ||
|
||
contract benchmark { | ||
uint256 value; | ||
constructor() { | ||
value = fib(370); | ||
} | ||
|
||
function get_calculation() public view returns (uint256) { | ||
return value; | ||
} | ||
|
||
function fib(uint n) internal pure returns(uint b) { | ||
if (n == 0) { | ||
return 0; | ||
} | ||
uint a = 1; | ||
b = 1; | ||
for (uint i = 2; i < n; i++) { | ||
uint c = a + b; | ||
a = b; | ||
b = c; | ||
} | ||
return b; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
pragma solidity ^0.8.0; | ||
|
||
contract benchmark { | ||
uint256 value; | ||
constructor() { | ||
value = fib(25); | ||
} | ||
|
||
function get_calculation() public view returns (uint256) { | ||
return value; | ||
} | ||
|
||
function fib(uint256 n) internal returns (uint256) { | ||
if (n <= 1) { | ||
return n; | ||
} | ||
return fib(n - 1) + fib(n - 2); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
pragma solidity ^0.8.0; | ||
|
||
contract HeapBenchmark { | ||
constructor() { | ||
uint256 v1 = 0; | ||
uint256 v2 = 0; | ||
uint256 n = 16000; | ||
uint256[] memory array = new uint256[](1); | ||
|
||
assembly { | ||
mstore(add(array, sub(n, 1)), 4242) | ||
|
||
let j := 0 | ||
for {} lt(j, n) {} { | ||
v1 := mload(add(array, mod(mul(j, j), n))) | ||
v2 := mload(add(array, j)) | ||
mstore(add(array, j), add(add(v1, v2), 42)) | ||
j := add(j, 1) | ||
if gt(j, sub(n, 1)) { | ||
j := 0 | ||
} | ||
} | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
pragma solidity >=0.8.20; | ||
|
||
contract Send { | ||
constructor() { | ||
address payable self = payable(msg.sender); | ||
self.call{value: 100}; | ||
} | ||
} |