15
15
use clap:: Parser ;
16
16
use home:: home_dir;
17
17
use risingwave_common:: config:: MetaBackend ;
18
+ use risingwave_common:: util:: resource_util:: memory:: system_memory_available_bytes;
18
19
use risingwave_compactor:: CompactorOpts ;
20
+ use risingwave_compute:: memory:: config:: gradient_reserve_memory_bytes;
19
21
use risingwave_compute:: ComputeNodeOpts ;
20
22
use risingwave_frontend:: FrontendOpts ;
21
23
use risingwave_meta_node:: MetaNodeOpts ;
@@ -85,7 +87,7 @@ impl SingleNodeOpts {
85
87
#[ derive( Eq , PartialOrd , PartialEq , Debug , Clone , Parser ) ]
86
88
pub struct NodeSpecificOpts {
87
89
// ------- Compute Node Options -------
88
- /// Total available memory for the compute node in bytes. Used by both computing and storage.
90
+ /// Total available memory for all the nodes
89
91
#[ clap( long) ]
90
92
pub total_memory_bytes : Option < usize > ,
91
93
@@ -207,10 +209,21 @@ pub fn map_single_node_opts_to_standalone_opts(opts: SingleNodeOpts) -> ParsedSt
207
209
frontend_opts. meta_addr = meta_addr. parse ( ) . unwrap ( ) ;
208
210
compactor_opts. meta_address = meta_addr. parse ( ) . unwrap ( ) ;
209
211
212
+ // Allocate memory for each node
213
+ let total_memory_bytes = if let Some ( total_memory_bytes) = opts. node_opts . total_memory_bytes {
214
+ total_memory_bytes
215
+ } else {
216
+ system_memory_available_bytes ( )
217
+ } ;
218
+ frontend_opts. frontend_total_memory_bytes = memory_for_frontend ( total_memory_bytes) ;
219
+ compactor_opts. compactor_total_memory_bytes = memory_for_compactor ( total_memory_bytes) ;
220
+ compute_opts. total_memory_bytes = total_memory_bytes
221
+ - memory_for_frontend ( total_memory_bytes)
222
+ - memory_for_compactor ( total_memory_bytes) ;
223
+ compute_opts. memory_manager_target_bytes =
224
+ Some ( gradient_reserve_memory_bytes ( total_memory_bytes) ) ;
225
+
210
226
// Apply node-specific options
211
- if let Some ( total_memory_bytes) = opts. node_opts . total_memory_bytes {
212
- compute_opts. total_memory_bytes = total_memory_bytes;
213
- }
214
227
if let Some ( parallelism) = opts. node_opts . parallelism {
215
228
compute_opts. parallelism = parallelism;
216
229
}
@@ -234,3 +247,19 @@ pub fn map_single_node_opts_to_standalone_opts(opts: SingleNodeOpts) -> ParsedSt
234
247
compactor_opts : Some ( compactor_opts) ,
235
248
}
236
249
}
250
+
251
+ fn memory_for_frontend ( total_memory_bytes : usize ) -> usize {
252
+ if total_memory_bytes <= ( 16 << 30 ) {
253
+ total_memory_bytes / 8
254
+ } else {
255
+ ( total_memory_bytes - ( 16 << 30 ) ) / 16 + ( 16 << 30 ) / 8
256
+ }
257
+ }
258
+
259
+ fn memory_for_compactor ( total_memory_bytes : usize ) -> usize {
260
+ if total_memory_bytes <= ( 16 << 30 ) {
261
+ total_memory_bytes / 8
262
+ } else {
263
+ ( total_memory_bytes - ( 16 << 30 ) ) / 16 + ( 16 << 30 ) / 8
264
+ }
265
+ }
0 commit comments