]> rtime.felk.cvut.cz Git - frescor/frsh.git/commitdiff
Bugfixes in DISK resource manager.
authorDario <dario@dario-desktop.(none)>
Tue, 5 May 2009 15:05:23 +0000 (17:05 +0200)
committerDario <dario@dario-desktop.(none)>
Tue, 5 May 2009 15:05:23 +0000 (17:05 +0200)
Minor bugs fixed in the throughput measuring logic inside the
DISK resource manager.

resources/disk_bfq/mngr/diskbfq_mngr.c
resources/disk_bfq/mngr/diskbfq_th.c

index 38587db6cf0ba44aee1b066cf768e78187c2b811..1fe8afa1f1c077d900b7d1b6bcb0bbaacec263c3 100644 (file)
@@ -180,25 +180,33 @@ int main(int argc, char *argv[])
        forb_orb orb;
        FILE* fd;
        int readers = 4;
-       char disk_name[40];
+       char disk_dev[40], *disk_name = disk_dev;
        char path[128], scheduler[128];
-       int opt, ret;
+       int i, opt, ret;
 
        if (argc < 3) {
 err_usage:
-               fprintf(stderr, "Usage:\n %s -i disk_id -d disk_dev_name [-n readers]\n",
+               fprintf(stderr, "Usage:\n %s "
+                       "-i disk_id -d disk_device [-n readers]\n",
                        argv[0]);
                error(1, EINVAL, "frm_diskbfq");
        }
 
-       while ((opt = getopt(argc, argv, "i:d:")) != -1) {
+       while ((opt = getopt(argc, argv, "i:d:n:")) != -1) {
                switch (opt) {
                        case 'i':
                                frm.res_id = atoi(optarg);
                                break;
                        case 'd':
-                               strncpy(disk_name,
-                                       optarg, sizeof(disk_name));
+                               strncpy(disk_dev,
+                                       optarg, sizeof(disk_dev));
+
+                               for (i = strlen(disk_dev) - 1; i >= 0; i--) {
+                                       if (disk_dev[i] == '/') {
+                                               disk_name = disk_dev + i + 1;
+                                               break;
+                                       }
+                               }
                                break;
                        case 'n':
                                readers = atoi(optarg);
@@ -256,7 +264,9 @@ err_usage:
         * Estimate the disk throughput in order to achieve
         *  effective weight assignement during runtime.
         **/
-       disk.throughput = estimate_throughput(disk_name, readers);
+       disk.throughput = estimate_throughput(disk_dev, readers);
+       if (disk.throughput < 0.0)
+               error(1, errno, "frm_generic_run");
 
        fprintf(stdout, "disk name: %s\n"
                "scheduler: %s\n"
index b2058b543907cbb69cc99046db626d5bbe069991..7bb3516b2fab00142b40679fd3d5f14dcf2fa603 100644 (file)
@@ -103,7 +103,7 @@ static struct dprof_data *create_readers(int streamers, int devfd,
 {
        struct dprof_data *ddata;
        struct reader_data *rdata;
-       int i, error;
+       int i, error = 0;
        off_t step;
 
        ddata = calloc(1, sizeof(struct reader_data) * streamers +
@@ -160,20 +160,16 @@ double estimate_throughput(char *device, int streamers)
        struct timeval begin, end;
        struct dprof_data *ddata;
        double throughput = -1;
-       char device_path[128];
        int64_t devsize;
-       int devfd, error;
-
-       strncpy(device_path, "/dev/", 4);
-       strncat(device_path, device, 128-1);
+       int devfd, error = 0;
 
        /* get device size */
-       devsize = read_size(device_path);
+       devsize = read_size(device);
        if (devsize < 0)
                return -1;
 
        /* open the device */
-       devfd = open(device_path, O_RDONLY | O_DIRECT);
+       devfd = open(device, O_RDONLY | O_DIRECT);
        if (devfd < 0)
                return -1;