Add very simple write throttling when caches fill up.
authorMichael Vrable <mvrable@cs.ucsd.edu>
Fri, 19 Mar 2010 22:59:52 +0000 (15:59 -0700)
committerMichael Vrable <mvrable@cs.ucsd.edu>
Fri, 19 Mar 2010 22:59:52 +0000 (15:59 -0700)
We ought to actively flush data when needed, but this is enough for some
basic testing.

bluesky/init.c
nfs3/nfs3.c

index 9a7a6eb..0feb0f5 100644 (file)
@@ -17,7 +17,7 @@ BlueSkyOptions bluesky_options;
 
 /* Maximum number of threads to use in any particular thread pool, or -1 for no
  * limit */
-int bluesky_max_threads = -1;
+int bluesky_max_threads = 16;
 
 /* Environment variables that can be used to initialize settings. */
 static struct {
index b0e5892..c5e4448 100644 (file)
@@ -380,6 +380,19 @@ void nfsproc3_write_3_svc(write3args *argp, RPCRequest *req)
         return;
     }
 
+    /* FIXME: Hack to throttle writes when there is too much dirty data still
+     * to be written out. */
+    while (g_atomic_int_get(&fs->cache_dirty) > 4096
+           || g_atomic_int_get(&fs->cache_total) > 8192) {
+        g_print("Too many dirty pages (%d) or total pages (%d); throttling writes...\n",
+                g_atomic_int_get(&fs->cache_dirty),
+                g_atomic_int_get(&fs->cache_total));
+        struct timespec delay;
+        delay.tv_sec = 2;
+        delay.tv_nsec = 0;
+        nanosleep(&delay, NULL);
+    }
+
     g_mutex_lock(inode->lock);
 
     encode_pre_wcc(&wcc, inode);