Skip to content

Commit 9e453ea

Browse files
committed
feat(collator): use prev data accounts extra total count for finalize wu calculation
1 parent 604d035 commit 9e453ea

File tree

7 files changed

+44
-36
lines changed

7 files changed

+44
-36
lines changed

Cargo.lock

Lines changed: 2 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ dirs = "5.0.1"
4646
ed25519 = "2.0"
4747
ed25519-dalek = "2.1"
4848
everscale-crypto = { version = "0.2", features = ["tl-proto", "serde"] }
49-
everscale-types = { version = "0.1.2", features = ["tycho"] }
49+
everscale-types = { git = "https://github.com/broxus/everscale-types.git", features = ["tycho"], branch = "feature/depth-balance-update" }
5050
exponential-backoff = "1"
5151
fdlimit = "0.3.0"
5252
futures-util = "0.3"
@@ -136,6 +136,7 @@ tycho-util = { path = "./util", version = "0.1.4" }
136136

137137
[patch.crates-io]
138138
weedb = { version = "0.3.8", git = "https://github.com/broxus/weedb.git", branch = "next-rocksdb" }
139+
everscale-types = { git = "https://github.com/broxus/everscale-types.git", features = ["tycho"], branch = "feature/depth-balance-update" }
139140

140141
[workspace.lints.rust]
141142
future_incompatible = "warn"

