]> rtime.felk.cvut.cz Git - frescor/frsh.git/blob - frsh_api/tests/renegobench.c
c3ebecccac3f4a345c258a82d87270d830498226
[frescor/frsh.git] / frsh_api / tests / renegobench.c
1 /* This program benchmarks renegotiation */
2
3 #include <frsh.h>
4 #include <error.h>
5 #include <res_dummy.h>
6 #include <time.h>
7
8 #define N 1000
9
10 int main(int argc, char *argv[])
11 {
12         int ret;
13         frsh_contract_t contract[N];
14         frsh_vres_id_t vres[N];
15         frsh_rel_time_t budget, period, deadline;
16         frsh_signal_info_t si;
17         int i;
18
19         ret = frsh_init();
20         if (ret) PERROR_AND_EXIT(ret, "frsh_init");
21
22         /* Negotiate N contracts */
23         for (i=0; i<N; i++) {
24                 struct timespec t_start, t_end;
25                 ret = frsh_contract_init(&contract[i]);
26                 if (ret) PERROR_AND_EXIT(ret, "frsh_contract_init");
27
28                 ret = frsh_contract_set_resource_and_label(
29                         &contract[i],
30                         DUMMY_RESOURCE_TYPE, DUMMY_RESOURCE_ID,
31                         NULL);
32                 if (ret) PERROR_AND_EXIT(ret, "frsh_contract_set_resource_and_label");
33
34                 budget = fosa_msec_to_rel_time(10);
35                 period = fosa_msec_to_rel_time(100);
36                 period = fosa_msec_to_rel_time(50);
37                 ret = frsh_contract_set_basic_params(&contract[i],
38                                                      &budget,
39                                                      &period,
40                                                      FRSH_WT_BOUNDED,
41                                                      FRSH_CT_REGULAR);
42                 if (ret) PERROR_AND_EXIT(ret, "frsh_contract_set_basic_params");
43                 
44                 ret = frsh_contract_set_timing_reqs(&contract[i],
45                                                     false, &deadline,
46                                             0, si, 0, si);
47                 if (ret) PERROR_AND_EXIT(ret, "frsh_contract_set_timing_reqs");
48                 
49                 ret = frsh_contract_negotiate(&contract[i], &vres[i]);
50                 if (ret) PERROR_AND_EXIT(ret, "frsh_contract_negotiate");
51                 clock_gettime(CLOCK_MONOTONIC, &t_start);
52                 ret = frsh_contract_renegotiate_sync(&contract[i], vres[i]);
53                 if (ret) PERROR_AND_EXIT(ret, "frsh_contract_renegotiate_sync");
54                 clock_gettime(CLOCK_MONOTONIC, &t_end);
55                 printf("%d %g\n", i, (float)(t_end.tv_sec+1e-9*t_end.tv_nsec) - (t_start.tv_sec+1e-9*t_start.tv_nsec));
56         }
57         /* Cancel N contracts */
58         for (i=0; i<N; i++) {
59                 ret = frsh_contract_cancel(vres[i]);
60                 if (ret) PERROR_AND_EXIT(ret, "frsh_contract_cancel");
61         }
62         return 0;
63 }