From cf1756793043e645a99f489631cb1e321ee91a6c Mon Sep 17 00:00:00 2001 From: wolff1 Date: Tue, 5 May 2009 13:45:18 +0000 Subject: added new analysis capabilities --- .../FLARe/DeCoRAM/experiments/packing/taskcount.sh | 19 +++++ .../DeCoRAM/experiments/packing/utilization.sh | 19 +++++ .../FLARe/DeCoRAM/src/schedulability_check.cpp | 81 +++++++++++++++++++++- 3 files changed, 118 insertions(+), 1 deletion(-) create mode 100755 TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/experiments/packing/taskcount.sh create mode 100755 TAO/orbsvcs/examples/FaultTolerance/FLARe/DeCoRAM/experiments/packing/utilization.sh 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 WCRT_MAP; +class UtilizationProcessor : public std::binary_function +{ +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 +{ +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 @@ -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 (); -- cgit v1.2.1