Add a flag to provide timer for the case of no objs in Meta-Balancer
authorHarshitha <gplkrsh2@illinois.edu>
Wed, 24 Oct 2012 06:54:58 +0000 (01:54 -0500)
committerHarshitha <gplkrsh2@illinois.edu>
Wed, 24 Oct 2012 06:54:58 +0000 (01:54 -0500)
src/ck-ldb/CentralLB.C
src/ck-ldb/MetaBalancer.C

index 55c0a7f7cde8cbcc36f18765556252ede12b88c7..1cffe352701b36b6f276930cd08fa2e2ea0b5e88 100644 (file)
@@ -1074,6 +1074,7 @@ LBMigrateMsg* CentralLB::Strategy(LDStats* stats)
 
   LBMigrateMsg *msg = createMigrateMsg(stats);
 
+       /* Extra feature for MetaBalancer
   if (_lb_args.metaLbOn()) {
     int clients = CkNumPes();
     LBInfo info(clients);
@@ -1082,6 +1083,7 @@ LBMigrateMsg* CentralLB::Strategy(LDStats* stats)
     info.getSummary(mLoad, mCpuLoad, totalLoad);
     theLbdb->UpdateDataAfterLB(mLoad, mCpuLoad, totalLoad/clients);
   }
+       */
 
   if (_lb_args.debug()) {
     double strat_end_time = CkWallTimer();
index 9ab9ee105ccabea5aa74a8df0c84444a15fe3649..a7f84af13f987fa3fee92255623b3276a68c0c80 100644 (file)
@@ -79,6 +79,8 @@ CkGroupID _metalbred;
 
 CkpvDeclare(int, metalbInited);  /**< true if metabalancer is inited */
 
+double _nobj_timer = 10.0;
+
 // mainchare
 MetaLBInit::MetaLBInit(CkArgMsg *m) {
 #if CMK_LBDB_ON
@@ -92,6 +94,9 @@ MetaLBInit::MetaLBInit(CkArgMsg *m) {
 void _metabalancerInit() {
   CkpvInitialize(int, metalbInited);
   CkpvAccess(metalbInited) = 0;
+  char **argv = CkGetArgv();
+       CmiGetArgDoubleDesc(argv, "+MetaLBNoObjTimer", &_nobj_timer,
+                       "Time in seconds before triggering reduction for no objs");
 }
 
 void MetaBalancer::initnodeFn() {
@@ -357,6 +362,7 @@ void MetaBalancer::ReceiveMinStats(CkReductionMsg *msg) {
     DEBAD(("Prev LB Data Type %d, max/avg %lf, local/remote %lf\n",
       tmp_lb_type, tmp_max_avg_ratio, tmp_comm_ratio));
 
+#if EXTRA_FEATURE
     if ((avg_utilization < utilization_threshold || max/avg >= tolerate_imb) &&
           adaptive_lbdb.history_data.size() > MIN_STATS) {
       DEBAD(("Trigger soon even though we calculated lbperiod max/avg(%lf) and \
@@ -364,6 +370,7 @@ void MetaBalancer::ReceiveMinStats(CkReductionMsg *msg) {
       TriggerSoon(iteration_n, max/avg, tolerate_imb);
       return;
     }
+#endif
 
     // If the new lb period from linear extrapolation is greater than maximum
     // iteration known from previously collected data, then inform all the
@@ -385,6 +392,7 @@ void MetaBalancer::ReceiveMinStats(CkReductionMsg *msg) {
   DEBAD(("Prev LB Data Type %d, max/avg %lf, local/remote %lf\n", tmp_lb_type,
       tmp_max_avg_ratio, tmp_comm_ratio));
 
+#if EXTRA_FEATURE
   // This would be called when linear extrapolation did not provide suitable
   // period provided there is enough  historical data 
   if ((avg_utilization < utilization_threshold || max/avg >= tolerate_imb) &&
@@ -394,6 +402,7 @@ void MetaBalancer::ReceiveMinStats(CkReductionMsg *msg) {
     TriggerSoon(iteration_n, max/avg, tolerate_imb);
     return;
   }
+#endif
 
 }
 
@@ -701,7 +710,7 @@ void MetaBalancer::ResetAdaptive() {
 // This is required for PEs with no objs
 void MetaBalancer::periodicCall(void *ad) {
   MetaBalancer *s = (MetaBalancer *)ad;
-  CcdCallFnAfterOnPE((CcdVoidFn)checkForNoObj, (void *)s, 10, CkMyPe());
+  CcdCallFnAfterOnPE((CcdVoidFn)checkForNoObj, (void *)s, _nobj_timer, CkMyPe());
 }
 
 void MetaBalancer::checkForNoObj(void *ad) {