summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwolff1 <wolff1@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2009-05-01 16:34:53 +0000
committerwolff1 <wolff1@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2009-05-01 16:34:53 +0000
commit19f1c99ce68df8edb661c014ac20105050bd76d5 (patch)
treee1151081c5b9a07afb41eef585d28d259670c2bb
parentf9b1a9e855c151b4904b1f1d705a05ef92e26d16 (diff)
downloadATCD-19f1c99ce68df8edb661c014ac20105050bd76d5.tar.gz
added bestfit algorithm stub
-rw-r--r--TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/DeCoRAM.mpc19
-rw-r--r--TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/FTRMFF_Bestfit.cpp112
-rw-r--r--TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/FTRMFF_Bestfit.h53
-rw-r--r--TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/FailureAwareWCRT.cpp7
-rw-r--r--TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/FailureAwareWCRT.h3
-rw-r--r--TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/Forward_Ranking_Scheduler.h1
-rw-r--r--TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/bestfit_ftrmff.cpp91
-rw-r--r--TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/worstfit_ftrmff.cpp2
8 files changed, 276 insertions, 12 deletions
diff --git a/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/DeCoRAM.mpc b/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/DeCoRAM.mpc
index 3c4aef983ee..c58fc7e0f9e 100644
--- a/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/DeCoRAM.mpc
+++ b/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/DeCoRAM.mpc
@@ -195,6 +195,25 @@ project (forward_ranking_ftrmff) : acelib {
}
}
+project (bestfit_ranked_ftrmff) : acelib {
+
+ exename = ftrmbf
+ exeout = ../bin
+
+ macros += DO_DEBUG
+
+ Source_Files {
+ Algorithms.cpp
+ Schedule.cpp
+ Scheduler.cpp
+ CTT_Enhanced.cpp
+ Forward_Ranking_Scheduler.cpp
+ FailureAwareWCRT.cpp
+ FTRMFF_Bestfit.cpp
+ bestfit_ftrmff.cpp
+ }
+}
+
project (schedulability_check) : acelib {
exename = scheck
diff --git a/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/FTRMFF_Bestfit.cpp b/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/FTRMFF_Bestfit.cpp
new file mode 100644
index 00000000000..4167ea537b8
--- /dev/null
+++ b/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/FTRMFF_Bestfit.cpp
@@ -0,0 +1,112 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file FTRMFF_Bestfit.cpp
+ *
+ * $Id$
+ *
+ * @author Friedhelm Wolf (fwolf@dre.vanderbilt.edu)
+ */
+//=============================================================================
+
+#include <sstream>
+#include "FTRMFF_Bestfit.h"
+
+#include "Forward_Ranking_Scheduler.h"
+#include "Packing_Scheduler.h"
+
+FTRMFF_Bestfit::FTRMFF_Bestfit (const std::string & algorithm)
+ : algorithm_ (algorithm)
+{
+}
+
+FTRMFF_Bestfit::~FTRMFF_Bestfit ()
+{
+}
+
+FTRMFF_Output
+FTRMFF_Bestfit::operator () (const FTRMFF_Input & input)
+{
+ FTRMFF_Bestfit_Algorithm algorithm (input.processors,
+ input.backup_count,
+ algorithm_);
+
+ FTRMFF_Output output;
+ output.schedule = algorithm (input.tasks);
+ output.unscheduled_tasks = algorithm.get_unschedulable ();
+
+ DBG_OUT (algorithm.schedule ());
+
+ return output;
+}
+
+FTRMFF_Bestfit_Algorithm::FTRMFF_Bestfit_Algorithm (
+ const PROCESSOR_LIST & processors,
+ unsigned int consistency_level,
+ const std::string & scheduler)
+ : consistency_level_ (consistency_level),
+ scheduler_ (processors,
+ consistency_level_)
+{
+}
+
+FTRMFF_Bestfit_Algorithm::~FTRMFF_Bestfit_Algorithm ()
+{
+}
+
+SCHEDULING_MAP
+FTRMFF_Bestfit_Algorithm::operator () (const TASK_LIST & tasks)
+{
+ // sort tasks based on their periods, which results in a priority
+ // ordered list since we do rate monotonic scheduling
+ TASK_LIST sorted_input = tasks;
+
+ std::sort (sorted_input.begin (),
+ sorted_input.end (),
+ PeriodComparison <Task> ());
+
+ for (TASK_LIST::iterator it = sorted_input.begin ();
+ it != sorted_input.end ();
+ ++it)
+ {
+ // create the right amount of backup replica tasks
+ TASK_LIST task_group = create_ranked_tasks (*it,
+ consistency_level_);
+
+ // schedule the tasks of one application
+ for (TASK_LIST::iterator task_it = task_group.begin ();
+ task_it != task_group.end ();
+ ++task_it)
+ {
+ ScheduleResult r = scheduler_ (*task_it);
+ if (r.wcrt <= .0)
+ {
+ ScheduleProgress pg = {*task_it,
+ task_it->rank - consistency_level_ + 1};
+ unschedulable_.push_back (pg);
+ break;
+ }
+ else
+ {
+ scheduler_.update_schedule (r);
+ }
+
+ TRACE (*task_it << " -> " << r.processor);
+ }
+ }
+
+ return transform_schedule (scheduler_.schedule ());
+}
+
+SCHEDULE_PROGRESS_LIST
+FTRMFF_Bestfit_Algorithm::get_unschedulable ()
+{
+ return unschedulable_;
+}
+
+SCHEDULE
+FTRMFF_Bestfit_Algorithm::schedule () const
+{
+ return scheduler_.schedule ();
+}
diff --git a/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/FTRMFF_Bestfit.h b/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/FTRMFF_Bestfit.h
new file mode 100644
index 00000000000..c46109c0457
--- /dev/null
+++ b/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/FTRMFF_Bestfit.h
@@ -0,0 +1,53 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file FTRMFF_Bestfit.h
+ *
+ * $Id$
+ *
+ * @author Friedhelm Wolf (fwolf@dre.vanderbilt.edu)
+ */
+//=============================================================================
+
+#ifndef FTRMFF_BEST_FIT_ALGORITHM_H_
+#define FTRMFF_BEST_FIT_ALGORITHM_H_
+
+#include "Forward_Ranking_Scheduler.h"
+
+class FTRMFF_Bestfit : public FTRMFF_Algorithm
+{
+public:
+ FTRMFF_Bestfit (const std::string & algorithm = "Bestfit");
+
+ virtual ~FTRMFF_Bestfit ();
+
+ virtual FTRMFF_Output operator () (const FTRMFF_Input & input);
+private:
+ std::string algorithm_;
+};
+
+class FTRMFF_Bestfit_Algorithm :
+ public std::unary_function <TASK_LIST,
+ SCHEDULING_MAP>
+{
+public:
+ FTRMFF_Bestfit_Algorithm (const PROCESSOR_LIST & processors,
+ unsigned int consistency_level,
+ const std::string & scheduler);
+
+ virtual ~FTRMFF_Bestfit_Algorithm ();
+
+ virtual SCHEDULING_MAP operator () (const TASK_LIST & tasks);
+
+ SCHEDULE_PROGRESS_LIST get_unschedulable ();
+
+ SCHEDULE schedule () const;
+
+private:
+ SCHEDULE_PROGRESS_LIST unschedulable_;
+ unsigned int consistency_level_;
+ Forward_Ranking_Scheduler scheduler_;
+};
+
+#endif /* FTRMFF_BEST_FIT_ALGORITHM_H_ */
diff --git a/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/FailureAwareWCRT.cpp b/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/FailureAwareWCRT.cpp
index bab8b682854..f0e96ce07a2 100644
--- a/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/FailureAwareWCRT.cpp
+++ b/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/FailureAwareWCRT.cpp
@@ -14,13 +14,6 @@
#include <algorithm>
FailureAwareWCRT::FailureAwareWCRT (const TASK_LIST & tasks,
- const REPLICA_GROUPS & rep_groups)
- : tasks_ (tasks),
- replica_finder_ (rep_groups)
-{
-}
-
-FailureAwareWCRT::FailureAwareWCRT (const TASK_LIST & tasks,
const ReplicaFinder & replica_finder)
: tasks_ (tasks),
replica_finder_ (replica_finder)
diff --git a/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/FailureAwareWCRT.h b/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/FailureAwareWCRT.h
index 35cc5a82d87..8323b9959c7 100644
--- a/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/FailureAwareWCRT.h
+++ b/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/FailureAwareWCRT.h
@@ -22,9 +22,6 @@ class FailureAwareWCRT : public std::binary_function <double,
{
public:
FailureAwareWCRT (const TASK_LIST & tasks,
- const REPLICA_GROUPS & rep_groups);
-
- FailureAwareWCRT (const TASK_LIST & tasks,
const ReplicaFinder & replica_finder);
double operator () (double previous,
diff --git a/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/Forward_Ranking_Scheduler.h b/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/Forward_Ranking_Scheduler.h
index f59767610a1..9c4adb0e0b5 100644
--- a/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/Forward_Ranking_Scheduler.h
+++ b/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/Forward_Ranking_Scheduler.h
@@ -52,7 +52,6 @@ public:
virtual double schedule_task (const Task & task,
const Processor & processor);
-protected:
virtual void update_schedule (const ScheduleResult & result);
private:
diff --git a/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/bestfit_ftrmff.cpp b/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/bestfit_ftrmff.cpp
new file mode 100644
index 00000000000..0ffa5684a6c
--- /dev/null
+++ b/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/bestfit_ftrmff.cpp
@@ -0,0 +1,91 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file bestfit_ftrmff.cpp
+ *
+ * $Id$
+ *
+ * @author Friedhelm Wolf (fwolf@dre.vanderbilt.edu)
+ */
+//=============================================================================
+
+#include <fstream>
+#include <sstream>
+#include <iostream>
+#include <ace/Get_Opt.h>
+#include "FTRMFF_Bestfit.h"
+
+std::string filename = "test.sd"; // filename of task list input
+unsigned int m = 4; // number of processors
+unsigned int c = 2; // consitency level
+
+int ACE_TMAIN (int argc, ACE_TCHAR *argv[])
+{
+ if (argc > 1)
+ filename = argv[1];
+
+ if (argc > 2)
+ m = atoi (argv[2]);
+
+ if (argc > 3)
+ c = atoi (argv[3]);
+
+ TASK_LIST tasks;
+ PROCESSOR_LIST procs;
+ for (unsigned int i = 1; i <= m; ++i)
+ {
+ std::stringstream ss;
+ ss << "P";
+ if (i < 10)
+ ss << "00";
+ else if (i < 100)
+ ss << "0";
+ ss << i;
+ procs.push_back (ss.str ());
+ }
+
+ std::ifstream ifile;
+ ifile.open (filename.c_str ());
+
+ std::transform (
+ std::istream_iterator <std::string> (ifile),
+ std::istream_iterator <std::string> (),
+ std::inserter <TASK_LIST> (tasks,
+ tasks.begin ()),
+ string_to_task ());
+
+ ifile.close ();
+
+ FTRMFF_Bestfit ftrmff;
+
+ FTRMFF_Input input;
+ input.tasks = tasks;
+ input.processors = procs;
+ input.backup_count = c;
+ FTRMFF_Output result = ftrmff (input);
+
+#if 0
+ for (SCHEDULING_MAP::iterator it = result.schedule.begin ();
+ it != result.schedule.end ();
+ ++it)
+ {
+ std::cout << it->first << " -> "
+ << it->second.processor
+ << " (" << it->second.priority << ")"
+ << std::endl;
+ }
+#endif
+
+ if (result.unscheduled_tasks.size () > 0)
+ {
+ std::cout << "Could not schedule :"
+ << std::endl
+ << result.unscheduled_tasks
+ << std::endl;
+
+ return 1;
+ }
+
+ return 0;
+}
diff --git a/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/worstfit_ftrmff.cpp b/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/worstfit_ftrmff.cpp
index eea5b436123..5cb4b595a6b 100644
--- a/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/worstfit_ftrmff.cpp
+++ b/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/worstfit_ftrmff.cpp
@@ -2,7 +2,7 @@
//=============================================================================
/**
- * @file bestfit_ftrmff.cpp
+ * @file worstfit_ftrmff.cpp
*
* $Id$
*