From 8726f7881f744648ff2ae5c928a5ca9af703bed9 Mon Sep 17 00:00:00 2001 From: Sebastian Kunert <skunert49@gmail.com> Date: Fri, 8 Sep 2023 10:09:42 +0200 Subject: [PATCH] Add cache to test --- Cargo.lock | 1 + cumulus/pallets/parachain-system/Cargo.toml | 1 + .../src/validate_block/implementation.rs | 1 + .../src/validate_block/tests.rs | 31 +++++++++++++------ .../src/validate_block/trie_recorder.rs | 13 ++++---- 5 files changed, 32 insertions(+), 15 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d4dc84709f0..04c36109a0c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3556,6 +3556,7 @@ dependencies = [ "rand 0.8.5", "sc-client-api", "scale-info", + "sp-api", "sp-core", "sp-externalities", "sp-inherents", diff --git a/cumulus/pallets/parachain-system/Cargo.toml b/cumulus/pallets/parachain-system/Cargo.toml index 48e2209ff29..d89d2b2d067 100644 --- a/cumulus/pallets/parachain-system/Cargo.toml +++ b/cumulus/pallets/parachain-system/Cargo.toml @@ -20,6 +20,7 @@ frame-system = { path = "../../../substrate/frame/system", default-features = fa sp-core = { path = "../../../substrate/primitives/core", default-features = false} sp-externalities = { path = "../../../substrate/primitives/externalities", default-features = false} sp-inherents = { path = "../../../substrate/primitives/inherents", default-features = false} +sp-api = { path = "../../../substrate/primitives/api", default-features = false} sp-io = { path = "../../../substrate/primitives/io", default-features = false} sp-runtime = { path = "../../../substrate/primitives/runtime", default-features = false} sp-state-machine = { path = "../../../substrate/primitives/state-machine", default-features = false} diff --git a/cumulus/pallets/parachain-system/src/validate_block/implementation.rs b/cumulus/pallets/parachain-system/src/validate_block/implementation.rs index 7dd339b211f..78df38947d4 100644 --- a/cumulus/pallets/parachain-system/src/validate_block/implementation.rs +++ b/cumulus/pallets/parachain-system/src/validate_block/implementation.rs @@ -93,6 +93,7 @@ where B::Extrinsic: ExtrinsicCall, <B::Extrinsic as Extrinsic>::Call: IsSubType<crate::Call<PSC>>, { + sp_api::init_runtime_logger(); let block_data = codec::decode_from_bytes::<ParachainBlockData<B>>(block_data) .expect("Invalid parachain block data"); diff --git a/cumulus/pallets/parachain-system/src/validate_block/tests.rs b/cumulus/pallets/parachain-system/src/validate_block/tests.rs index 15fd67d5431..d6b9cadb15d 100644 --- a/cumulus/pallets/parachain-system/src/validate_block/tests.rs +++ b/cumulus/pallets/parachain-system/src/validate_block/tests.rs @@ -31,8 +31,7 @@ use sp_trie::TrieRecorderProvider; use std::{env, process::Command}; use trie_standardmap::{Alphabet, StandardMap, ValueMode}; -use crate::validate_block::trie_recorder::RecorderProvider; -use crate::validate_block::MemoryOptimizedValidationParams; +use crate::validate_block::{trie_recorder::RecorderProvider, MemoryOptimizedValidationParams}; fn call_validate_block_encoded_header( parent_head: Header, @@ -326,32 +325,46 @@ fn create_trie() -> (MemoryDB, TrieHash<Layout>, Vec<(Vec<u8>, Vec<u8>)>) { (db, root, x) } use rand::Rng; +use sp_trie::cache::{CacheSize, SharedTrieCache}; #[test] fn recorder_does_its_thing() { + sp_tracing::try_init_simple(); let (db, root, values) = create_trie(); let mut rng = rand::thread_rng(); - for _ in 1..100 { - let reference_recorder = Recorder::default(); - let recorder_under_test: RecorderProvider<sp_core::Blake2Hasher> = RecorderProvider::new(); + for _ in 1..2 { + let mut reference_recorder = Recorder::default(); + let recorder_for_test: RecorderProvider<sp_core::Blake2Hasher> = RecorderProvider::new(); + let reference_cache: SharedTrieCache<sp_core::Blake2Hasher> = + SharedTrieCache::new(CacheSize::new(1024 * 5)); + let cache_for_test: SharedTrieCache<sp_core::Blake2Hasher> = + SharedTrieCache::new(CacheSize::new(1024 * 5)); { + let mut local_cache = cache_for_test.local_cache(); + let mut trie_cache_for_reference = local_cache.as_trie_db_cache(root); let mut reference_trie_recorder = reference_recorder.as_trie_recorder(root); let reference_trie = TrieDBBuilder::<Layout>::new(&db, &root) .with_recorder(&mut reference_trie_recorder) + .with_cache(&mut trie_cache_for_reference) .build(); - let mut trie_recorder_under_test = recorder_under_test.as_trie_recorder(root); + let mut local_cache_for_test = cache_for_test.local_cache(); + let mut trie_cache_for_test = local_cache_for_test.as_trie_db_cache(root); + let mut trie_recorder_under_test = recorder_for_test.as_trie_recorder(root); let test_trie = TrieDBBuilder::<Layout>::new(&db, &root) .with_recorder(&mut trie_recorder_under_test) + .with_cache(&mut trie_cache_for_test) .build(); - for _ in 0..100 { + log::info!("just get"); + for _ in 0..10 { let index: usize = rng.gen_range(0..values.len()); test_trie.get(&values[index].0).unwrap().unwrap(); reference_trie.get(&values[index].0).unwrap().unwrap(); } - for _ in 0..100 { + log::info!("hash access"); + for _ in 0..10 { let index: usize = rng.gen_range(0..values.len()); test_trie.get_hash(&values[index].0); reference_trie.get_hash(&values[index].0); @@ -359,7 +372,7 @@ fn recorder_does_its_thing() { } assert_eq!( reference_recorder.estimate_encoded_size(), - recorder_under_test.estimate_encoded_size() + recorder_for_test.estimate_encoded_size() ); } } diff --git a/cumulus/pallets/parachain-system/src/validate_block/trie_recorder.rs b/cumulus/pallets/parachain-system/src/validate_block/trie_recorder.rs index aeeb0c117e0..28ceb9ea7a0 100644 --- a/cumulus/pallets/parachain-system/src/validate_block/trie_recorder.rs +++ b/cumulus/pallets/parachain-system/src/validate_block/trie_recorder.rs @@ -21,8 +21,7 @@ use codec::Encode; use sp_std::{ cell::{RefCell, RefMut}, - collections::btree_map::BTreeMap, - collections::btree_set::BTreeSet, + collections::{btree_map::BTreeMap, btree_set::BTreeSet}, sync::Arc, }; use sp_trie::{NodeCodec, StorageProof}; @@ -39,16 +38,18 @@ impl<'a, H: trie_db::Hasher> trie_db::TrieRecorder<H::Out> for SizeRecorder<'a, fn record<'b>(&mut self, access: TrieAccess<'b, H::Out>) { let mut encoded_size_update = 0; match access { - TrieAccess::NodeOwned { hash, node_owned } => { + TrieAccess::NodeOwned { hash, node_owned } => if !self.seen_nodes.get(&hash).is_some() { let node = node_owned.to_encoded::<NodeCodec<H>>(); + log::info!(target: "skunert", "TrieAccess::NodeOwned"); encoded_size_update += node.encoded_size(); self.seen_nodes.insert(hash); - } - }, + }, TrieAccess::EncodedNode { hash, encoded_node } => { if !self.seen_nodes.get(&hash).is_some() { let node = encoded_node.into_owned(); + + log::info!(target: "skunert", "TrieAccess::EncodedNode"); encoded_size_update += node.encoded_size(); self.seen_nodes.insert(hash); } @@ -56,7 +57,7 @@ impl<'a, H: trie_db::Hasher> trie_db::TrieRecorder<H::Out> for SizeRecorder<'a, TrieAccess::Value { hash, value, full_key } => { if !self.seen_nodes.get(&hash).is_some() { let value = value.into_owned(); - + log::info!(target: "skunert", "TrieAccess::Value"); encoded_size_update += value.encoded_size(); self.seen_nodes.insert(hash); } -- GitLab