]> rtime.felk.cvut.cz Git - frescor/fna.git/commitdiff
make a simplified utilization analysis for the moment
authorsangorrin <sangorrin@35b4ef3e-fd22-0410-ab77-dab3279adceb>
Tue, 22 Apr 2008 11:10:30 +0000 (11:10 +0000)
committersangorrin <sangorrin@35b4ef3e-fd22-0410-ab77-dab3279adceb>
Tue, 22 Apr 2008 11:10:30 +0000 (11:10 +0000)
git-svn-id: http://www.frescor.org/private/svn/frescor/fna/trunk@1136 35b4ef3e-fd22-0410-ab77-dab3279adceb

src_frescan/frescan_bwres_analysis.c
src_frescan/frescan_config.h

index cda54eef1fc311dafffd8175a23c2bff784bc4e7..5c8c7bc26f838466164a3fc7707381e8d6a4fc49 100644 (file)
@@ -72,6 +72,8 @@
  *
  */
 
+#include <math.h>
+#include <misc/timespec_operations.h>
 #include "frescan_bwres_analysis.h"
 #undef ERROR
 #include "frescan_debug.h"
@@ -216,10 +218,28 @@ int frescan_sa_sched_test(frescan_sa_scenario_t *scenario,
 
         struct list_head *pos;
         frescan_sa_contract_t *sa_contract;
+        int num_contracts;
+        double utilization, max_utilization, budget, period;
+
+        WARNING("simplified ub test (no blockings, prio ordered)\n");
+
+        utilization = 0.0;
+        num_contracts = 0;
 
         list_for_each(pos, &scenario->contracts_head.list) {
                 sa_contract = list_entry(pos, frescan_sa_contract_t, list);
                 sa_contract->final_values.server_prio = sa_contract->contract.prio;
+
+                budget = (double)sa_contract->contract.min_values.budget *
+                         (double)FRESCAN_FRAME_TX_TIME;
+
+                period = timespec_to_double
+                                (&sa_contract->contract.min_values.period);
+
+                utilization = utilization + (budget / period);
+
+                num_contracts++;
+
                 DEBUG(FRESCAN_SA_ENABLE_DEBUG,
                       "sa_contract, node:%d ss:%d, c:%d t:(%d,%d) p:%d\n",
                       sa_contract->node, sa_contract->ss,
@@ -229,8 +249,18 @@ int frescan_sa_sched_test(frescan_sa_scenario_t *scenario,
                       sa_contract->contract.prio);
         }
 
-        WARNING("test not implemented, returning 0 and success by default\n");
-        *success = true;
+        max_utilization = num_contracts *
+                          (pow(2.0, 1.0/(double)num_contracts) - 1);
+
+        DEBUG(FRESCAN_SA_ENABLE_DEBUG, "u:%f n:%d u_max:%f %s\n",
+              utilization, num_contracts, max_utilization,
+              (utilization < max_utilization) ? "accepted" : "not accepted");
+
+        if (utilization < max_utilization) {
+                *success = true;
+        } else {
+                *success = false;
+        }
 
         return 0;
 }
index 0bb0c9bf68add2880375021643f16ecdc85da882..a3c874abd17745999f47c92a2200f7a6fd5f29ff 100644 (file)
@@ -47,6 +47,7 @@
 #define FRESCAN_NEG_CHANNEL       0
 #define FRESCAN_MX_NODES          2
 #define FRESCAN_MX_CONTRACTS      (FRESCAN_MX_NODES*FRESCAN_MX_IDS)
+#define FRESCAN_FRAME_TX_TIME     0.01  // TODO: must be measured
 
 #define FRESCAN_MLOCK_T            unsigned
 #define FRESCAN_CREATE_LOCK(l)