summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwolff1 <wolff1@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2009-05-05 13:45:18 +0000
committerwolff1 <wolff1@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2009-05-05 13:45:18 +0000
commitcf1756793043e645a99f489631cb1e321ee91a6c (patch)
tree3c6bdc93703f0708aa48a2e60822423ef164eb20
parenta5789f23706147a7d64622c85f930a84ae48f390 (diff)
downloadATCD-cf1756793043e645a99f489631cb1e321ee91a6c.tar.gz
added new analysis capabilities
-rwxr-xr-xTAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/experiments/packing/taskcount.sh19
-rwxr-xr-xTAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/experiments/packing/utilization.sh19
-rw-r--r--TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/schedulability_check.cpp81
3 files changed, 118 insertions, 1 deletions
diff --git a/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/experiments/packing/taskcount.sh b/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/experiments/packing/taskcount.sh
new file mode 100755
index 00000000000..77c41a01c44
--- /dev/null
+++ b/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/experiments/packing/taskcount.sh
@@ -0,0 +1,19 @@
+#!/bin/bash
+EXPERIMENT_NAME=taskcount
+DECORAM_BIN=../../bin
+DATA_DIR=$1
+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 pftrmff aftrmff frftrmff bsftrmbf bsftrmwf bsftrmbfnf bsftrmwfnf; do \
+ for TASK_NO in 10 20 40 80 160; do \
+ for BACKUP_NO in 1 2 3 4; do \
+ if [ -s ./$DATA_DIR/$ALGORITHM-$BACKUP_NO-backups-$TASK_NO-tasks.txt ]; then \
+ echo "calculate number of tasks of $ALGORITHM result for $BACKUP_NO backups and $TASK_NO tasks ..." && \
+ $DECORAM_BIN/scheck -t -f ./$DATA_DIR/$ALGORITHM-$BACKUP_NO-backups-$TASK_NO-tasks.txt > ./$RESULT_DIR/$EXPERIMENT_NAME-$ALGORITHM-$BACKUP_NO-backups-$TASK_NO-tasks.txt; \
+ fi;\
+ done; \
+ done; \
+done \ No newline at end of file
diff --git a/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/experiments/packing/utilization.sh b/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/experiments/packing/utilization.sh
new file mode 100755
index 00000000000..c91cd7b5c32
--- /dev/null
+++ b/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/experiments/packing/utilization.sh
@@ -0,0 +1,19 @@
+#!/bin/bash
+EXPERIMENT_NAME=utilization
+DECORAM_BIN=../../bin
+DATA_DIR=$1
+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 pftrmff aftrmff frftrmff bsftrmbf bsftrmwf bsftrmbfnf bsftrmwfnf; do \
+ for TASK_NO in 10 20 40 80 160; do \
+ for BACKUP_NO in 1 2 3 4; do \
+ if [ -s ./$DATA_DIR/$ALGORITHM-$BACKUP_NO-backups-$TASK_NO-tasks.txt ]; then \
+ echo "calculate utilization of $ALGORITHM result for $BACKUP_NO backups and $TASK_NO tasks ..." && \
+ $DECORAM_BIN/scheck -u -f ./$DATA_DIR/$ALGORITHM-$BACKUP_NO-backups-$TASK_NO-tasks.txt > ./$RESULT_DIR/$EXPERIMENT_NAME-$ALGORITHM-$BACKUP_NO-backups-$TASK_NO-tasks.txt; \
+ fi;\
+ done; \
+ done; \
+done \ No newline at end of file
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 011a885fd1e..62d8b147621 100644
--- a/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/schedulability_check.cpp
+++ b/TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/src/schedulability_check.cpp
@@ -25,10 +25,45 @@ std::string filename = "test.sd"; // filename of task list input
bool counting_mode = false;
bool average_mode = false;
bool check_overbooking = false;
+bool count_tasks = false;
+bool utilization = false;
unsigned int consistency_level = 0;
typedef std::map <Processor, FailureAwareWCRT> WCRT_MAP;
+class UtilizationProcessor : public std::binary_function <double,
+ Task,
+ double>
+{
+public:
+ double operator () (double util, const Task & task)
+ {
+ double result = util;
+
+ if (extract_rank (task.name) == 0)
+ result += task.execution_time / task.period;
+
+ return result;
+ }
+};
+
+class PrimaryCounter : public std::binary_function <unsigned int,
+ Task,
+ unsigned int>
+{
+public:
+ unsigned int operator () (unsigned int sum,
+ const Task & task)
+ {
+ unsigned int result = sum;
+
+ if (extract_rank (task.name) == 0)
+ ++result;
+
+ return result;
+ }
+};
+
class TaskSorter : public std::binary_function <TASK_POSITION,
TASK_POSITION,
bool>
@@ -183,7 +218,7 @@ private:
static int
parse_args (int argc, char *argv[])
{
- ACE_Get_Opt get_opt (argc, argv, ACE_TEXT ("acf:ho"));
+ ACE_Get_Opt get_opt (argc, argv, ACE_TEXT ("acf:hotu"));
int c;
@@ -199,6 +234,12 @@ parse_args (int argc, char *argv[])
case 'a':
average_mode = true;
break;
+ case 't':
+ count_tasks = true;
+ break;
+ case 'u':
+ utilization = true;
+ break;
case 'o':
check_overbooking = true;
break;
@@ -231,6 +272,44 @@ int main (int argc, char *argv[])
{
std::cout << processor_usage (schedule) << std::endl;
}
+ else if (count_tasks)
+ {
+ for (SCHEDULE::iterator it = schedule.begin ();
+ it != schedule.end ();
+ ++it)
+ {
+ unsigned int primary_count =
+ std::accumulate (it->second.begin (),
+ it->second.end (),
+ 0,
+ PrimaryCounter ());
+
+ unsigned int backup_count = it->second.size () - primary_count;
+
+ std::cout << it->first << ": "
+ << primary_count << " "
+ << backup_count << std::endl;
+ }
+ }
+ else if (utilization)
+ {
+ for (SCHEDULE::iterator it = schedule.begin ();
+ it != schedule.end ();
+ ++it)
+ {
+ TASK_LIST primaries;
+
+ double primary_utilization =
+ std::accumulate (it->second.begin (),
+ it->second.end (),
+ 0.0,
+ UtilizationProcessor ());
+
+ std::cout << it->first << ": "
+ << primary_utilization << std::endl;
+ }
+
+ }
else if (average_mode)
{
for (SCHEDULE::iterator it = schedule.begin ();