]> rtime.felk.cvut.cz Git - frescor/frsh.git/commitdiff
Added resource specific contract block
authorMichal Sojka <sojkam1@fel.cvut.cz>
Thu, 30 Oct 2008 23:38:33 +0000 (00:38 +0100)
committerMichal Sojka <sojkam1@fel.cvut.cz>
Thu, 30 Oct 2008 23:38:33 +0000 (00:38 +0100)
This is only demonstration of data transfer from resource manager
to resource scheduler.

fres/contract/fres_container.h
resources/dummy/Makefile.omk
resources/dummy/dummy_block.c [new file with mode: 0644]
resources/dummy/frm_dummy.c
resources/dummy/frs_dummy.c
resources/dummy/res_dummy.h
resources/dummy/res_dummy_idl.idl [new file with mode: 0644]

index c2d603b0de39914c4b330c17a83b4194bec2c953..f75b060d7259a7e66e526f6811acacb4721f6c01 100644 (file)
@@ -33,6 +33,7 @@ enum fres_block_type {
        FRES_BLOCK_BASIC,
        FRES_BLOCK_TIMING_REQS,
        FRES_BLOCK_SPARE_CAPACITY,
+       FRES_BLOCK_DUMMY_SCHED, /** See resources/dummy/res_dummy_idl.idl */
        FRES_NUM_BLOCKS
 };
 
index 058955b2b3f6a7449f26c49a41d13617eb55f929..61fd5aebe3f9b7497e3484c39194780baab746a6 100644 (file)
@@ -1,11 +1,14 @@
 default_CONFIG = CONFIG_RESOURCE_DUMMY=y
 
 bin_PROGRAMS = frm_dummy
-frm_dummy_SOURCES = frm_dummy.c
+frm_dummy_SOURCES = frm_dummy.c dummy_block.c
+frm_dummy_CLIENT_IDL = res_dummy_idl.idl
 frm_dummy_LIBS = frm forb contract fosa rt ulut fcb_client
 
 shared_LIBRARIES = frs_dummy
-frs_dummy_SOURCES = frs_dummy.c
+frs_dummy_SOURCES = frs_dummy.c dummy_block.c
 frs_dummy_LIBS = frs
+frs_dummy_CLIENT_IDL = res_dummy_idl.idl
 
 include_HEADERS = res_dummy.h
+include_GEN_HEADERS = res_dummy_idl.h
diff --git a/resources/dummy/dummy_block.c b/resources/dummy/dummy_block.c
new file mode 100644 (file)
index 0000000..169116b
--- /dev/null
@@ -0,0 +1,24 @@
+/**
+ * @file   dummy_block.c
+ * @author Michal Sojka <sojkam1@fel.cvut.cz>
+ * @date   Thu Oct 30 14:35:05 2008
+ * 
+ * @brief  Description contract blocks specific to dummy resource
+ * 
+ * 
+ */
+#include <res_dummy.h>
+#include <fres_container.h>
+
+static const struct fres_block_desc dummy_block_desc = {
+       .size = sizeof(fres_block_dummy_sched),
+       .serialize = (fres_block_serialize_fnc_t*)fres_block_dummy_sched_serialize,
+       .deserialize = (fres_block_deserialize_fnc_t*)fres_block_dummy_sched_deserialize,
+       .duplicate = fres_block_duplicate_default
+};
+
+int fres_block_register_dummy()
+{
+       return fres_block_register(FRES_BLOCK_DUMMY_SCHED,
+                                  &dummy_block_desc);
+}
index 5c2b9bf096eb9870e993f88d458bf225ec0c4f7d..9286e729542962587708d7b5bf5a7a26073d47d5 100644 (file)
@@ -24,14 +24,26 @@ bool admission_test(struct fres_sa_scenario *scenario, void *priv)
 
        fres_sa_scenario_for_each_contract(scenario, c) {
                fres_block_basic *basic;
+               fres_block_dummy_sched *dummy_sched;
                char id[40];
                fres_contract_id_to_string(id, &c->contract->id, sizeof(id));
                basic = fres_contract_get_basic(c->contract);
 
-               printf("  processing: id=%s, period=%ld ms, budget=%ld ms\n",
-                      id,
+               if (c->status == FRES_SA_CONTRACT_NEW) {
+                       /* Add data for scheduler to the new contracts */
+                       dummy_sched = malloc(sizeof(*dummy_sched));
+                       if (!dummy_sched) return false;
+                       dummy_sched->priority = 100 - fosa_rel_time_to_msec(basic->budget);
+                       fres_contract_add_block(c->contract, FRES_BLOCK_DUMMY_SCHED, dummy_sched);
+               } else {
+                       dummy_sched = fres_contract_get_block(c->contract, FRES_BLOCK_DUMMY_SCHED);
+               }
+
+               printf("  %s contract: id=%s, period=%ld ms, budget=%ld ms, priority=%d\n",
+                      c->status == FRES_SA_CONTRACT_NEW ? "new" : "old", id,
                       fosa_rel_time_to_msec(basic->period),
-                      fosa_rel_time_to_msec(basic->budget));
+                      fosa_rel_time_to_msec(basic->budget), dummy_sched->priority);
+
 
        }
        schedulable = scenario->num_contracts <= 3;
