]> rtime.felk.cvut.cz Git - frescor/frsh.git/blobdiff - resources/disk_bfq/mngr/diskbfq_mngr.c
BFQ: show units with determined throughput
[frescor/frsh.git] / resources / disk_bfq / mngr / diskbfq_mngr.c
index 8b66a765ecb2ff33c5f7436f9c94495921be9987..62a95808e58985dc3ad70fb4394dd879054bb601 100644 (file)
@@ -124,8 +124,8 @@ static int diskbfq_admtest(struct fres_sa_scenario *scenario,
 
                period = fosa_rel_time_to_nsec(basic->period);
                budget = fosa_rel_time_to_nsec(basic->budget);
-               printf("processing: id=%s, period=%ld ms, budget=%ld ms\n",
-                      id, period, budget);
+               ul_logmsg("processing: id=%s, period=%ld us, budget=%ld us\n",
+                      id, period/1000, budget/1000);
 
                if (c->contract == c->new) {
                        int ret;
@@ -142,27 +142,25 @@ static int diskbfq_admtest(struct fres_sa_scenario *scenario,
                        ret = fres_contract_add_disk_sched(c->contract,
                                                           disk_sched);
                        if (ret) {
-                               fprintf(stderr,
-                                       "Cannot add disk_sched block\n");
+                               ul_logerr("Cannot add disk_sched block\n");
                                free(disk_sched);
                                return -1;
                        }
                } else {
                        disk_sched = fres_contract_get_disk_sched(c->contract);
                        if (!disk_sched) {
-                               fprintf(stderr,
-                                       "disk_sched is not present\n");
+                               ul_logerr("disk_sched is not present\n");
                                return -1;
                        }
                }
                sum_weight += disk_sched->weight;
        }
 
-       printf("sum_weight=%ld, max_weight=%d\n",
-              sum_weight,
-              DISKBFQ_WEIGHT_MAX);
+       ul_logmsg("sum_weight=%ld, max_weight=%d\n",
+                 sum_weight,
+                 DISKBFQ_WEIGHT_MAX);
        *schedulable = sum_weight < DISKBFQ_WEIGHT_MAX;
-       printf("=>%s\n", (*schedulable) ? "schedulable" : "not schedulable");
+       ul_logmsg("=> %s\n", (*schedulable) ? "schedulable" : "not schedulable");
 
        return 0;
 }
@@ -183,7 +181,7 @@ int main(int argc, char *argv[])
        forb_orb orb;
        FILE* fd;
        int readers = 4;
-       char disk_dev[40], *disk_name = disk_dev;
+       char disk_dev[40] = {0}, *disk_name = disk_dev;
        char path[128], scheduler[128];
        int i, opt, ret;
 
@@ -221,6 +219,9 @@ err_usage:
                }
        }
 
+       if (!*disk_name)
+               error(1, 0, "Disk device not specified");
+
        orb = forb_init(&argc, &argv, &attr);
        if (!orb) error(1, errno, "forb_init");
 
@@ -232,13 +233,13 @@ err_usage:
                 SYSFS_BFQ_SCHED_PATH,
                 disk_name);
        if (!(fd = fopen(path, "r+")))
-               error(1, errno, "frm_generic_run");
+               error(1, errno, "fopen(%s)", path);
 
        ret = fscanf(fd, "%128[^\n]", scheduler);
        if (ret == 0 || ret == EOF)
-               error(1, errno, "frm_generic_run");
+               error(1, errno, "fscanf: %s", path);
        if (!strstr(scheduler, SYSFS_BFQ_NAME))
-               error(1, errno, "frm_generic_run");
+               error(1, errno, "bfq not available in kernel");
 
        /**
         * Now check if BFQ is the default I/O scheduler
@@ -250,7 +251,7 @@ err_usage:
                if (ret && ret != EOF)
                        ret = fflush(fd);
                if (ret == 0 || ret == EOF)
-                       error(1, errno, "frm_generic_run");
+                       error(1, errno, "cannot activate bfq scheduler");
        }
        fclose(fd);
 
@@ -258,29 +259,30 @@ err_usage:
                 SYSFS_BFQ_BUDGET_PATH,
                 disk_name);
        if (!(fd = fopen(path, "r+")))
-               error(1, errno, "frm_generic_run");
+               error(1, errno, "fopen(%s)", path);
 
        ret = fprintf(fd, "256");
        if (ret == 0)
-               error(1, errno, "frm_generic_run");
+               error(1, errno, "fprintf: %s", path);
 
        rewind(fd);
        ret = fscanf(fd, "%d", &disk.budget);
        if (ret == 0 || ret == EOF)
-               error(1, errno, "frm_generic_run");
+               error(1, errno, "fscanf: %s", path);
        fclose(fd);
 
        /**
         * Estimate the disk throughput in order to achieve
         *  effective weight assignement during runtime.
         **/
+       printf("Throughput estimation...\n");
        disk.throughput = estimate_throughput(disk_dev, readers);
        if (disk.throughput < 0.0)
-               error(1, errno, "frm_generic_run");
+               error(1, errno, "throughput estimation error");
 
        fprintf(stdout, "disk name: %s\n"
                "scheduler: %s\n"
-               "disk aggregate throughput: %f\n"
+               "disk aggregate throughput: %f KiB/s\n"
                "scheduling budget: %d\n",
                disk_name, SYSFS_BFQ_NAME, disk.throughput, disk.budget);
 
@@ -289,7 +291,7 @@ err_usage:
         fres_block_register_disk_sched();
 
        ret = frm_register_and_run(orb, &frm);
-       if (ret) error(1, errno, "frm_generic_run");
+       if (ret) error(1, errno, "frm_register_and_run");
        
        return 0;
 }