diff options
author | wolff1 <wolff1@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2009-05-01 16:34:53 +0000 |
---|---|---|
committer | wolff1 <wolff1@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2009-05-01 16:34:53 +0000 |
commit | 19f1c99ce68df8edb661c014ac20105050bd76d5 (patch) | |
tree | e1151081c5b9a07afb41eef585d28d259670c2bb | |
parent | f9b1a9e855c151b4904b1f1d705a05ef92e26d16 (diff) | |
download | ATCD-19f1c99ce68df8edb661c014ac20105050bd76d5.tar.gz |
added bestfit algorithm stub
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$ * |