-
Notifications
You must be signed in to change notification settings - Fork 19
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
# Goal The goal of this PR is to calculate the DB benchmarks based on current main-net state. Related to #1853 # Warning - **Current PR will change all weights for stable weights** If that is not desirable, we can use defaults for stable weights but it would not be a correct metric for measuring consumed resources. # Discussion - Calculated the benchmark with `1.3` multiplier. If we expect to add more than 30% keys in the next 6 months we need to increase this multiplier. # Checklist - [X] Spec version incremented? # Execution steps 1. download a copy of mainnet chain data 2. build the same version of frequency that is running on mainnet by running `cargo build --release --features frequency,runtime-benchmarks` 3. run the storage benchmark by pointing the path to the copy of mainnet data like following `./target/release/frequency benchmark storage --state-version=1 --chain=frequency --base-path=/home/ubuntu/mainnet_data/ --include-child-trees --warmups=2 --mul=1.3` ```bash 2024-08-22 20:04:37 Warmup round 1/2 2024-08-22 20:09:03 Warmup round 2/2 2024-08-22 20:13:29 Preparing keys from block 0x09b2…00e2 2024-08-22 20:13:50 Reading 7585867 keys 2024-08-22 20:18:48 Reading 1705264 child keys 2024-08-22 20:19:57 Time summary [ns]: Total: 281753393895 Min: 1676, Max: 3967371 Average: 36369, Median: 36876, Stddev: 10368.83 Percentiles 99th, 95th, 75th: 60542, 52621, 43407 Value size summary: Total: 441863634 Min: 0, Max: 891362 Average: 57, Median: 8, Stddev: 363.51 Percentiles 99th, 95th, 75th: 1026, 253, 35 2024-08-22 20:20:18 Warmup round 1/2 2024-08-22 20:24:42 Warmup round 2/2 2024-08-22 20:29:06 Preparing keys from block 0x09b2…00e2 2024-08-22 20:29:29 Writing 7585867 keys 2024-08-22 20:53:04 Writing 1705264 child keys 2024-08-22 20:55:54 Time summary [ns]: Total: 443223318406 Min: 4954, Max: 87545132 Average: 57212, Median: 62141, Stddev: 60272.19 Percentiles 99th, 95th, 75th: 101820, 90948, 75800 Value size summary: Total: 441863634 Min: 0, Max: 891362 Average: 57, Median: 8, Stddev: 363.51 Percentiles 99th, 95th, 75th: 1026, 253, 35 2024-08-22 20:55:54 Writing weights to "/home/ubuntu/frequency/rocksdb_weights.rs" ```
- Loading branch information
Showing
7 changed files
with
125 additions
and
25 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
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,95 @@ | ||
//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev | ||
//! DATE: 2024-08-22 (Y/M/D) | ||
//! HOSTNAME: `ip-10-173-4-131`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` | ||
//! | ||
//! DATABASE: `RocksDb`, RUNTIME: `Frequency` | ||
//! BLOCK-NUM: `BlockId::Number(4413540)` | ||
//! SKIP-WRITE: `false`, SKIP-READ: `false`, WARMUPS: `2` | ||
//! STATE-VERSION: `V1`, STATE-CACHE-SIZE: `` | ||
//! WEIGHT-PATH: `` | ||
//! METRIC: `Average`, WEIGHT-MUL: `1.3`, WEIGHT-ADD: `0` | ||
// Executed Command: | ||
// ./target/release/frequency | ||
// benchmark | ||
// storage | ||
// --state-version=1 | ||
// --chain=frequency | ||
// --base-path=/data | ||
// --include-child-trees | ||
// --warmups=2 | ||
// --mul=1.3 | ||
|
||
/// Storage DB weights for the `Frequency` runtime and `RocksDb`. | ||
pub mod constants { | ||
use frame_support::weights::constants; | ||
use sp_core::parameter_types; | ||
use sp_weights::RuntimeDbWeight; | ||
|
||
parameter_types! { | ||
/// By default, Substrate uses `RocksDB`, so this will be the weight used throughout | ||
/// the runtime. | ||
pub const RocksDbWeight: RuntimeDbWeight = RuntimeDbWeight { | ||
// Time to read one storage item. | ||
// Calculated by multiplying the *Average* of all values with `1.3` and adding `0`. | ||
// | ||
// Stats nanoseconds: | ||
// Min, Max: 1_676, 3_967_371 | ||
// Average: 36_369 | ||
// Median: 36_876 | ||
// Std-Dev: 10368.83 | ||
// | ||
// Percentiles nanoseconds: | ||
// 99th: 60_542 | ||
// 95th: 52_621 | ||
// 75th: 43_407 | ||
read: 47_280 * constants::WEIGHT_REF_TIME_PER_NANOS, | ||
|
||
// Time to write one storage item. | ||
// Calculated by multiplying the *Average* of all values with `1.3` and adding `0`. | ||
// | ||
// Stats nanoseconds: | ||
// Min, Max: 4_954, 87_545_132 | ||
// Average: 57_212 | ||
// Median: 62_141 | ||
// Std-Dev: 60272.19 | ||
// | ||
// Percentiles nanoseconds: | ||
// 99th: 101_820 | ||
// 95th: 90_948 | ||
// 75th: 75_800 | ||
write: 74_376 * constants::WEIGHT_REF_TIME_PER_NANOS, | ||
}; | ||
} | ||
|
||
#[cfg(test)] | ||
mod test_db_weights { | ||
use super::constants::RocksDbWeight as W; | ||
use sp_weights::constants; | ||
|
||
/// Checks that all weights exist and have sane values. | ||
// NOTE: If this test fails but you are sure that the generated values are fine, | ||
// you can delete it. | ||
#[test] | ||
fn bound() { | ||
// At least 1 µs. | ||
assert!( | ||
W::get().reads(1).ref_time() >= constants::WEIGHT_REF_TIME_PER_MICROS, | ||
"Read weight should be at least 1 µs." | ||
); | ||
assert!( | ||
W::get().writes(1).ref_time() >= constants::WEIGHT_REF_TIME_PER_MICROS, | ||
"Write weight should be at least 1 µs." | ||
); | ||
// At most 1 ms. | ||
assert!( | ||
W::get().reads(1).ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, | ||
"Read weight should be at most 1 ms." | ||
); | ||
assert!( | ||
W::get().writes(1).ref_time() <= constants::WEIGHT_REF_TIME_PER_MILLIS, | ||
"Write weight should be at most 1 ms." | ||
); | ||
} | ||
} | ||
} |
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