More S3 benchmark work.
authorMichael Vrable <mvrable@cs.ucsd.edu>
Wed, 30 Jun 2010 19:24:50 +0000 (12:24 -0700)
committerMichael Vrable <mvrable@cs.ucsd.edu>
Wed, 30 Jun 2010 19:24:50 +0000 (12:24 -0700)
cloudbench/readbench.c

index 8961eb8..7f1ff12 100644 (file)
@@ -43,6 +43,7 @@ struct callback_state {
 struct thread_state threads[MAX_THREADS];
 
 int experiment_threads, experiment_size, experiment_objects;
+int range_size = 0;
 
 pthread_mutex_t barrier_mutex;
 pthread_cond_t barrier_cond;
@@ -91,7 +92,8 @@ static void complete_callback(S3Status status,
 {
 }
 
-static void do_get(const char *key, size_t bytes, struct thread_state *ts)
+static void do_get(const char *key, size_t bytes, struct thread_state *ts,
+                   size_t offset)
 {
     struct callback_state state;
     struct S3GetObjectHandler handler;
@@ -102,7 +104,7 @@ static void do_get(const char *key, size_t bytes, struct thread_state *ts)
     handler.responseHandler.completeCallback = complete_callback;
     handler.getObjectDataCallback = data_callback;
 
-    S3_get_object(&bucket, key, NULL, 0, 0, NULL, &handler, &state);
+    S3_get_object(&bucket, key, NULL, offset, range_size, NULL, &handler, &state);
 }
 
 void *benchmark_thread(void *arg)
@@ -120,9 +122,13 @@ void *benchmark_thread(void *arg)
     ts->timestamp = get_ns();
     while (test_phase != TERMINATE) {
         int object = random() % experiment_objects;
+        int offset = 0;
         sprintf(namebuf, "file-%d-%d", experiment_size, object);
+        if (range_size) {
+            offset = (random() % (experiment_size / range_size)) * range_size;
+        }
         ts->first_byte_timestamp = 0;
-        do_get(namebuf, experiment_size, ts);
+        do_get(namebuf, experiment_size, ts, offset);
         long long timestamp = get_ns();
         long long elapsed = timestamp - ts->timestamp;
 
@@ -136,7 +142,7 @@ void *benchmark_thread(void *arg)
             ts->sum_x += e;
             ts->sum_x2 += e * e;
             ts->sum_f += f;
-            ts->bytes_sent += experiment_size;
+            ts->bytes_sent += range_size ? range_size : experiment_size;
         }
 
         i++;
@@ -223,8 +229,8 @@ void launch_test(int thread_count)
     }
 
     double elapsed = (get_ns() - start_time) / 1e9;
-    printf("*** %d threads, %d byte objects\n",
-           experiment_threads, experiment_size);
+    printf("*** %d threads, %d byte objects, %d byte ranges\n",
+           experiment_threads, experiment_size, range_size);
     printf("Elapsed: %f s\n", elapsed);
     printf("Data points: %d\n", n);
     double mx = sum_x / n;
@@ -267,6 +273,9 @@ int main(int argc, char *argv[])
     experiment_threads = atoi(argv[1]);
     experiment_size = atoi(argv[2]);
     experiment_objects = atoi(argv[3]);
+    if (argc > 4) {
+        range_size = atoi(argv[4]);
+    }
     assert(experiment_objects > 0);
     launch_test(experiment_threads);