summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwolff1 <wolff1@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2009-04-28 16:21:56 +0000
committerwolff1 <wolff1@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2009-04-28 16:21:56 +0000
commit86b033296fa5f6ee0432186fb5457eec588112a6 (patch)
treeb8dd0ec79e59d2cde0697de7c2590b193a2a1c0a
parent72ef9ae8aea5eb2eb69e4bd422b8303237bb691b (diff)
downloadATCD-86b033296fa5f6ee0432186fb5457eec588112a6.tar.gz
restructured forwarding algorithm
-rwxr-xr-xTAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/experiments/packing/generate.sh2
-rwxr-xr-xTAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/experiments/packing/processor_util.sh2
-rw-r--r--TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/DeCoRAM.mpc1
-rw-r--r--TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/FTRMFF_Forward_Packing.cpp17
-rw-r--r--TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/FTRMFF_Forward_Packing.h3
-rw-r--r--TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/Scheduler.cpp130
-rw-r--r--TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/Scheduler.h68
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_ */