@@ -120,22 +120,44 @@ impl ThreadManager {
120
120
}
121
121
}
122
122
123
- pub fn get_native ( & self , name : & str ) -> Option < & NativeThreadRuntime > {
123
+ pub fn try_get_native ( & self , name : & str ) -> Option < & NativeThreadRuntime > {
124
124
self . lookup (
125
125
name,
126
126
& self . native_runtime_mapping ,
127
127
& self . native_thread_runtimes ,
128
128
)
129
129
}
130
+ pub fn get_native ( & self , name : & str ) -> & NativeThreadRuntime {
131
+ if let Some ( runtime) = self . try_get_native ( name) {
132
+ runtime
133
+ } else {
134
+ panic ! ( "Native thread pool {name} not configured!" ) ;
135
+ }
136
+ }
130
137
131
- pub fn get_rayon ( & self , name : & str ) -> Option < & RayonRuntime > {
138
+ pub fn try_get_rayon ( & self , name : & str ) -> Option < & RayonRuntime > {
132
139
self . lookup ( name, & self . rayon_runtime_mapping , & self . rayon_runtimes )
133
140
}
134
141
135
- pub fn get_tokio ( & self , name : & str ) -> Option < & TokioRuntime > {
142
+ pub fn get_rayon ( & self , name : & str ) -> & RayonRuntime {
143
+ if let Some ( runtime) = self . try_get_rayon ( name) {
144
+ runtime
145
+ } else {
146
+ panic ! ( "Rayon thread pool {name} not configured!" ) ;
147
+ }
148
+ }
149
+
150
+ pub fn try_get_tokio ( & self , name : & str ) -> Option < & TokioRuntime > {
136
151
self . lookup ( name, & self . tokio_runtime_mapping , & self . tokio_runtimes )
137
152
}
138
153
154
+ pub fn get_tokio ( & self , name : & str ) -> & TokioRuntime {
155
+ if let Some ( runtime) = self . try_get_tokio ( name) {
156
+ runtime
157
+ } else {
158
+ panic ! ( "Tokio runtime {name} not configured!" ) ;
159
+ }
160
+ }
139
161
pub fn set_process_affinity ( config : & ThreadManagerConfig ) -> anyhow:: Result < Vec < usize > > {
140
162
let chosen_cores_mask = config. default_core_allocation . as_core_mask_vector ( ) ;
141
163
@@ -214,6 +236,81 @@ mod tests {
214
236
#[ cfg( not( target_os = "linux" ) ) ]
215
237
fn validate_affinity ( _expect_cores : & [ usize ] , _error_msg : & str ) { }
216
238
239
+ /* #[test]
240
+ fn thread_priority() {
241
+ let priority_high = 10;
242
+ let priority_default = crate::policy::DEFAULT_PRIORITY;
243
+ let priority_low = 1;
244
+ let conf = ThreadManagerConfig {
245
+ native_configs: HashMap::from([
246
+ (
247
+ "high".to_owned(),
248
+ NativeConfig {
249
+ priority: priority_high,
250
+ ..Default::default()
251
+ },
252
+ ),
253
+ (
254
+ "default".to_owned(),
255
+ NativeConfig {
256
+ ..Default::default()
257
+ },
258
+ ),
259
+ (
260
+ "low".to_owned(),
261
+ NativeConfig {
262
+ priority: priority_low,
263
+ ..Default::default()
264
+ },
265
+ ),
266
+ ]),
267
+ ..Default::default()
268
+ };
269
+
270
+ let manager = ThreadManager::new(conf).unwrap();
271
+ let high = manager.get_native("high");
272
+ let low = manager.get_native("low");
273
+ let default = manager.get_native("default");
274
+
275
+ high.spawn(move || {
276
+ let prio =
277
+ thread_priority::get_thread_priority(thread_priority::thread_native_id()).unwrap();
278
+ assert_eq!(
279
+ prio,
280
+ thread_priority::ThreadPriority::Crossplatform((priority_high).try_into().unwrap())
281
+ );
282
+ })
283
+ .unwrap()
284
+ .join()
285
+ .unwrap();
286
+ low.spawn(move || {
287
+ let prio =
288
+ thread_priority::get_thread_priority(thread_priority::thread_native_id()).unwrap();
289
+ assert_eq!(
290
+ prio,
291
+ thread_priority::ThreadPriority::Crossplatform((priority_low).try_into().unwrap())
292
+ );
293
+ })
294
+ .unwrap()
295
+ .join()
296
+ .unwrap();
297
+ default
298
+ .spawn(move || {
299
+ let prio =
300
+ thread_priority::get_thread_priority(thread_priority::thread_native_id())
301
+ .unwrap();
302
+ assert_eq!(
303
+ prio,
304
+ thread_priority::ThreadPriority::Crossplatform(
305
+ (priority_default).try_into().unwrap()
306
+ )
307
+ );
308
+ })
309
+ .unwrap()
310
+ .join()
311
+ .unwrap();
312
+ }*/
313
+
217
314
#[ test]
218
315
fn process_affinity ( ) {
219
316
let conf = ThreadManagerConfig {
@@ -222,7 +319,6 @@ mod tests {
222
319
NativeConfig {
223
320
core_allocation : CoreAllocation :: DedicatedCoreSet { min : 0 , max : 4 } ,
224
321
max_threads : 5 ,
225
- priority : 0 ,
226
322
..Default :: default ( )
227
323
} ,
228
324
) ] ) ,
@@ -232,7 +328,7 @@ mod tests {
232
328
} ;
233
329
234
330
let manager = ThreadManager :: new ( conf) . unwrap ( ) ;
235
- let runtime = manager. get_native ( "test" ) . unwrap ( ) ;
331
+ let runtime = manager. get_native ( "test" ) ;
236
332
237
333
let thread1 = runtime
238
334
. spawn ( || {
@@ -263,7 +359,6 @@ mod tests {
263
359
RayonConfig {
264
360
core_allocation : CoreAllocation :: DedicatedCoreSet { min : 1 , max : 4 } ,
265
361
worker_threads : 3 ,
266
- priority : 0 ,
267
362
..Default :: default ( )
268
363
} ,
269
364
) ] ) ,
@@ -273,7 +368,7 @@ mod tests {
273
368
} ;
274
369
275
370
let manager = ThreadManager :: new ( conf) . unwrap ( ) ;
276
- let rayon_runtime = manager. get_rayon ( "test" ) . unwrap ( ) ;
371
+ let rayon_runtime = manager. get_rayon ( "test" ) ;
277
372
278
373
let _rr = rayon_runtime. rayon_pool . broadcast ( |ctx| {
279
374
println ! ( "Rayon thread {} reporting" , ctx. index( ) ) ;
0 commit comments