From 7956f19e2a9c57c29626a6f6e82b31e522c96f16 Mon Sep 17 00:00:00 2001 From: Brandon Vrooman Date: Wed, 22 Nov 2023 05:46:44 -0500 Subject: [PATCH] dev: update vm initialization benchmark (#1505) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Updates https://github.com/FuelLabs/fuel-core/pull/1502 to use dependent gas price for `vm_initialization`. This PR: - Adapts the `vm_initialization` gas cost to a dependent cost - Modifies the VM initialization benchmark to use a variable size transaction - Updates `fuel-vm` to the newly created `v0.42.2` This adds the following benchmarks to the suite: ``` vm_initialization/vm_initialization_with_tx_size_2191080 time: [385.44 µs 387.54 µs 389.67 µs] thrpt: [5.2368 GiB/s 5.2655 GiB/s 5.2942 GiB/s] vm_initialization/vm_initialization_with_tx_size_2322152 time: [407.82 µs 409.68 µs 411.57 µs] thrpt: [5.2547 GiB/s 5.2790 GiB/s 5.3030 GiB/s] vm_initialization/vm_initialization_with_tx_size_2453224 time: [424.74 µs 426.49 µs 428.23 µs] thrpt: [5.3354 GiB/s 5.3570 GiB/s 5.3791 GiB/s] vm_initialization/vm_initialization_with_tx_size_2584296 time: [445.98 µs 450.28 µs 456.29 µs] thrpt: [5.2748 GiB/s 5.3452 GiB/s 5.3966 GiB/s] vm_initialization/vm_initialization_with_tx_size_2715368 time: [468.75 µs 473.45 µs 479.25 µs] thrpt: [5.2767 GiB/s 5.3414 GiB/s 5.3949 GiB/s] vm_initialization/vm_initialization_with_tx_size_2846440 time: [490.47 µs 494.15 µs 498.82 µs] thrpt: [5.3145 GiB/s 5.3647 GiB/s 5.4049 GiB/s] vm_initialization/vm_initialization_with_tx_size_2977512 time: [505.35 µs 509.33 µs 513.98 µs] thrpt: [5.3952 GiB/s 5.4445 GiB/s 5.4873 GiB/s] vm_initialization/vm_initialization_with_tx_size_3108584 time: [526.05 µs 529.11 µs 532.63 µs] thrpt: [5.4355 GiB/s 5.4717 GiB/s 5.5035 GiB/s] vm_initialization/vm_initialization_with_tx_size_3239656 time: [547.18 µs 550.45 µs 553.83 µs] thrpt: [5.4478 GiB/s 5.4813 GiB/s 5.5140 GiB/s] vm_initialization/vm_initialization_with_tx_size_3370728 time: [565.98 µs 568.75 µs 571.58 µs] thrpt: [5.4923 GiB/s 5.5195 GiB/s 5.5465 GiB/s] vm_initialization/vm_initialization_with_tx_size_3501800 time: [585.76 µs 588.62 µs 591.47 µs] thrpt: [5.5139 GiB/s 5.5406 GiB/s 5.5677 GiB/s] vm_initialization/vm_initialization_with_tx_size_3632872 time: [607.51 µs 610.83 µs 614.26 µs] thrpt: [5.5080 GiB/s 5.5390 GiB/s 5.5693 GiB/s] vm_initialization/vm_initialization_with_tx_size_3763944 time: [630.00 µs 635.47 µs 642.49 µs] thrpt: [5.4560 GiB/s 5.5163 GiB/s 5.5642 GiB/s] vm_initialization/vm_initialization_with_tx_size_3895016 time: [652.06 µs 656.04 µs 660.74 µs] thrpt: [5.4901 GiB/s 5.5294 GiB/s 5.5632 GiB/s] vm_initialization/vm_initialization_with_tx_size_4026088 time: [664.38 µs 667.29 µs 670.21 µs] thrpt: [5.5946 GiB/s 5.6191 GiB/s 5.6438 GiB/s] vm_initialization/vm_initialization_with_tx_size_4157160 time: [712.86 µs 718.35 µs 724.60 µs] thrpt: [5.3431 GiB/s 5.3896 GiB/s 5.4311 GiB/s] ``` Locally, this produces the following dependent cost for VM initialization: ``` vm_initialization: DependentCost::LightOperation { base: 55476, units_per_gas: 39, }, ``` --------- Co-authored-by: xgreenx --- Cargo.lock | 32 +++---- Cargo.toml | 2 +- .../block_target_gas_set/default_gas_costs.rs | 5 +- benches/benches/vm_initialization.rs | 85 ++++++++++--------- ...s__snapshot_configurable_block_height.snap | 7 +- ...ests__snapshot_contract_with_balances.snap | 7 +- ...__tests__snapshot_contract_with_state.snap | 7 +- ...ts__snapshot_contract_with_tx_pointer.snap | 7 +- ...tests__snapshot_contract_with_utxo_id.snap | 7 +- ..._tests__snapshot_local_testnet_config.snap | 7 +- ...ig__tests__snapshot_simple_coin_state.snap | 7 +- ...nfig__tests__snapshot_simple_contract.snap | 7 +- ..._tests__snapshot_simple_message_state.snap | 7 +- crates/client/assets/schema.sdl | 2 +- crates/client/src/client/schema/chain.rs | 2 +- ..._chain__tests__chain_gql_query_output.snap | 12 ++- crates/client/src/client/types/gas_costs.rs | 2 +- crates/fuel-core/src/schema/chain.rs | 2 +- .../scripts/chainspec/beta_chainspec.json | 7 +- .../scripts/chainspec/dev_chainspec.json | 7 +- 20 files changed, 149 insertions(+), 72 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 05a2dc7e0fa..c1cf36b1949 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2725,9 +2725,9 @@ dependencies = [ [[package]] name = "fuel-asm" -version = "0.42.1" +version = "0.43.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b13417c82e9e9e90c94c5fedb7b86bff7b0ea13ed1f4c81339e555b82e67e84e" +checksum = "3cee560e1eeac4d292e38111f694f21983377176eb600b57cacaed86b747ffa2" dependencies = [ "bitflags 2.4.1", "fuel-types", @@ -3245,9 +3245,9 @@ dependencies = [ [[package]] name = "fuel-crypto" -version = "0.42.1" +version = "0.43.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8a8e6ca339ad11d35fe5946a3df82145e278aac047ba0df144049c5dea17c0c" +checksum = "fca614c332efaeaae796a80c72c0a29a3853eab6c2af67379bd01473e0277449" dependencies = [ "coins-bip32", "coins-bip39", @@ -3266,9 +3266,9 @@ dependencies = [ [[package]] name = "fuel-derive" -version = "0.42.1" +version = "0.43.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c6aff693526d00fd02aa7142ac8d4f90d23dec568894ebda7aa103efee36040" +checksum = "1efdc9a47d14947cd50e88161eb2b6c85e0ce34a00a321103f1f7764e8d6b0d3" dependencies = [ "proc-macro2", "quote", @@ -3278,9 +3278,9 @@ dependencies = [ [[package]] name = "fuel-merkle" -version = "0.42.1" +version = "0.43.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "725b6cf70f38dc7f46b7b4b6aa9b3c7e6b50af0a08da8e7c615ffddc54287ff3" +checksum = "eeb0d0661a655f7753afa5124ccd90a7b9218cb6d777235060b09f4da9feb22d" dependencies = [ "derive_more", "digest 0.10.7", @@ -3293,15 +3293,15 @@ dependencies = [ [[package]] name = "fuel-storage" -version = "0.42.1" +version = "0.43.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc29ddcc34d400dcad6b7d9c25216b9cd515eaf3cc289aebbbd1a860aa80c73f" +checksum = "97697cb72cb86e33dd5a3ef5509a233a290174f4b3b5c43b4be4484ccb6b2fc0" [[package]] name = "fuel-tx" -version = "0.42.1" +version = "0.43.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793f11642d2b015207c0f695ae849d259fd9c52513b67765d43b8f2e027c82a4" +checksum = "194617f09afa17e8cc4c4127ceed1d0fb1549680eb9b2a90c743605298a1c33e" dependencies = [ "bitflags 2.4.1", "derivative", @@ -3321,9 +3321,9 @@ dependencies = [ [[package]] name = "fuel-types" -version = "0.42.1" +version = "0.43.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f87f58ab7b1673b603b0c579a6603213b1327f5788ddf1436a9369ddf49d0402" +checksum = "c0a170bd25f8cc3def3833b2032646bf1ca77460353dfa8b2b89c4d83ad1f2cf" dependencies = [ "fuel-derive", "hex", @@ -3333,9 +3333,9 @@ dependencies = [ [[package]] name = "fuel-vm" -version = "0.42.1" +version = "0.43.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7dd8074481f0b6b4bdf30cdcb5cefb81b9b2b8108fb1de2abf96161dcf4d3d3" +checksum = "c3e24e0f8e58c08192dd012eef70f47063aa48e4222209df6044aa0a471e0fd6" dependencies = [ "anyhow", "async-trait", diff --git a/Cargo.toml b/Cargo.toml index ed9aa041a40..5677557a413 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -77,7 +77,7 @@ fuel-core-tests = { version = "0.0.0", path = "./tests" } fuel-core-xtask = { version = "0.0.0", path = "./xtask" } # Fuel dependencies -fuel-vm-private = { version = "0.42.1", package = "fuel-vm", default-features = false } +fuel-vm-private = { version = "0.43.0", package = "fuel-vm", default-features = false } # Common dependencies anyhow = "1.0" diff --git a/benches/benches/block_target_gas_set/default_gas_costs.rs b/benches/benches/block_target_gas_set/default_gas_costs.rs index cd72bc31e6e..e2246fe9bf9 100644 --- a/benches/benches/block_target_gas_set/default_gas_costs.rs +++ b/benches/benches/block_target_gas_set/default_gas_costs.rs @@ -43,7 +43,10 @@ pub fn default_gas_costs() -> GasCostsValues { lw: 2, mint: 25515, mlog: 2, - vm_initialization: 1, + vm_initialization: DependentCost::HeavyOperation { + base: 2000, + gas_per_unit: 0, + }, modi: 2, mod_op: 2, movi: 2, diff --git a/benches/benches/vm_initialization.rs b/benches/benches/vm_initialization.rs index b5fae21f5ff..95b28a924c3 100644 --- a/benches/benches/vm_initialization.rs +++ b/benches/benches/vm_initialization.rs @@ -1,6 +1,7 @@ use criterion::{ black_box, Criterion, + Throughput, }; use fuel_core_types::{ fuel_asm::{ @@ -17,8 +18,12 @@ use fuel_core_types::{ Transaction, Word, }, + fuel_types::canonical::Serialize, fuel_vm::{ - checked_transaction::IntoChecked, + checked_transaction::{ + Checked, + IntoChecked, + }, interpreter::NotSupportedEcal, Interpreter, }, @@ -29,11 +34,13 @@ use rand::{ SeedableRng, }; -pub fn vm_initialization(c: &mut Criterion) { - let rng = &mut StdRng::seed_from_u64(8586); +fn transaction( + rng: &mut R, + script: Vec, + script_data: Vec, +) -> Checked