Add runtime options to disable some of the log-structured optimizations
authorMichael Vrable <mvrable@cs.ucsd.edu>
Thu, 10 Mar 2011 19:36:44 +0000 (11:36 -0800)
committerMichael Vrable <mvrable@cs.ucsd.edu>
Thu, 10 Mar 2011 19:36:44 +0000 (11:36 -0800)
bluesky/bluesky.h
bluesky/cloudlog.c
bluesky/init.c
bluesky/log.c

index 5ef2f28..874027f 100644 (file)
@@ -20,10 +20,10 @@ extern "C" {
 
 /* Various options to tweak for performance benchmarking purposes. */
 typedef struct {
 
 /* Various options to tweak for performance benchmarking purposes. */
 typedef struct {
-    /* Perform all get/put operations synchronously. */
+    /* OBSOLETE: Perform all get/put operations synchronously. */
     int synchronous_stores;
 
     int synchronous_stores;
 
-    /* Write data in cache immediately after file is modified. */
+    /* OBSOLETE: Write data in cache immediately after file is modified. */
     int writethrough_cache;
 
     /* Can inodes be fetched asynchronously?  (Inode object is initially
     int writethrough_cache;
 
     /* Can inodes be fetched asynchronously?  (Inode object is initially
@@ -37,6 +37,14 @@ typedef struct {
 
     /* Target size of the disk cache at the proxy, in kilobytes. */
     int cache_size;
 
     /* Target size of the disk cache at the proxy, in kilobytes. */
     int cache_size;
+
+    /* Full segment fetches (1) or use range requests (0) for fetching segments
+     * from cloud? */
+    int full_segment_fetches;
+
+    /* Disable aggregating of data into log segments.  Each object will be
+     * stored in a separate segment. */
+    int disable_aggregation;
 } BlueSkyOptions;
 
 extern BlueSkyOptions bluesky_options;
 } BlueSkyOptions;
 
 extern BlueSkyOptions bluesky_options;
index 4b49397..3e30f02 100644 (file)
@@ -449,8 +449,11 @@ BlueSkyCloudPointer bluesky_cloudlog_serialize(BlueSkyCloudLog *log,
     bluesky_cloudlog_ref(log);
     g_mutex_unlock(log->lock);
 
     bluesky_cloudlog_ref(log);
     g_mutex_unlock(log->lock);
 
-    if (state->data->len > CLOUDLOG_SEGMENT_SIZE)
+    if (state->data->len > CLOUDLOG_SEGMENT_SIZE
+        || bluesky_options.disable_aggregation)
+    {
         bluesky_cloudlog_flush(fs);
         bluesky_cloudlog_flush(fs);
+    }
 
     return log->location;
 }
 
     return log->location;
 }
index e2b35c6..49ede3e 100644 (file)
@@ -50,6 +50,8 @@ static struct {
     {"BLUESKY_OPT_SYNC_INODE_FETCH", &bluesky_options.sync_inode_fetches},
     {"BLUESKY_OPT_SYNC_FRONTENDS", &bluesky_options.sync_frontends},
     {"BLUESKY_CACHE_SIZE", &bluesky_options.cache_size},
     {"BLUESKY_OPT_SYNC_INODE_FETCH", &bluesky_options.sync_inode_fetches},
     {"BLUESKY_OPT_SYNC_FRONTENDS", &bluesky_options.sync_frontends},
     {"BLUESKY_CACHE_SIZE", &bluesky_options.cache_size},
+    {"BLUESKY_OPT_FULL_SEGMENTS", &bluesky_options.full_segment_fetches},
+    {"BLUESKY_OPT_NO_AGGREGATION", &bluesky_options.disable_aggregation},
     {NULL, NULL}
 };
 
     {NULL, NULL}
 };
 
index 984cf16..6ac7508 100644 (file)
@@ -651,7 +651,8 @@ BlueSkyRCStr *bluesky_log_map_object(BlueSkyCloudLog *item, gboolean map_data)
     BlueSkyRCStr *str = NULL;
     int location = 0;
     size_t file_offset = 0, file_size = 0;
     BlueSkyRCStr *str = NULL;
     int location = 0;
     size_t file_offset = 0, file_size = 0;
-    gboolean range_request = TRUE;
+    gboolean range_request = bluesky_options.full_segment_fetches
+                              ? FALSE : TRUE;
 
     if (page_size == 0) {
         page_size = getpagesize();
 
     if (page_size == 0) {
         page_size = getpagesize();