diff options
author | wolff1 <wolff1@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2009-04-28 16:21:56 +0000 |
---|---|---|
committer | wolff1 <wolff1@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2009-04-28 16:21:56 +0000 |
commit | 86b033296fa5f6ee0432186fb5457eec588112a6 (patch) | |
tree | b8dd0ec79e59d2cde0697de7c2590b193a2a1c0a | |
parent | 72ef9ae8aea5eb2eb69e4bd422b8303237bb691b (diff) | |
download | ATCD-86b033296fa5f6ee0432186fb5457eec588112a6.tar.gz |
restructured forwarding algorithm
7 files changed, 211 insertions, 12 deletions
diff --git a/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/experiments/packing/generate.sh b/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/experiments/packing/generate.sh index f7a7d6336a5..0e6a48cd60d 100755 --- a/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/experiments/packing/generate.sh +++ b/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/experiments/packing/generate.sh @@ -25,7 +25,7 @@ for TASK_NO in 10 20 40 80 160; do \ -s $SS_UPPER \ -z $SS_LOWER > ./$DATA_DIR/$TASK_NO-tasks.input && \ for BACKUP_NO in 1 2 3 4 5; do \ - for ALGORITHM in bftrmff pkftrmff; do \ + for ALGORITHM in bftrmff pkftrmff fpftrmff; do \ echo "run $ALGORITHM for $BACKUP_NO backups..." && \ $DECORAM_BIN/$ALGORITHM \ ./$DATA_DIR/$TASK_NO-tasks.input \ diff --git a/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/experiments/packing/processor_util.sh b/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/experiments/packing/processor_util.sh index 06021692bcf..2108a4a2fc9 100755 --- a/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/experiments/packing/processor_util.sh +++ b/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/experiments/packing/processor_util.sh @@ -7,7 +7,7 @@ RESULT_DIR=$DATA_DIR/$EXPERIMENT_NAME if [ ! -d ./$DATA_DIR ]; then echo Directory $DATA_DIR does not exist && exit; fi if [ ! -d ./$RESULT_DIR ]; then mkdir -p ./$RESULT_DIR; fi -for ALGORITHM in bftrmff pkftrmff; do \ +for ALGORITHM in bftrmff pkftrmff fpftrmff; do \ for TASK_NO in 10 20 40 80 160; do \ echo "$TASK_NO tasks:" >> ./$RESULT_DIR/$EXPERIMENT_NAME-$ALGORITHM.dat && \ for BACKUP_NO in 1 2 3 4 5; do \ diff --git a/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/DeCoRAM.mpc b/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/DeCoRAM.mpc index 69e6baeabed..66ee46ec688 100644 --- a/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/DeCoRAM.mpc +++ b/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/DeCoRAM.mpc @@ -150,6 +150,7 @@ project (forward_packing_ftrmff) { Schedule.cpp CTT_Basic.cpp CTT_Enhanced.cpp + Scheduler.cpp Packing_Scheduler.cpp FTRMFF_Forward_Packing.cpp forward_packing_ftrmff.cpp diff --git a/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/FTRMFF_Forward_Packing.cpp b/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/FTRMFF_Forward_Packing.cpp index ad6da91c448..f5558b1d975 100644 --- a/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/FTRMFF_Forward_Packing.cpp +++ b/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/FTRMFF_Forward_Packing.cpp @@ -12,7 +12,6 @@ #include <sstream> #include "FTRMFF_Forward_Packing.h" -#include "Packing_Scheduler.h" FTRMFF_Forward_Packing::~FTRMFF_Forward_Packing () { @@ -36,9 +35,8 @@ FTRMFF_Forward_Packing::operator () (const FTRMFF_Input & input) FTRMFF_Forward_Packing_Algorithm::FTRMFF_Forward_Packing_Algorithm ( const PROCESSOR_LIST & processors, unsigned int consistency_level) - : schedule_ (create_schedule (processors)), - consistency_level_ (consistency_level), - scheduler_ (schedule_, consistency_level) + : consistency_level_ (consistency_level), + scheduler_ (processors, consistency_level) { } @@ -69,17 +67,20 @@ FTRMFF_Forward_Packing_Algorithm::operator () (const TASK_LIST & tasks) task_it != task_group.end (); ++task_it) { - if (scheduler_ (*task_it).wcrt <= .0) + ScheduleResult r = scheduler_ (*task_it); + if (r.wcrt <= .0) { ScheduleProgress pg = {*task_it, task_it->rank - consistency_level_ + 1}; unschedulable_.push_back (pg); break; } + + TRACE (*task_it << " -> " << r.processor); } } - return transform_schedule (schedule_); + return transform_schedule (scheduler_.schedule ()); } SCHEDULE_PROGRESS_LIST @@ -88,10 +89,10 @@ FTRMFF_Forward_Packing_Algorithm::get_unschedulable () return unschedulable_; } -const SCHEDULE & +SCHEDULE FTRMFF_Forward_Packing_Algorithm::schedule () const { - return schedule_; + return scheduler_.schedule (); } TASK_LIST diff --git a/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/FTRMFF_Forward_Packing.h b/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/FTRMFF_Forward_Packing.h index 591e82e5e3b..f0844934a94 100644 --- a/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/FTRMFF_Forward_Packing.h +++ b/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/FTRMFF_Forward_Packing.h @@ -38,12 +38,11 @@ public: SCHEDULE_PROGRESS_LIST get_unschedulable (); - const SCHEDULE & schedule () const; + SCHEDULE schedule () const; private: TASK_LIST create_tasks (const Task & task); private: - SCHEDULE schedule_; SCHEDULE_PROGRESS_LIST unschedulable_; unsigned int consistency_level_; Packing_Scheduler scheduler_; diff --git a/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/Scheduler.cpp b/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/Scheduler.cpp new file mode 100644 index 00000000000..4f623270b3a --- /dev/null +++ b/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/Scheduler.cpp @@ -0,0 +1,130 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Scheduler.cpp + * + * $Id$ + * + * @author Friedhelm Wolf (fwolf@dre.vanderbilt.edu) + */ +//============================================================================= + +#include "Scheduler.h" + +Scheduler::Scheduler (const PROCESSOR_LIST & processors, + unsigned int max_failures) + : schedule_ (create_schedule (processors)), + max_failures_ (max_failures) +{ +} + +Scheduler::~Scheduler (void) +{ +} + +ScheduleResult +Scheduler::operator () (const Task & task) +{ + ScheduleResult result; + result.task = task; + result.processor = "NO PROCESSOR"; + result.wcrt = .0; + + for (SCHEDULE::iterator processor_it = schedule_.begin (); + processor_it != schedule_.end (); + ++processor_it) + { + double wcrt = this->schedule_task (task, processor_it->first); + + if (wcrt > .0) + { + // take result value and exit if we find a match + result.wcrt = wcrt; + result.processor = processor_it->first; + + // add the task to the schedule + this->update_schedule (task, processor_it->first); + + break; + } + } // end for + + return result; +} + +void +Scheduler::update_schedule (const Task & task, + const Processor & processor) +{ + schedule_[processor].push_back (task); + + this->update_replica_groups (task, processor); +} + +void +Scheduler::update_replica_groups (const Task & task, + const Processor & processor) +{ + // create entry + TASK_POSITION tp (processor, + task); + + // add entry to respective replica group + if (task.rank == 0) + { + // create a new group + TASK_POSITIONS group; + group.push_back (tp); + replica_groups_[primary_name (task)] = group; + } + else + { + replica_groups_[primary_name (task)].push_back (tp); + } + + TRACE (replica_groups_); +} + +SCHEDULE +Scheduler::schedule (void) const +{ + return schedule_; +} + +std::ostream & operator<< (std::ostream & ostr, + const TASK_POSITION & tp) +{ + ostr << tp.second << "@" << tp.first; + + return ostr; +} + +std::ostream & operator<< (std::ostream & ostr, + const TASK_POSITIONS & tps) +{ + ostr << "["; + for (TASK_POSITIONS::const_iterator it = tps.begin (); + it != tps.end (); + ++it) + { + ostr << *it << ", "; + } + ostr << "]"; + + return ostr; +} + +std::ostream & operator<< (std::ostream & ostr, + const REPLICA_GROUPS & rg) +{ + ostr << "REPLICA_GROUPS:"; + for (REPLICA_GROUPS::const_iterator it = rg.begin (); + it != rg.end (); + ++it) + { + ostr << std::endl << it->first << ": " << it->second; + } + + return ostr; +} diff --git a/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/Scheduler.h b/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/Scheduler.h new file mode 100644 index 00000000000..4bcd4685431 --- /dev/null +++ b/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/Scheduler.h @@ -0,0 +1,68 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Scheduler.h + * + * $Id$ + * + * @author Friedhelm Wolf (fwolf@dre.vanderbilt.edu) + */ +//============================================================================= + +#ifndef SCHEDULER_H_ +#define SCHEDULER_H_ + +#include "Schedule.h" + +/// this map groups all tasks that belong to one replica group +typedef std::pair <Processor, Task> TASK_POSITION; +typedef std::vector <TASK_POSITION> TASK_POSITIONS; +typedef std::map <Taskname, TASK_POSITIONS> REPLICA_GROUPS; + +class Scheduler : public std::unary_function <Task, + ScheduleResult> +{ +public: + /// default ctor + Scheduler (const PROCESSOR_LIST & processors, + unsigned int max_failures); + + /// destructor + virtual ~Scheduler (void); + + // returns where the task has been placed and which WCRT it has. + // If the WCRT response time is 0, it is not schedulable. + ScheduleResult operator () (const Task & task); + + // this needs to be implemented by each scheduling algorithm + virtual double schedule_task (const Task & task, + const Processor & processor) = 0; + + // getter method for the schedule + SCHEDULE schedule () const; + +protected: + virtual void update_schedule (const Task & task, + const Processor & processor); + + void update_replica_groups (const Task & task, + const Processor & processor); + +protected: + SCHEDULE schedule_; + unsigned int max_failures_; + REPLICA_GROUPS replica_groups_; +}; + + +std::ostream & operator<< (std::ostream & ostr, + const TASK_POSITION & tp); + +std::ostream & operator<< (std::ostream & ostr, + const TASK_POSITIONS & tps); + +std::ostream & operator<< (std::ostream & ostr, + const REPLICA_GROUPS & rg); + +#endif /* SCHEDULER_H_ */ |