tftpclient: converting to net sockets
[barrelfish] / usr / tests / net_tests / nfs_throughput / nfs_cat.c
index f6cd87d..dd052ea 100644 (file)
 // Specific for barrelfish
 #include <barrelfish/barrelfish.h>
 #include <vfs/vfs.h>
-#include <lwip/init.h>
 #include <barrelfish/nameservice_client.h>
 #include <barrelfish/waitset.h>
-#include <contmng/netbench.h>
+#include <netbench/netbench.h>
 
 #define MOUNT_DIR   "/nfs"
 
-//uint8_t buf[1024 * 1024];
-uint8_t buf[1024 * 128];
-
 // reads the file over nfs
 static int cat(char *path)
 {
@@ -46,38 +42,52 @@ static int cat(char *path)
         return 0;
     }
 
+    struct vfs_fileinfo info;
+    err = vfs_stat(vh, &info);
+    if(err_is_fail(err)){
+       printf("Could not stat file %s\n", path);
+    }
+    printf("Reading %d bytes from %s.\n", (int)info.size, path);
+    void *buf = malloc(10485760);
+    assert(buf);
+
     uint64_t start = rdtsc();
-    lwip_benchmark_control(1, BMS_START_REQUEST, 0, 0);
-    do {
-        err = vfs_read(vh, buf, sizeof(buf), &size);
-        if (err_is_fail(err)) {
-            // XXX: Close any files that might be open
-            DEBUG_ERR(err, "error reading file");
-            return 0;
-        }
 
-        filesize += size;
-//      fwrite(buf, 1, size, stdout);
-    } while(size > 0);
+    for (; filesize != info.size;) {
+       err = vfs_read(vh, buf, 10485760, &size);
+       if (err_is_fail(err)) {
+               // XXX: Close any files that might be open
+               DEBUG_ERR(err, "error reading file");
+               return 0;
+       }
+        debug_printf("%s: %ld:%ld\n", __func__, filesize, info.size);
+       filesize += size;
+    }
+    assert(info.size == filesize);
 
     // record stop time
     uint64_t stop = rdtsc();
-    printf("Everythin done\n");
-    lwip_print_interesting_stats();
+    printf("Everything done\n");
+    double speed = ((filesize/in_seconds(stop - start))/(1024 * 1024));
+    if (speed < 50) {
+        printf("Warning: NFS throughput too low!! [%f]\n", speed);
+    }
     printf("## Data size = %f MB,  Processing time [%"PU"], speed [%f] MB/s\n",
            filesize/(double)(1024 * 1024), in_seconds(stop - start),
-           ((filesize/in_seconds(stop - start))/(1024 * 1024)));
+           speed);
 
     err = vfs_close(vh);
     if (err_is_fail(err)) {
             DEBUG_ERR(err, "in vfs_close");
     }
-
+    free(buf);
     return filesize;
 }
 
 int main(int argc, char**argv)
 {
+    errval_t err;
+    vfs_init();
 
     if(argc < 3) {
         printf("Usage: %s mount-URL filepath\n", argv[0]);
@@ -86,10 +96,11 @@ int main(int argc, char**argv)
         exit(EXIT_FAILURE);
     }
 
-    errval_t err = vfs_mkdir(MOUNT_DIR);
-    if(err_is_fail(err)) {
-        DEBUG_ERR(err, "vfs_mount");
-    }
+// don't have to do this, MOUNT_DIR is already there
+//    err = vfs_mkdir(MOUNT_DIR);
+//    if (err_is_fail(err)) {
+//        DEBUG_ERR(err, "vfs_mount");
+//    }
 
     err = vfs_mount(MOUNT_DIR, argv[1]);
     if(err_is_fail(err)) {
@@ -98,9 +109,15 @@ int main(int argc, char**argv)
     assert(err_is_ok(err));
     printf("mount done\n");
 
-    printf("reading file [%s]\n", argv[2]);
+    printf("reading file 1. time [%s]\n", argv[2]);
     cat(argv[2]);
-    printf("Benchmark done.\n");
+    printf("receive 1 done.\n");
+
+    /*
+    printf("reading file 2. time [%s]\n", argv[2]);
+       cat(argv[2]);
+       printf("receive 2 done.\n"); */
+       printf("All done.\n");
 
     struct waitset *ws = get_default_waitset();
     while (1) {