From 1edfd0c0070b18a6837385a9fd11ba759202495e Mon Sep 17 00:00:00 2001 From: Michael Vrable Date: Fri, 19 Mar 2010 15:59:52 -0700 Subject: [PATCH] Add very simple write throttling when caches fill up. We ought to actively flush data when needed, but this is enough for some basic testing. --- bluesky/init.c | 2 +- nfs3/nfs3.c | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/bluesky/init.c b/bluesky/init.c index 9a7a6eb..0feb0f5 100644 --- a/bluesky/init.c +++ b/bluesky/init.c @@ -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 { diff --git a/nfs3/nfs3.c b/nfs3/nfs3.c index b0e5892..c5e4448 100644 --- a/nfs3/nfs3.c +++ b/nfs3/nfs3.c @@ -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); -- 2.20.1