summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwolff1 <wolff1@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2009-05-01 16:43:50 +0000
committerwolff1 <wolff1@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2009-05-01 16:43:50 +0000
commit25fdb011c3e9c46e0ac834ea71a540b6bfc8e3a2 (patch)
treed3d00ffa28f27788ca78878200faacdb7e7ba42c
parent19f1c99ce68df8edb661c014ac20105050bd76d5 (diff)
downloadATCD-25fdb011c3e9c46e0ac834ea71a540b6bfc8e3a2.tar.gz
changed schedulability test
-rw-r--r--TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/DeCoRAM.mpc2
-rw-r--r--TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/FTRMFF_Bestfit.cpp11
-rw-r--r--TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/FTRMFF_Bestfit.h7
-rw-r--r--TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/FailureAwareWCRT.cpp5
-rw-r--r--TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/Scheduler.cpp3
-rw-r--r--TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/schedulability_check.cpp87
6 files changed, 51 insertions, 64 deletions
diff --git a/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/DeCoRAM.mpc b/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/DeCoRAM.mpc
index c58fc7e0f9e..44030dada22 100644
--- a/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/DeCoRAM.mpc
+++ b/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/DeCoRAM.mpc
@@ -219,7 +219,7 @@ project (schedulability_check) : acelib {
exename = scheck
exeout = ../bin
- macros += DO_DEBUG
+ macros += DO_DEBUG // DO_TRACE
Source_Files {
Algorithms.cpp
diff --git a/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/FTRMFF_Bestfit.cpp b/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/FTRMFF_Bestfit.cpp
index 4167ea537b8..dd7091c0219 100644
--- a/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/FTRMFF_Bestfit.cpp
+++ b/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/FTRMFF_Bestfit.cpp
@@ -16,11 +16,6 @@
#include "Forward_Ranking_Scheduler.h"
#include "Packing_Scheduler.h"
-FTRMFF_Bestfit::FTRMFF_Bestfit (const std::string & algorithm)
- : algorithm_ (algorithm)
-{
-}
-
FTRMFF_Bestfit::~FTRMFF_Bestfit ()
{
}
@@ -29,8 +24,7 @@ FTRMFF_Output
FTRMFF_Bestfit::operator () (const FTRMFF_Input & input)
{
FTRMFF_Bestfit_Algorithm algorithm (input.processors,
- input.backup_count,
- algorithm_);
+ input.backup_count);
FTRMFF_Output output;
output.schedule = algorithm (input.tasks);
@@ -43,8 +37,7 @@ FTRMFF_Bestfit::operator () (const FTRMFF_Input & input)
FTRMFF_Bestfit_Algorithm::FTRMFF_Bestfit_Algorithm (
const PROCESSOR_LIST & processors,
- unsigned int consistency_level,
- const std::string & scheduler)
+ unsigned int consistency_level)
: consistency_level_ (consistency_level),
scheduler_ (processors,
consistency_level_)
diff --git a/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/FTRMFF_Bestfit.h b/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/FTRMFF_Bestfit.h
index c46109c0457..31f7e2810ed 100644
--- a/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/FTRMFF_Bestfit.h
+++ b/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/FTRMFF_Bestfit.h
@@ -18,13 +18,9 @@
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 :
@@ -33,8 +29,7 @@ class FTRMFF_Bestfit_Algorithm :
{
public:
FTRMFF_Bestfit_Algorithm (const PROCESSOR_LIST & processors,
- unsigned int consistency_level,
- const std::string & scheduler);
+ unsigned int consistency_level);
virtual ~FTRMFF_Bestfit_Algorithm ();
diff --git a/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/FailureAwareWCRT.cpp b/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/FailureAwareWCRT.cpp
index f0e96ce07a2..20730846d4b 100644
--- a/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/FailureAwareWCRT.cpp
+++ b/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/FailureAwareWCRT.cpp
@@ -26,14 +26,19 @@ FailureAwareWCRT::operator () (double previous,
{
// find all tasks that need to become active
std::set<Taskname> active_tasks;
+
for (TASK_LIST::iterator t_it = tasks_.begin ();
t_it != tasks_.end ();
++t_it)
{
+ TRACE (*t_it);
+
// check in the replica map if all previous tasks get activated
// and switch the task to primary if this is the case
PROCESSOR_SET necessary_failures = replica_finder_ (*t_it);
+ TRACE (necessary_failures);
+
PROCESSOR_SET difference;
std::set_intersection (failures.begin (),
failures.end (),
diff --git a/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/Scheduler.cpp b/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/Scheduler.cpp
index e9a77176288..6259c589785 100644
--- a/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/Scheduler.cpp
+++ b/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/Scheduler.cpp
@@ -119,6 +119,9 @@ PROCESSOR_SET
ReplicaFinder::operator () (const Task & task) const
{
PROCESSOR_SET result;
+
+ TRACE ("TEST");
+ TRACE (rep_groups_);
REPLICA_GROUPS::const_iterator replicas =
rep_groups_.find (primary_name (task));
diff --git a/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/schedulability_check.cpp b/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/schedulability_check.cpp
index cd57eda5114..ba81c31dd68 100644
--- a/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/schedulability_check.cpp
+++ b/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/schedulability_check.cpp
@@ -27,13 +27,14 @@ bool average_mode = false;
bool check_overbooking = false;
unsigned int consistency_level = 0;
-class ScheduleChecker : public std::binary_function <double,
- SCHEDULE::value_type,
- double>
+typedef std::map <Processor, FailureAwareWCRT> WCRT_MAP;
+
+class ScheduleChecker
{
public:
ScheduleChecker (const SCHEDULE & schedule)
- : schedule_ (schedule)
+ : schedule_ (schedule),
+ replica_finder_ (replica_groups_)
{
max_rank_ = this->max_rank ();
@@ -63,41 +64,23 @@ public:
primary_name (*task_it)].push_back (position);
}
}
+
+ // fill wcrt_map
+ wcrt_map_.insert (std::pair <Processor, FailureAwareWCRT> (
+ processor,
+ FailureAwareWCRT (sched_it->second,
+ replica_finder_)));
}
- }
- double operator () (double previous, const SCHEDULE::value_type & entry)
- {
- if (previous == .0)
- return .0;
-
- PROCESSOR_SETS scenarios =
- this->calculate_failure_scenarions (entry.first,
- max_rank_);
-
- return std::max(std::accumulate (scenarios.begin (),
- scenarios.end (),
- -1.0,
- FailureAwareWCRT (entry.second,
- replica_groups_)),
- previous);
+
+
}
-private:
- PROCESSOR_SETS calculate_failure_scenarions (const Processor & processor,
- unsigned int consistency_level)
+ int check_schedulability (void)
{
- PROCESSOR_SETS result;
PROCESSOR_LIST all_processors = get_processors (schedule_, true);
- // remove current processor
- PROCESSOR_LIST::iterator myprocessor = std::find (all_processors.begin (),
- all_processors.end (),
- processor);
-
- all_processors.erase (myprocessor);
-
- unsigned int tupel_size = std::min (consistency_level,
+ unsigned int tupel_size = std::min (max_rank_,
(unsigned int) all_processors.size ());
PROCESSOR_LIST combination;
@@ -112,22 +95,39 @@ private:
do
{
PROCESSOR_SET set;
- // add a permutation of the relevant failures
std::copy (combination.begin (),
combination.end (),
std::inserter (set,
set.begin ()));
+
+ // check combination against each task;
+ for (WCRT_MAP::iterator wcrt_it = wcrt_map_.begin ();
+ wcrt_it != wcrt_map_.end ();
+ ++wcrt_it)
+ {
+ // ignore failure sets that contain the own processor
+ if (set.find (wcrt_it->first) != set.end ())
+ continue;
+
+ DBG_OUT ("checking " << wcrt_it->first << " with " << set);
- result.push_back (set);
+ double wcrt = (wcrt_it->second) (-1.0, set);
+ if (!(wcrt > .0))
+ {
+ DBG_OUT (wcrt_it->first << " not schedulable with " << set << ": " << wcrt);
+ return 1;
+ }
+ }
}
while (next_combination (all_processors.begin (),
all_processors.end (),
combination.begin (),
combination.end ()));
- return result;
+ return 0;
}
+private:
unsigned int max_rank (void)
{
unsigned int max_rank = 0;
@@ -151,6 +151,8 @@ private:
private:
const SCHEDULE & schedule_;
REPLICA_GROUPS replica_groups_;
+ ReplicaFinder replica_finder_;
+ WCRT_MAP wcrt_map_;
unsigned int max_rank_;
};
@@ -253,19 +255,8 @@ int main (int argc, char *argv[])
}
ScheduleChecker checker (min_schedule);
- double wcrt = -1.0;
- for (SCHEDULE::iterator it = min_schedule.begin ();
- it != min_schedule.end ();
- ++it)
- {
- wcrt = checker (wcrt, *it);
- if (wcrt > .0)
- DBG_OUT (it->first << ": " << "(" << wcrt << "," << (--(it->second.end ()))->period << ")");
- else
- DBG_OUT (it->first << ": not schedulable");
- }
-
- return wcrt > .0;
+
+ return checker.check_schedulability ();
} // end else counting_mode not true
return 0;