#include <forb.h>
#include <error.h>
#include <errno.h>
+#include <getopt.h>
#include <fres_sa_scenario.h>
#include <stdbool.h>
#include <ul_log.h>
+#include <ul_logreg.h>
#include <stdio.h>
UL_LOG_CUST(ulogd_frm_aqcpu);
-ul_log_domain_t ulogd_fra_fwp = {UL_LOGL_DEB, "frm_aqcpu"};
+ul_log_domain_t ulogd_frm_aqcpu = {UL_LOGL_DEB, "frm_aqcpu"};
static int aqcpu_admtest(struct fres_sa_scenario *scenario, void *priv,
bool *schedulable)
long int period, budget;
long int sum_utilization = 0;
- fres_sa_scenario_for_each_contract(scenario, c) {
+ fres_sa_scenario_for_each_no_cancel_contract(scenario, c) {
fres_block_basic *basic;
char id[40];
fres_contract_id_to_string(id, &c->contract->id, sizeof(id));
sum_utilization+= budget*100/period;
}
- *schedulable = sum_utilization < 100;
- printf("=> %s\n", schedulable?"schedulable":"not schedulable");
+ *schedulable = sum_utilization <= 88; // 100;
+ if (*schedulable) {
+ scenario->utilization = sum_utilization;
+ }
+ ul_logmsg("=> %s\n", *schedulable?"schedulable":"not schedulable");
return 0;
}
-static const struct fres_res_manager frm = {
+static struct fres_res_manager frm = {
.res_type = FRSH_RT_PROCESSOR,
- .res_id = 0,
+ .res_id = FRSH_CPU_ID_DEFAULT,
.admission_test = aqcpu_admtest,
+ .name = "AQuoSA",
.priv = NULL
};
+static struct option long_opts[] = {
+ { "loglevel", 1, 0, 'l' },
+ { 0, 0, 0, 0}
+};
+
+static void
+usage(void)
+{
+ printf("usage: frm_aqcpu [ options ]\n");
+ printf(" -l, --loglevel <number>|<domain>=<number>,...\n");
+}
+
int main(int argc, char *argv[])
{
forb_orb orb;
int ret;
+ forb_init_attr_t attr = { .orb_id = "org.frescor.frm.aqcpu" };
+ int opt;
- orb = forb_init(&argc, &argv, "frm_aqcpu");
- if (!orb) error(1, errno, "forb_init");
+ ul_logreg_domain(&ulogd_frm_aqcpu);
+
+ while ((opt = getopt_long(argc, argv, "l:", &long_opts[0], NULL)) != EOF) {
+ switch (opt) {
+ case 'l':
+ ul_log_domain_arg2levels(optarg);
+ break;
+ case 'h':
+ /*default:*/
+ usage();
+ exit(opt == 'h' ? 0 : 1);
+ }
+ }
+ orb = forb_init(&argc, &argv, &attr);
+ if (!orb) error(1, errno, "forb_init");
+
+ frm.res_id = frsh_get_local_cpu_id();
ret = frm_register_and_run(orb, &frm);
if (ret != 0) {