sp1_prover/worker/
config.rs1use std::env;
2
3use sp1_core_executor::SP1CoreOpts;
4
5use crate::worker::{
6 SP1ControllerConfig, SP1CoreProverConfig, SP1DeferredProverConfig, SP1ProverConfig,
7 SP1RecursionProverConfig,
8};
9
10#[derive(Clone)]
11pub struct SP1WorkerConfig {
12 pub controller_config: SP1ControllerConfig,
13 pub prover_config: SP1ProverConfig,
14}
15
16impl Default for SP1WorkerConfig {
17 fn default() -> Self {
18 let num_splicing_workers = env::var("SP1_WORKER_NUM_SPLICING_WORKERS")
24 .ok()
25 .and_then(|s| s.parse::<usize>().ok())
26 .unwrap_or(DEFAULT_NUM_SPLICING_WORKERS);
27 let splicing_buffer_size = env::var("SP1_WORKER_SPLICING_BUFFER_SIZE")
28 .ok()
29 .and_then(|s| s.parse::<usize>().ok())
30 .unwrap_or(DEFAULT_SPLICING_BUFFER_SIZE);
31 let max_reduce_arity = env::var("SP1_WORKER_MAX_REDUCE_ARITY")
32 .ok()
33 .and_then(|s| s.parse::<usize>().ok())
34 .unwrap_or(DEFAULT_MAX_REDUCE_ARITY);
35 let number_of_send_splice_workers_per_splice =
36 env::var("SP1_WORKER_NUMBER_OF_SEND_SPLICE_WORKERS_PER_SPLICE")
37 .ok()
38 .and_then(|s| s.parse::<usize>().ok())
39 .unwrap_or(DEFAULT_NUMBER_OF_SEND_SPLICE_WORKERS_PER_SPLICE);
40 let send_splice_input_buffer_size_per_splice =
41 env::var("SP1_WORKER_SEND_SPLICE_INPUT_BUFFER_SIZE_PER_SPLICE")
42 .ok()
43 .and_then(|s| s.parse::<usize>().ok())
44 .unwrap_or(DEFAULT_SEND_SPLICE_INPUT_BUFFER_SIZE_PER_SPLICE);
45 let global_memory_buffer_size = env::var("SP1_WORKER_GLOBAL_MEMORY_BUFFER_SIZE")
48 .ok()
49 .and_then(|s| s.parse::<usize>().ok())
50 .unwrap_or(2 * num_splicing_workers);
51
52 let use_fixed_pk = env::var("SP1_WORKER_USE_FIXED_PK")
54 .ok()
55 .and_then(|s| s.parse::<bool>().ok())
56 .unwrap_or(false);
57
58 let verify_intermediates = env::var("SP1_WORKER_VERIFY_INTERMEDIATES")
60 .ok()
61 .and_then(|s| s.parse::<bool>().ok())
62 .unwrap_or(true);
63
64 let opts = SP1CoreOpts::default();
66 let controller_config = SP1ControllerConfig {
67 opts,
68 num_splicing_workers,
69 splicing_buffer_size,
70 max_reduce_arity,
71 number_of_send_splice_workers_per_splice,
72 send_splice_input_buffer_size_per_splice,
73 use_fixed_pk,
74 global_memory_buffer_size,
75 };
76
77 let num_core_workers = env::var("SP1_WORKER_NUM_CORE_WORKERS")
79 .ok()
80 .and_then(|s| s.parse::<usize>().ok())
81 .unwrap_or(DEFAULT_NUM_CORE_WORKERS);
82 let core_buffer_size = env::var("SP1_WORKER_CORE_BUFFER_SIZE")
83 .ok()
84 .and_then(|s| s.parse::<usize>().ok())
85 .unwrap_or(DEFAULT_CORE_BUFFER_SIZE);
86 let num_setup_workers = env::var("SP1_WORKER_NUM_SETUP_WORKERS")
87 .ok()
88 .and_then(|s| s.parse::<usize>().ok())
89 .unwrap_or(DEFAULT_NUM_SETUP_WORKERS);
90 let setup_buffer_size = env::var("SP1_WORKER_SETUP_BUFFER_SIZE")
91 .ok()
92 .and_then(|s| s.parse::<usize>().ok())
93 .unwrap_or(DEFAULT_SETUP_BUFFER_SIZE);
94 let normalize_program_cache_size = env::var("SP1_WORKER_NORMALIZE_PROGRAM_CACHE_SIZE")
95 .ok()
96 .and_then(|s| s.parse::<usize>().ok())
97 .unwrap_or(DEFAULT_NORMALIZE_PROGRAM_CACHE_SIZE);
98 let dump_shard_dir = env::var("SP1_DUMP_SHARD_DIR").ok();
99
100 let core_prover_config = SP1CoreProverConfig {
101 num_core_workers,
102 core_buffer_size,
103 num_setup_workers,
104 setup_buffer_size,
105 normalize_program_cache_size,
106 use_fixed_pk,
107 verify_intermediates,
108 dump_shard_dir,
109 };
110
111 let num_prepare_reduce_workers = env::var("SP1_WORKER_NUM_PREPARE_REDUCE_WORKERS")
113 .ok()
114 .and_then(|s| s.parse::<usize>().ok())
115 .unwrap_or(DEFAULT_NUM_PREPARE_REDUCE_WORKERS);
116 let prepare_reduce_buffer_size = env::var("SP1_WORKER_PREPARE_REDUCE_BUFFER_SIZE")
117 .ok()
118 .and_then(|s| s.parse::<usize>().ok())
119 .unwrap_or(DEFAULT_PREPARE_REDUCE_BUFFER_SIZE);
120 let num_recursion_executor_workers = env::var("SP1_WORKER_NUM_RECURSION_EXECUTOR_WORKERS")
121 .ok()
122 .and_then(|s| s.parse::<usize>().ok())
123 .unwrap_or(DEFAULT_NUM_RECURSION_EXECUTOR_WORKERS);
124 let recursion_executor_buffer_size = env::var("SP1_WORKER_RECURSION_EXECUTOR_BUFFER_SIZE")
125 .ok()
126 .and_then(|s| s.parse::<usize>().ok())
127 .unwrap_or(DEFAULT_RECURSION_EXECUTOR_BUFFER_SIZE);
128 let num_recursion_prover_workers = env::var("SP1_WORKER_NUM_RECURSION_PROVER_WORKERS")
129 .ok()
130 .and_then(|s| s.parse::<usize>().ok())
131 .unwrap_or(DEFAULT_NUM_RECURSION_PROVER_WORKERS);
132 let recursion_prover_buffer_size = env::var("SP1_WORKER_RECURSION_PROVER_BUFFER_SIZE")
133 .ok()
134 .and_then(|s| s.parse::<usize>().ok())
135 .unwrap_or(DEFAULT_RECURSION_PROVER_BUFFER_SIZE);
136 let max_compose_arity = env::var("SP1_WORKER_MAX_COMPOSE_ARITY")
137 .ok()
138 .and_then(|s| s.parse::<usize>().ok())
139 .unwrap_or(DEFAULT_MAX_COMPOSE_ARITY);
140
141 let recursion_prover_config = SP1RecursionProverConfig::new(
142 num_prepare_reduce_workers,
143 prepare_reduce_buffer_size,
144 num_recursion_executor_workers,
145 recursion_executor_buffer_size,
146 num_recursion_prover_workers,
147 recursion_prover_buffer_size,
148 max_compose_arity,
149 verify_intermediates,
150 );
151
152 let num_deferred_workers = env::var("SP1_WORKER_NUM_DEFERRED_WORKERS")
154 .ok()
155 .and_then(|s| s.parse::<usize>().ok())
156 .unwrap_or(DEFAULT_NUM_DEFERRED_WORKERS);
157 let deferred_buffer_size = env::var("SP1_WORKER_DEFERRED_BUFFER_SIZE")
158 .ok()
159 .and_then(|s| s.parse::<usize>().ok())
160 .unwrap_or(DEFAULT_DEFERRED_BUFFER_SIZE);
161
162 let deferred_prover_config =
163 SP1DeferredProverConfig { num_deferred_workers, deferred_buffer_size };
164
165 let prover_config =
166 SP1ProverConfig { core_prover_config, recursion_prover_config, deferred_prover_config };
167
168 SP1WorkerConfig { controller_config, prover_config }
170 }
171}
172
173pub(crate) const DEFAULT_NUM_SPLICING_WORKERS: usize = 2;
175pub(crate) const DEFAULT_SPLICING_BUFFER_SIZE: usize = 2;
176pub(crate) const DEFAULT_MAX_REDUCE_ARITY: usize = 4;
177pub(crate) const DEFAULT_NUMBER_OF_SEND_SPLICE_WORKERS_PER_SPLICE: usize = 2;
178pub(crate) const DEFAULT_SEND_SPLICE_INPUT_BUFFER_SIZE_PER_SPLICE: usize = 2;
179
180pub(crate) const DEFAULT_NUM_CORE_WORKERS: usize = 4;
182pub(crate) const DEFAULT_CORE_BUFFER_SIZE: usize = 4;
183pub(crate) const DEFAULT_NUM_SETUP_WORKERS: usize = 2;
184pub(crate) const DEFAULT_SETUP_BUFFER_SIZE: usize = 2;
185pub(crate) const DEFAULT_NORMALIZE_PROGRAM_CACHE_SIZE: usize = 5;
186pub(crate) const DEFAULT_MAX_COMPOSE_ARITY: usize = 4;
187
188pub(crate) const DEFAULT_NUM_PREPARE_REDUCE_WORKERS: usize = DEFAULT_NUM_RECURSION_EXECUTOR_WORKERS;
190pub(crate) const DEFAULT_PREPARE_REDUCE_BUFFER_SIZE: usize = DEFAULT_RECURSION_EXECUTOR_BUFFER_SIZE;
191pub(crate) const DEFAULT_NUM_RECURSION_EXECUTOR_WORKERS: usize = 4;
192pub(crate) const DEFAULT_RECURSION_EXECUTOR_BUFFER_SIZE: usize = 4;
193pub(crate) const DEFAULT_NUM_RECURSION_PROVER_WORKERS: usize = 8;
194pub(crate) const DEFAULT_RECURSION_PROVER_BUFFER_SIZE: usize = 8;
195
196pub(crate) const DEFAULT_NUM_DEFERRED_WORKERS: usize = 4;
198pub(crate) const DEFAULT_DEFERRED_BUFFER_SIZE: usize = 2;
199
200pub(crate) const DEFAULT_NUM_GAS_EXECUTOR_WORKERS: usize = 4;
202pub(crate) const DEFAULT_GAS_EXECUTOR_BUFFER_SIZE: usize = 4;