Skip to content
This repository was archived by the owner on Jan 22, 2025. It is now read-only.

Commit ca94c60

Browse files
committed
Clarify --enable-banking-trace with better naming
1 parent 8bc72b5 commit ca94c60

File tree

7 files changed

+64
-40
lines changed

7 files changed

+64
-40
lines changed

banking-bench/src/main.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use {
88
solana_client::connection_cache::ConnectionCache,
99
solana_core::{
1010
banking_stage::BankingStage,
11-
banking_trace::{BankingPacketBatch, BankingTracer, DEFAULT_BANKING_TRACE_SIZE},
11+
banking_trace::{BankingPacketBatch, BankingTracer, BANKING_TRACE_DIR_DEFAULT_BYTE_LIMIT},
1212
},
1313
solana_gossip::cluster_info::{ClusterInfo, Node},
1414
solana_ledger::{
@@ -419,7 +419,7 @@ fn main() {
419419
let banking_tracer = BankingTracer::new(matches.is_present("trace_banking").then_some((
420420
blockstore.banking_trace_path(),
421421
exit.clone(),
422-
DEFAULT_BANKING_TRACE_SIZE,
422+
BANKING_TRACE_DIR_DEFAULT_BYTE_LIMIT,
423423
)))
424424
.unwrap();
425425
let (non_vote_sender, non_vote_receiver) = banking_tracer.create_channel_non_vote();

core/benches/banking_trace.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use {
88
drop_and_clean_temp_dir_unless_suppressed, sample_packet_batch, terminate_tracer,
99
},
1010
receiving_loop_with_minimized_sender_overhead, BankingPacketBatch, BankingTracer,
11-
TraceError, TracerThreadResult, DEFAULT_BANKING_TRACE_SIZE,
11+
TraceError, TracerThreadResult, BANKING_TRACE_DIR_DEFAULT_BYTE_LIMIT,
1212
},
1313
std::{
1414
path::PathBuf,
@@ -61,7 +61,7 @@ fn bench_banking_tracer_main_thread_overhead_under_peak_write(bencher: &mut Benc
6161
let tracer = BankingTracer::new(Some((
6262
temp_dir.path().join("banking-trace"),
6363
exit.clone(),
64-
DEFAULT_BANKING_TRACE_SIZE,
64+
BANKING_TRACE_DIR_DEFAULT_BYTE_LIMIT,
6565
)))
6666
.unwrap();
6767
let (non_vote_sender, non_vote_receiver) = tracer.create_channel_non_vote();

core/src/banking_trace.rs

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ pub type BankingPacketSender = TracedSender;
2929
pub type BankingPacketReceiver = Receiver<BankingPacketBatch>;
3030
pub type TracerThreadResult = Result<(), TraceError>;
3131
pub type TracerThread = Option<JoinHandle<TracerThreadResult>>;
32+
pub type DirByteLimit = u64;
3233

3334
#[derive(Error, Debug)]
3435
pub enum TraceError {
@@ -41,17 +42,17 @@ pub enum TraceError {
4142
#[error("Integer Cast Error: {0}")]
4243
IntegerCastError(#[from] std::num::TryFromIntError),
4344

44-
#[error("Trace size is too small (must be larger than {1}): {0}")]
45-
TooSmallTraceSize(u64, u64),
45+
#[error("dir byte limit is too small (must be larger than {1}): {0}")]
46+
TooSmallDirByteLimit(DirByteLimit, DirByteLimit),
4647
}
4748

4849
const BASENAME: &str = "events";
4950
const TRACE_FILE_ROTATE_COUNT: u64 = 14; // target 2 weeks retention under normal load
5051
const TRACE_FILE_WRITE_INTERVAL_MS: u64 = 100;
5152
const BUF_WRITER_CAPACITY: usize = 10 * 1024 * 1024;
5253
pub const TRACE_FILE_DEFAULT_ROTATE_BYTE_THRESHOLD: u64 = 1024 * 1024 * 1024;
53-
pub const EMPTY_BANKING_TRACE_SIZE: u64 = 0;
54-
pub const DEFAULT_BANKING_TRACE_SIZE: u64 =
54+
pub const DISABLED_BAKING_TRACE_DIR: DirByteLimit = 0;
55+
pub const BANKING_TRACE_DIR_DEFAULT_BYTE_LIMIT: DirByteLimit =
5556
TRACE_FILE_DEFAULT_ROTATE_BYTE_THRESHOLD * TRACE_FILE_ROTATE_COUNT;
5657

5758
#[allow(clippy::type_complexity)]
@@ -168,13 +169,13 @@ pub fn receiving_loop_with_minimized_sender_overhead<T, E, const SLEEP_MS: u64>(
168169

169170
impl BankingTracer {
170171
pub fn new(
171-
maybe_config: Option<(PathBuf, Arc<AtomicBool>, u64)>,
172+
maybe_config: Option<(PathBuf, Arc<AtomicBool>, DirByteLimit)>,
172173
) -> Result<Arc<Self>, TraceError> {
173174
let enabled_tracer = maybe_config
174175
.map(|(path, exit, total_size)| {
175176
let rotate_threshold_size = total_size / TRACE_FILE_ROTATE_COUNT;
176177
if rotate_threshold_size == 0 {
177-
return Err(TraceError::TooSmallTraceSize(
178+
return Err(TraceError::TooSmallDirByteLimit(
178179
total_size,
179180
TRACE_FILE_ROTATE_COUNT,
180181
));
@@ -451,7 +452,8 @@ mod tests {
451452
let temp_dir = TempDir::new().unwrap();
452453
let path = temp_dir.path().join("banking-trace");
453454
let exit = Arc::<AtomicBool>::default();
454-
let tracer = BankingTracer::new(Some((path, exit.clone(), u64::max_value()))).unwrap();
455+
let tracer =
456+
BankingTracer::new(Some((path, exit.clone(), DirByteLimit::max_value()))).unwrap();
455457
let tracer_thread = tracer.take_tracer_thread_join_handle();
456458
let (non_vote_sender, non_vote_receiver) = tracer.create_channel_non_vote();
457459

@@ -489,8 +491,12 @@ mod tests {
489491
let temp_dir = TempDir::new().unwrap();
490492
let path = temp_dir.path().join("banking-trace");
491493
let exit = Arc::<AtomicBool>::default();
492-
let tracer =
493-
BankingTracer::new(Some((path.clone(), exit.clone(), u64::max_value()))).unwrap();
494+
let tracer = BankingTracer::new(Some((
495+
path.clone(),
496+
exit.clone(),
497+
DirByteLimit::max_value(),
498+
)))
499+
.unwrap();
494500
let (non_vote_sender, non_vote_receiver) = tracer.create_channel_non_vote();
495501

496502
let dummy_main_thread = thread::spawn(move || {

core/src/validator.rs

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ pub use solana_perf::report_target_features;
44
use {
55
crate::{
66
accounts_hash_verifier::AccountsHashVerifier,
7-
banking_trace::BankingTracer,
7+
banking_trace::{self, BankingTracer},
88
broadcast_stage::BroadcastStageType,
99
cache_block_meta_service::{CacheBlockMetaSender, CacheBlockMetaService},
1010
cluster_info_vote_listener::VoteTracker,
@@ -176,7 +176,7 @@ pub struct ValidatorConfig {
176176
pub ledger_column_options: LedgerColumnOptions,
177177
pub runtime_config: RuntimeConfig,
178178
pub replay_slots_concurrently: bool,
179-
pub banking_trace_size: u64,
179+
pub banking_trace_dir_byte_limit: banking_trace::DirByteLimit,
180180
}
181181

182182
impl Default for ValidatorConfig {
@@ -238,7 +238,7 @@ impl Default for ValidatorConfig {
238238
ledger_column_options: LedgerColumnOptions::default(),
239239
runtime_config: RuntimeConfig::default(),
240240
replay_slots_concurrently: false,
241-
banking_trace_size: 0,
241+
banking_trace_dir_byte_limit: 0,
242242
}
243243
}
244244
}
@@ -930,12 +930,13 @@ impl Validator {
930930
exit.clone(),
931931
);
932932

933-
let banking_tracer = BankingTracer::new((config.banking_trace_size > 0).then_some((
934-
blockstore.banking_trace_path(),
935-
exit.clone(),
936-
config.banking_trace_size,
937-
)))
938-
.map_err(|err| format!("{} [{:?}]", &err, &err))?;
933+
let banking_tracer =
934+
BankingTracer::new((config.banking_trace_dir_byte_limit > 0).then_some((
935+
blockstore.banking_trace_path(),
936+
exit.clone(),
937+
config.banking_trace_dir_byte_limit,
938+
)))
939+
.map_err(|err| format!("{} [{:?}]", &err, &err))?;
939940

940941
let (replay_vote_sender, replay_vote_receiver) = unbounded();
941942
let tvu = Tvu::new(

local-cluster/src/validator_configs.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ pub fn safe_clone_config(config: &ValidatorConfig) -> ValidatorConfig {
6363
ledger_column_options: config.ledger_column_options.clone(),
6464
runtime_config: config.runtime_config.clone(),
6565
replay_slots_concurrently: config.replay_slots_concurrently,
66-
banking_trace_size: config.banking_trace_size,
66+
banking_trace_dir_byte_limit: config.banking_trace_dir_byte_limit,
6767
}
6868
}
6969

validator/src/cli.rs

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use {
1010
},
1111
keypair::SKIP_SEED_PHRASE_VALIDATION_ARG,
1212
},
13-
solana_core::banking_trace::DEFAULT_BANKING_TRACE_SIZE,
13+
solana_core::banking_trace::{DirByteLimit, BANKING_TRACE_DIR_DEFAULT_BYTE_LIMIT},
1414
solana_faucet::faucet::FAUCET_PORT,
1515
solana_net_utils::{MINIMUM_VALIDATOR_PORT_RANGE_WIDTH, VALIDATOR_PORT_RANGE},
1616
solana_rpc::{rpc::MAX_REQUEST_BODY_SIZE, rpc_pubsub_service::PubSubConfig},
@@ -1306,13 +1306,22 @@ pub fn app<'a>(version: &'a str, default_args: &'a DefaultArgs) -> App<'a, 'a> {
13061306
.help("Allow concurrent replay of slots on different forks")
13071307
)
13081308
.arg(
1309-
Arg::with_name("banking_trace_size")
1309+
Arg::with_name("banking_trace_dir_byte_limit")
1310+
// expose friendly alternative name to cli than internal
1311+
// implementation-oriented one
13101312
.long("enable-banking-trace")
13111313
.value_name("MAX_BYTES")
1312-
.validator(is_parsable::<u64>)
1313-
.takes_value(true)
1314-
.default_value(&default_args.banking_trace_size)
1315-
.help("Write trace files for simulate-leader-blocks, retaining up to the maximum total bytes")
1314+
.validator(is_parsable::<DirByteLimit>)
1315+
.takes_value(true)
1316+
// Firstly, zero limit value causes tracer to be disabled
1317+
// altogether, intuitively. On the other hand, this non-zero
1318+
// default doesn't enable banking tracer unless this flag is
1319+
// explicitly given, similar to --limit-ledger-size.
1320+
// see configure_banking_trace_dir_byte_limit() for this.
1321+
.default_value(&default_args.banking_trace_dir_byte_limit)
1322+
.help("Write trace files for simulate-leader-blocks, retaining \
1323+
up to the default or specified total bytes in the \
1324+
ledger")
13161325
)
13171326
.args(&get_deprecated_arguments())
13181327
.after_help("The default subcommand is run")
@@ -1656,7 +1665,7 @@ pub struct DefaultArgs {
16561665
pub wait_for_restart_window_min_idle_time: String,
16571666
pub wait_for_restart_window_max_delinquent_stake: String,
16581667

1659-
pub banking_trace_size: String,
1668+
pub banking_trace_dir_byte_limit: String,
16601669
}
16611670

16621671
impl DefaultArgs {
@@ -1735,7 +1744,7 @@ impl DefaultArgs {
17351744
exit_max_delinquent_stake: "5".to_string(),
17361745
wait_for_restart_window_min_idle_time: "10".to_string(),
17371746
wait_for_restart_window_max_delinquent_stake: "5".to_string(),
1738-
banking_trace_size: DEFAULT_BANKING_TRACE_SIZE.to_string(),
1747+
banking_trace_dir_byte_limit: BANKING_TRACE_DIR_DEFAULT_BYTE_LIMIT.to_string(),
17391748
}
17401749
}
17411750
}

validator/src/main.rs

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use {
88
rand::{seq::SliceRandom, thread_rng},
99
solana_clap_utils::input_parsers::{keypair_of, keypairs_of, pubkey_of, value_of},
1010
solana_core::{
11-
banking_trace::EMPTY_BANKING_TRACE_SIZE,
11+
banking_trace::DISABLED_BAKING_TRACE_DIR,
1212
ledger_cleanup_service::{DEFAULT_MAX_LEDGER_SHREDS, DEFAULT_MIN_MAX_LEDGER_SHREDS},
1313
system_monitor_service::SystemMonitorService,
1414
tower_storage,
@@ -410,6 +410,21 @@ fn get_cluster_shred_version(entrypoints: &[SocketAddr]) -> Option<u16> {
410410
None
411411
}
412412

413+
fn configure_banking_trace_dir_byte_limit(
414+
validator_config: &mut ValidatorConfig,
415+
matches: &ArgMatches,
416+
) {
417+
validator_config.banking_trace_dir_byte_limit =
418+
if matches.occurrences_of("banking_trace_dir_byte_limit") == 0 {
419+
// disable with no explicit flag; then, this effectively becomes `opt-in` even if we're
420+
// specifying a default value in clap configuration.
421+
DISABLED_BAKING_TRACE_DIR
422+
} else {
423+
// BANKING_TRACE_DIR_DEFAULT_BYTE_LIMIT or user-supplied override value
424+
value_t_or_exit!(matches, "banking_trace_dir_byte_limit", u64)
425+
};
426+
}
427+
413428
pub fn main() {
414429
let default_args = DefaultArgs::new();
415430
let solana_version = solana_version::version!();
@@ -1338,14 +1353,7 @@ pub fn main() {
13381353
validator_config.max_ledger_shreds = Some(limit_ledger_size);
13391354
}
13401355

1341-
validator_config.banking_trace_size = if matches.occurrences_of("banking_trace_size") == 0 {
1342-
// disable with no explicit flag; then, this effectively becomes `opt-in` even if we're
1343-
// specifying a default value in clap configuration.
1344-
EMPTY_BANKING_TRACE_SIZE
1345-
} else {
1346-
// DEFAULT_BANKING_TRACE_SIZE or user-supplied override value
1347-
value_t_or_exit!(matches, "banking_trace_size", u64)
1348-
};
1356+
configure_banking_trace_dir_byte_limit(&mut validator_config, &matches);
13491357

13501358
validator_config.ledger_column_options = LedgerColumnOptions {
13511359
compression_type: match matches.value_of("rocksdb_ledger_compression") {

0 commit comments

Comments
 (0)