@@ -58,6 +70,10 @@ int main(int argc, char *argv[])
        orb = forb_init(&argc, &argv, "frm_dummy");
        if (!orb) error(1, errno, "forb_init");
 
+       /* Register fres_block_dummy_sched to contract handling
+        * functions */
+       fres_block_register_dummy();
+
        ret = frm_register_and_run(orb, &frm);
 
        if (ret != 0) {
index a2a3a6b230a20413ebd0ebac7856003bd87b9d1e..4a5bb3dc8e344e31471d3261decb8031ecfe28d6 100644 (file)
@@ -11,30 +11,37 @@ int create_vres(fres_vres_t *vres, void *priv)
 {
        int *my_data = priv;
        fres_block_basic *basic;
+       fres_block_dummy_sched *dummy_sched;
        char id[40];
        
        (*my_data)++;
 
        fres_contract_id_to_string(id, &vres->contract->id, sizeof(id));
        basic = fres_contract_get_basic(vres->contract);
-       printf("Creating VRes #%d (id=%s, period=%ld ms, budget=%ld ms)\n",
+       dummy_sched = fres_contract_get_block(vres->contract, FRES_BLOCK_DUMMY_SCHED);
+       printf("Creating VRes #%d (id=%s, period=%ld ms, budget=%ld ms, priority=%d)\n",
               *my_data, id,
               fosa_rel_time_to_msec(basic->period),
-              fosa_rel_time_to_msec(basic->budget));
+              fosa_rel_time_to_msec(basic->budget),
+              dummy_sched ? dummy_sched->priority : -1);
        return 0;
 }
 int cancel_vres(fres_vres_t *vres, void *priv)
 {
        int *my_data = priv;
        fres_block_basic *basic;
+       fres_block_dummy_sched *dummy_sched;
        char id[40];
 
        fres_contract_id_to_string(id, &vres->contract->id, sizeof(id));
        basic = fres_contract_get_basic(vres->contract);
-       printf("Creating VRes #%d (id=%s, period=%ld ms, budget=%ld ms)\n",
+       dummy_sched = fres_contract_get_block(vres->contract, FRES_BLOCK_DUMMY_SCHED);
+       
+       printf("Canceling VRes #%d (id=%s, period=%ld ms, budget=%ld ms, priority=%d)\n",
               *my_data, id,
               fosa_rel_time_to_msec(basic->period),
-              fosa_rel_time_to_msec(basic->budget));
+              fosa_rel_time_to_msec(basic->budget),
+              dummy_sched ? dummy_sched->priority : 999);
 
        (*my_data)--;
        return 0;
@@ -60,5 +67,6 @@ static struct fres_scheduler dummy_scheduler = {
 
 int frs_dummy_init(forb_orb orb, fres_contract_broker fcb, forb_executor_t *executor)
 {
+       fres_block_register_dummy();
        return frs_register(orb, fcb, executor, &dummy_scheduler);
 }
index 2855838a96e02eb949d76dba1e5fdcc2d0d2706d..84a5c1a7051d50d50751473c995222e600fae9f5 100644 (file)
@@ -3,10 +3,12 @@
 
 #include <forb.h>
 #include <fcb.h>
+#include <res_dummy_idl.h>
 
 #define DUMMY_RESOURCE_TYPE FRSH_RT_PROCESSOR
 #define DUMMY_RESOURCE_ID   0
 
 int frs_dummy_init(forb_orb orb, fres_contract_broker fcb, forb_executor_t *executor);
+int fres_block_register_dummy(void);
 
 #endif
diff --git a/resources/dummy/res_dummy_idl.idl b/resources/dummy/res_dummy_idl.idl
new file mode 100644 (file)
index 0000000..1cfa58e
--- /dev/null
@@ -0,0 +1,18 @@
+/**
+ * @file   res_dummy_idl.idl
+ * @author Michal Sojka <sojkam1@fel.cvut.cz>
+ * @date   Thu Oct 30 14:27:12 2008
+ * 
+ * @brief  Contract data block for dummy resource
+ * 
+ * 
+ */
+module fres {
+       module block {
+               /// Dummy data to demonstrate information transfer from
+               // manager to scheduler
+               struct dummy_sched {
+                       long priority;
+               };
+       };
+};