block-util/src/dict.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,7 @@ where
5555
Ok(Self {
5656
dict_root: build_aug_dict_from_sorted_iter(
5757
iter.into_iter().map(|(k, a, v)| {
58-
// SAFETY: We know that this cell is not a library cell.
59-
let value = unsafe { v.inner().as_slice_unchecked() };
58+
let value = v.inner().as_slice_allow_pruned();
6059
(k, a, value)
6160
}),
6261
K::BITS,

cli/src/cmd/tools/gen_zerostate.rs

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -324,10 +324,7 @@ impl ZerostateConfig {
324324

325325
accounts.set(
326326
account,
327-
DepthBalanceInfo {
328-
balance,
329-
split_depth: 0,
330-
},
327+
DepthBalanceInfo { balance, count: 1 },
331328
ShardAccount {
332329
account: account_state_cell,
333330
last_trans_hash: HashBytes::ZERO,
@@ -671,15 +668,14 @@ fn make_default_params() -> Result<BlockchainConfigParams> {
671668
},
672669
finalize: WorkUnitsParamsFinalize {
673670
build_transactions: 1_000, // 1 mcs
674-
build_accounts: 500, // 0.5 mcs
671+
build_accounts: 1200, // 1.2 mcs
675672
build_in_msg: 500, // 0.5 mcs
676673
build_out_msg: 500, // 0.5 mcs
677674
serialize_min: 15_000_000, // 15 ms
678675
serialize_accounts: 1_000, // 1 mcs
679676
serialize_msg: 2_000, // 2 mcs
680677
state_update_min: 15_000_000, // 15 ms
681-
state_update_accounts: 500, // 0.5 mcs
682-
state_update_msg: 2_000, // 2 mcs
678+
state_update_accounts: 2200, // 2.2 mcs
683679
},
684680
},
685681
})?;

collator/src/collator/do_collate/finalize.rs

Lines changed: 33 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ use crate::tracing_targets;
3131
use crate::types::{BlockCandidate, CollationSessionInfo, CollatorConfig, McData, ShardHashesExt};
3232
use crate::utils::block::detect_top_processed_to_anchor;
3333

34+
pub const LOGARITHM_DELIMITER: u64 = 1000;
35+
3436
pub struct FinalizeState {
3537
pub execute_result: ExecuteResult,
3638
}
@@ -218,7 +220,8 @@ impl Phase<FinalizeState> {
218220
histogram_build_account_blocks_and_messages.finish();
219221

220222
let processed_accounts = processed_accounts_res?;
221-
self.state.collation_data.accounts_count = processed_accounts.accounts_len as u64;
223+
self.state.collation_data.updated_accounts_count =
224+
processed_accounts.updated_accounts_count as u64;
222225
let in_msgs = in_msgs_res?;
223226
let out_msgs = out_msgs_res?;
224227

@@ -343,21 +346,29 @@ impl Phase<FinalizeState> {
343346
labels,
344347
);
345348

346-
let accounts_count = self.state.collation_data.accounts_count;
349+
let updated_accounts_count = self.state.collation_data.updated_accounts_count;
350+
let old_accounts_count = self
351+
.state
352+
.prev_shard_data
353+
.observable_accounts()
354+
.root_extra()
355+
.count as u64;
347356
let in_msgs_len = self.state.collation_data.in_msgs.len() as u64;
348357
let out_msgs_len = self.state.collation_data.out_msgs.len() as u64;
349358

350359
finalize_wu_total = Self::calc_finalize_wu_total(
351-
accounts_count,
360+
old_accounts_count,
361+
updated_accounts_count,
352362
in_msgs_len,
353363
out_msgs_len,
354364
wu_params_finalize,
355365
);
356366

357367
tracing::debug!(target: tracing_targets::COLLATOR,
358-
"finalize_wu_total: {}, accounts_count: {}, in_msgs: {}, out_msgs: {} ",
368+
"finalize_wu_total: {}, old_state_accounts_count: {}, updated_accounts_count: {}, in_msgs: {}, out_msgs: {} ",
359369
finalize_wu_total,
360-
accounts_count,
370+
old_accounts_count,
371+
updated_accounts_count,
361372
in_msgs_len,
362373
out_msgs_len,
363374
);
@@ -640,7 +651,8 @@ impl Phase<FinalizeState> {
640651
}
641652

642653
fn calc_finalize_wu_total(
643-
accounts_count: u64,
654+
old_accounts_count: u64,
655+
updated_accounts_count: u64,
644656
in_msgs_len: u64,
645657
out_msgs_len: u64,
646658
wu_params_finalize: WorkUnitsParamsFinalize,
@@ -655,13 +667,15 @@ impl Phase<FinalizeState> {
655667
serialize_msg,
656668
state_update_min,
657669
state_update_accounts,
658-
state_update_msg,
659670
} = wu_params_finalize;
660671

661-
let accounts_count_logarithm = accounts_count.checked_ilog2().unwrap_or_default() as u64;
662-
let build = accounts_count
663-
.saturating_mul(accounts_count_logarithm)
664-
.saturating_mul(build_accounts as u64);
672+
let old_accounts_count_logarithm =
673+
((old_accounts_count as f64).log2() * LOGARITHM_DELIMITER as f64) as u64;
674+
675+
let build = updated_accounts_count
676+
.saturating_mul(build_accounts as u64)
677+
.saturating_mul(old_accounts_count_logarithm)
678+
.saturating_div(LOGARITHM_DELIMITER);
665679
let build_in_msg = in_msgs_len
666680
.saturating_mul(in_msgs_len.checked_ilog2().unwrap_or_default() as u64)
667681
.saturating_mul(build_in_msg as u64);
@@ -676,15 +690,15 @@ impl Phase<FinalizeState> {
676690

677691
let merkle_calc = std::cmp::max(
678692
state_update_min as u64,
679-
accounts_count
680-
.saturating_mul(accounts_count_logarithm)
693+
updated_accounts_count
681694
.saturating_mul(state_update_accounts as u64)
682-
.saturating_add(out_msgs_len.saturating_mul(state_update_msg as u64)),
695+
.saturating_mul(old_accounts_count_logarithm)
696+
.saturating_div(LOGARITHM_DELIMITER),
683697
);
684698

685699
let serialize = std::cmp::max(
686700
serialize_min as u64,
687-
accounts_count.saturating_mul(serialize_accounts as u64),
701+
updated_accounts_count.saturating_mul(serialize_accounts as u64),
688702
)
689703
.saturating_add((in_msgs_len + out_msgs_len).saturating_mul(serialize_msg as u64));
690704

@@ -937,7 +951,7 @@ impl Phase<FinalizeState> {
937951
shard_accounts.set_any(
938952
&updated_account.account_addr,
939953
&DepthBalanceInfo {
940-
split_depth: 0, // NOTE: will need to set when we implement accounts split/merge logic
954+
count: 1,
941955
balance: updated_account.balance.clone(),
942956
},
943957
&updated_account.shard_account,
@@ -972,7 +986,7 @@ impl Phase<FinalizeState> {
972986
account_blocks.insert(updated_account.account_addr, account_block);
973987
}
974988

975-
let accounts_len = account_blocks.len();
989+
let updated_accounts_count = account_blocks.len();
976990

977991
// TODO: Somehow consume accounts inside an iterator
978992
let account_blocks = RelaxedAugDict::try_from_sorted_iter_any(
@@ -985,7 +999,7 @@ impl Phase<FinalizeState> {
985999
account_blocks: account_blocks.build()?,
9861000
shard_accounts: shard_accounts.build()?,
9871001
new_config_params,
988-
accounts_len,
1002+
updated_accounts_count,
9891003
})
9901004
}
9911005

@@ -1227,7 +1241,7 @@ struct ProcessedAccounts {
12271241
account_blocks: AccountBlocks,
12281242
shard_accounts: ShardAccounts,
12291243
new_config_params: Option<BlockchainConfigParams>,
1230-
accounts_len: usize,
1244+
updated_accounts_count: usize,
12311245
}
12321246

12331247
fn create_merkle_update(

collator/src/collator/do_collate/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1127,7 +1127,7 @@ impl CollatorStdImpl {
11271127
metrics::gauge!("tycho_do_collate_tx_per_block", &labels)
11281128
.set(collation_data.tx_count as f64);
11291129
metrics::gauge!("tycho_do_collate_accounts_per_block", &labels)
1130-
.set(collation_data.accounts_count as f64);
1130+
.set(collation_data.updated_accounts_count as f64);
11311131
metrics::counter!("tycho_do_collate_int_enqueue_count")
11321132
.increment(collation_data.int_enqueue_count);
11331133
metrics::counter!("tycho_do_collate_int_dequeue_count")

collator/src/collator/types.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -306,7 +306,7 @@ impl BlockCollationDataBuilder {
306306
start_lt,
307307
next_lt: start_lt + 1,
308308
tx_count: 0,
309-
accounts_count: 0,
309+
updated_accounts_count: 0,
310310
total_execute_msgs_time_mc: 0,
311311
execute_count_all: 0,
312312
execute_count_ext: 0,
@@ -339,7 +339,7 @@ pub(super) struct BlockCollationData {
339339
pub gen_utime_ms: u16,
340340

341341
pub tx_count: u64,
342-
pub accounts_count: u64,
342+
pub updated_accounts_count: u64,
343343

344344
pub block_limit: BlockLimitStats,
345345

0 commit comments

Comments
 (0)