reth_node_core/args/
jit.rs1use clap::Args;
4use humantime::parse_duration;
5use std::time::Duration;
6
7#[derive(Debug, Clone, Args, PartialEq, Eq)]
9#[command(next_help_heading = "JIT")]
10pub struct JitArgs {
11 #[arg(id = "jit.enabled", long = "jit", default_value_t = false, help_heading = "JIT")]
13 pub enabled: bool,
14
15 #[arg(long = "jit.hot-threshold", default_value_t = Self::DEFAULT_HOT_THRESHOLD, help_heading = "JIT")]
17 pub hot_threshold: usize,
18
19 #[arg(long = "jit.worker-count", help_heading = "JIT")]
21 pub worker_count: Option<usize>,
22
23 #[arg(long = "jit.channel-capacity", default_value_t = Self::DEFAULT_CHANNEL_CAPACITY, help_heading = "JIT")]
26 pub channel_capacity: usize,
27
28 #[arg(long = "jit.max-pending-jobs", default_value_t = Self::DEFAULT_MAX_PENDING_JOBS, help_heading = "JIT")]
30 pub max_pending_jobs: usize,
31
32 #[arg(long = "jit.max-bytecode-len", default_value_t = Self::DEFAULT_MAX_BYTECODE_LEN, help_heading = "JIT")]
36 pub max_bytecode_len: usize,
37
38 #[arg(long = "jit.code-cache-bytes", default_value_t = Self::DEFAULT_CODE_CACHE_BYTES, help_heading = "JIT")]
42 pub code_cache_bytes: usize,
43
44 #[arg(
46 long = "jit.idle-evict-duration",
47 default_value = humantime::format_duration(Self::DEFAULT_IDLE_EVICT_DURATION).to_string(),
48 help_heading = "JIT",
49 value_parser = parse_duration,
50 )]
51 pub idle_evict_duration: Duration,
52
53 #[arg(long = "jit.debug", default_value_t = false, help_heading = "JIT")]
59 pub debug: bool,
60
61 #[doc(hidden)]
64 #[arg(long = "jit.blocking", default_value_t = false, help_heading = "JIT", hide = true)]
65 pub blocking: bool,
66}
67
68impl JitArgs {
69 const DEFAULT_HOT_THRESHOLD: usize = 8;
70 const DEFAULT_CHANNEL_CAPACITY: usize = 4096;
71 const DEFAULT_MAX_PENDING_JOBS: usize = 2048;
72 const DEFAULT_MAX_BYTECODE_LEN: usize = 0;
73 const DEFAULT_CODE_CACHE_BYTES: usize = 1024 * 1024 * 1024; const DEFAULT_IDLE_EVICT_DURATION: Duration = Duration::from_hours(1);
75}
76
77impl Default for JitArgs {
78 fn default() -> Self {
79 Self {
80 enabled: false,
81 hot_threshold: Self::DEFAULT_HOT_THRESHOLD,
82 worker_count: None,
83 channel_capacity: Self::DEFAULT_CHANNEL_CAPACITY,
84 max_pending_jobs: Self::DEFAULT_MAX_PENDING_JOBS,
85 max_bytecode_len: Self::DEFAULT_MAX_BYTECODE_LEN,
86 code_cache_bytes: Self::DEFAULT_CODE_CACHE_BYTES,
87 idle_evict_duration: Self::DEFAULT_IDLE_EVICT_DURATION,
88 debug: false,
89 blocking: false,
90 }
91 }
92}
93
94#[cfg(test)]
95mod tests {
96 use super::*;
97 use clap::Parser;
98
99 #[derive(Parser)]
101 struct CommandParser<T: Args> {
102 #[command(flatten)]
103 args: T,
104 }
105
106 #[test]
107 fn jit_args_default_sanity_test() {
108 let args = CommandParser::<JitArgs>::parse_from(["reth"]).args;
109 assert_eq!(args, JitArgs::default());
110 }
111}