@@ -2,26 +2,12 @@ use crate::{
2
2
actions:: { ESActionWrapper , RawAction } ,
3
3
algos:: ContainerMetric ,
4
4
config:: Config ,
5
- // es_lass::LassESScaler,
6
5
fn_dag:: FnId ,
7
6
node:: NodeId ,
8
7
request:: ReqId ,
9
- scale_preloader:: { least_task:: LeastTaskPreLoader , ScalePreLoader } ,
10
- scaler_ai:: AIScaler ,
11
- // es_ai::{self, AIScaler},
12
- // es_faas_flow::FaasFlowScheduler,
13
- // es_fnsche::FnScheScaler,
14
- scaler_hpa:: HpaESScaler ,
15
- scaler_lass:: LassESScaler ,
16
- scaler_no:: ScalerNo ,
17
- sche_faasflow:: FaasFlowScheduler ,
18
- sche_fnsche:: FnScheScheduler ,
19
- sche_pass:: PassScheduler ,
20
- sche_pos:: PosScheduler ,
21
- sche_rule_based:: { RuleBasedScheduler , ScheduleRule } ,
22
- sche_time_aware:: TimeScheduler ,
23
- schedule:: Scheduler ,
8
+ scale:: num:: { ai:: AIScaleNum , hpa:: HpaScaleNum , lass:: LassScaleNum , no:: NoScaleNum , ScaleNum } ,
24
9
sim_env:: SimEnv ,
10
+ sim_run:: Scheduler ,
25
11
} ;
26
12
use enum_as_inner:: EnumAsInner ;
27
13
use std:: {
@@ -33,19 +19,6 @@ pub trait ActionEffectStage {
33
19
fn prepare_next ( & mut self ) -> bool ;
34
20
}
35
21
36
- pub trait ESScaler {
37
- /// return (action, action_is_done)
38
- /// - action_is_done: need prepare next state and wait for new action
39
- fn scale_for_fn (
40
- & mut self ,
41
- env : & SimEnv ,
42
- fnid : FnId ,
43
- metric : & ContainerMetric ,
44
- action : & ESActionWrapper ,
45
- ) -> ( f32 , bool ) ;
46
-
47
- fn fn_available_count ( & self , fnid : FnId , env : & SimEnv ) -> usize ;
48
- }
49
22
#[ derive( Debug ) ]
50
23
pub struct StageScaleForFns {
51
24
current_index : Option < usize > ,
@@ -139,7 +112,7 @@ pub struct StageScaleDown {
139
112
impl StageScaleDown {
140
113
fn new ( env : & SimEnv ) -> Self {
141
114
let mut idle_containers = Vec :: new ( ) ;
142
- let nodes = env. nodes . borrow ( ) ;
115
+ let nodes = env. core . nodes ( ) ;
143
116
for node in nodes. iter ( ) {
144
117
for ( & fnid, container) in node. fn_containers . borrow ( ) . iter ( ) {
145
118
if container. is_idle ( ) {
@@ -241,7 +214,7 @@ impl ESState {
241
214
}
242
215
fn_metrics. extend ( fn_all_sched_metrics) ;
243
216
244
- assert_eq ! ( fn_metrics. len( ) , env. fns . borrow ( ) . len( ) ) ;
217
+ assert_eq ! ( fn_metrics. len( ) , env. core . fns ( ) . len( ) ) ;
245
218
self . stage = EFStage :: ScaleForFns ( StageScaleForFns {
246
219
current_index : None ,
247
220
fn_metrics,
@@ -250,8 +223,8 @@ impl ESState {
250
223
} ) ;
251
224
if self . stage . as_scale_for_fns_mut ( ) . unwrap ( ) . prepare_next ( ) {
252
225
// pre load info of scheduler because scaler need to know the info of scheduler
253
- env. spec_scheduler
254
- . borrow_mut ( )
226
+ env. mechanisms
227
+ . spec_scheduler_mut ( )
255
228
. as_mut ( )
256
229
. unwrap ( )
257
230
. prepare_this_turn_will_schedule ( env) ;
@@ -281,57 +254,6 @@ impl ESState {
281
254
}
282
255
}
283
256
284
- pub fn prepare_spec_scheduler ( config : & Config ) -> Option < Box < dyn Scheduler + Send > > {
285
- if config. es . sche_faas_flow ( ) {
286
- return Some ( Box :: new ( FaasFlowScheduler :: new ( ) ) ) ;
287
- } else if config. es . sche_gofs ( ) {
288
- return Some ( Box :: new ( RuleBasedScheduler {
289
- rule : ScheduleRule :: GOFS ,
290
- } ) ) ;
291
- } else if config. es . sche_load_least ( ) {
292
- return Some ( Box :: new ( RuleBasedScheduler {
293
- rule : ScheduleRule :: LeastLoad ,
294
- } ) ) ;
295
- } else if config. es . sche_random ( ) {
296
- return Some ( Box :: new ( RuleBasedScheduler {
297
- rule : ScheduleRule :: Random ,
298
- } ) ) ;
299
- } else if config. es . sche_round_robin ( ) {
300
- return Some ( Box :: new ( RuleBasedScheduler {
301
- rule : ScheduleRule :: RoundRobin ( 9999 ) ,
302
- } ) ) ;
303
- } else if config. es . sche_pass ( ) {
304
- return Some ( Box :: new ( PassScheduler :: new ( ) ) ) ;
305
- } else if config. es . sche_rule ( ) {
306
- return Some ( Box :: new ( PosScheduler :: new ( ) ) ) ;
307
- } else if config. es . sche_fnsche ( ) {
308
- return Some ( Box :: new ( FnScheScheduler :: new ( ) ) ) ;
309
- } else if config. es . sche_time ( ) {
310
- return Some ( Box :: new ( TimeScheduler :: new ( ) ) ) ;
311
- }
312
- None
313
- }
314
-
315
- pub fn prepare_spec_scaler ( config : & Config ) -> Option < Box < dyn ESScaler + Send > > {
316
- let es = & config. es ;
317
-
318
- if es. scale_lass ( ) {
319
- return Some ( Box :: new ( LassESScaler :: new ( ) ) ) ;
320
- }
321
- // } else if es.sche_fnsche() {
322
- // return Some(Box::new(FnScheScaler::new()));
323
- // } else
324
- if es. scale_hpa ( ) {
325
- return Some ( Box :: new ( HpaESScaler :: new ( ) ) ) ;
326
- } else if es. scale_ai ( ) {
327
- return Some ( Box :: new ( AIScaler :: new ( config) ) ) ;
328
- } else if es. scale_up_no ( ) {
329
- return Some ( Box :: new ( ScalerNo :: new ( ) ) ) ;
330
- }
331
-
332
- None
333
- }
334
-
335
257
impl SimEnv {
336
258
// return false if schedule failed
337
259
fn step_schedule ( & self , raw_action : u32 , stage : & mut StageSchedule ) -> bool {
@@ -365,8 +287,6 @@ impl SimEnv {
365
287
let mut action_done = false ;
366
288
// 只有确定了下一个action,才会有可以返回的state
367
289
368
- let config_es = || & self . config . es ;
369
-
370
290
loop {
371
291
if ef_state. stage . is_frame_begin ( ) {
372
292
if ( self . current_frame ( ) == 0 && ef_state. computed ) || self . current_frame ( ) > 0 {
@@ -389,7 +309,7 @@ impl SimEnv {
389
309
break ;
390
310
}
391
311
// faas flow don't do scale for fns
392
- if config_es ( ) . sche_faas_flow ( ) {
312
+ if self . help . config ( ) . es . sche_faas_flow ( ) {
393
313
ef_state. trans_stage ( self ) ;
394
314
continue ;
395
315
}
@@ -398,8 +318,8 @@ impl SimEnv {
398
318
// let fnid = stage.current_fnid.unwrap();
399
319
let & ( fnid, ref metric) = stage. current_fn ( ) . unwrap ( ) ;
400
320
let ( action_score_, action_done_) = self
401
- . spec_ef_scaler
402
- . borrow_mut ( )
321
+ . mechanisms
322
+ . spec_scale_num_mut ( )
403
323
. as_mut ( )
404
324
. unwrap ( )
405
325
. scale_for_fn ( self , fnid, metric, & raw_action) ;
@@ -412,7 +332,7 @@ impl SimEnv {
412
332
}
413
333
} else if ef_state. stage . is_schedule ( ) {
414
334
log:: info!( "schedule" ) ;
415
- if self . config . es . sche_ai ( ) {
335
+ if self . help . config ( ) . es . sche_ai ( ) {
416
336
if action_done {
417
337
// next action effect stage is prepared
418
338
break ;
@@ -441,11 +361,11 @@ impl SimEnv {
441
361
// self.try_put_fn(true);
442
362
// ef_state.trans_stage(self);
443
363
// }
444
- else if let Some ( spec_sche) = self . spec_scheduler . borrow_mut ( ) . as_mut ( ) {
364
+ else if let Some ( spec_sche) = self . mechanisms . spec_scheduler_mut ( ) . as_mut ( ) {
445
365
// let mut spec = self.spec_scheduler.borrow_mut();
446
366
spec_sche. schedule_some ( self ) ;
447
367
ef_state. trans_stage ( self ) ;
448
- } else if self . config . es . sche_fnsche ( ) {
368
+ } else if self . help . config ( ) . es . sche_fnsche ( ) {
449
369
// sche is done in scale stage
450
370
ef_state. trans_stage ( self ) ;
451
371
} else {
@@ -458,7 +378,7 @@ impl SimEnv {
458
378
ef_state. computed = true ;
459
379
self . sim_run ( ) ;
460
380
frame_score = self . score ( ) ;
461
- self . metric_record . borrow_mut ( ) . add_frame ( self ) ;
381
+ self . help . metric_record_mut ( ) . add_frame ( self ) ;
462
382
463
383
ef_state. trans_stage ( self ) ;
464
384
}
0 commit comments