*
*/
+#include <math.h>
+#include <misc/timespec_operations.h>
#include "frescan_bwres_analysis.h"
#undef ERROR
#include "frescan_debug.h"
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,
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;
}