]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
skew object workload
authorsageweil <sageweil@29311d96-e01e-0410-9327-a35deaab8ce9>
Thu, 30 Aug 2007 18:16:12 +0000 (18:16 +0000)
committersageweil <sageweil@29311d96-e01e-0410-9327-a35deaab8ce9>
Thu, 30 Aug 2007 18:16:12 +0000 (18:16 +0000)
git-svn-id: https://ceph.svn.sf.net/svnroot/ceph@1740 29311d96-e01e-0410-9327-a35deaab8ce9

trunk/ceph/client/SyntheticClient.cc
trunk/ceph/client/SyntheticClient.h

index fed64b1de2ae58115458b4f6264d183f926e08e1..7a5c220e83afa1a48f05b2c16a2b824e8436e3d6 100644 (file)
@@ -131,8 +131,9 @@ void parse_syn_options(vector<char*>& args)
         syn_iargs.push_back( atoi(args[++i]) );
         syn_iargs.push_back( atoi(args[++i]) );
         syn_iargs.push_back( atoi(args[++i]) );
-      } else if (strcmp(args[i],"uniformobjectrw") == 0) {
-        syn_modes.push_back( SYNCLIENT_MODE_UNIFORMOBJECTRW );
+      } else if (strcmp(args[i],"objectrw") == 0) {
+        syn_modes.push_back( SYNCLIENT_MODE_OBJECTRW );
+        syn_iargs.push_back( atoi(args[++i]) );
         syn_iargs.push_back( atoi(args[++i]) );
         syn_iargs.push_back( atoi(args[++i]) );
         syn_iargs.push_back( atoi(args[++i]) );
@@ -488,14 +489,15 @@ int SyntheticClient::run()
         }
       }
       break;
-    case SYNCLIENT_MODE_UNIFORMOBJECTRW:
+    case SYNCLIENT_MODE_OBJECTRW:
       {
         int count = iargs.front();  iargs.pop_front();
         int size = iargs.front();  iargs.pop_front();
         int wrpc = iargs.front();  iargs.pop_front();
+        int skew = iargs.front();  iargs.pop_front();
         if (run_me()) {
-          dout(2) << "uniformobjectrw " << cout << " " << size << " " << wrpc << dendl;
-          uniform_object_rw(count, size, wrpc);
+          dout(2) << "objectrw " << cout << " " << size << " " << wrpc << " " << skew << dendl;
+          object_rw(count, size, wrpc, skew);
         }
       }
       break;
@@ -1587,8 +1589,15 @@ int SyntheticClient::read_file(string& fn, int size, int rdsize, bool ignoreprin
 
 int SyntheticClient::create_objects(int nobj, int osize, int inflight)
 {
-  dout(5) << "create_objects " << nobj << " size=" << osize << dendl;
+  // divy up
+  int numc = g_conf.num_client ? g_conf.num_client : 1;
+  int start = nobj * client->get_nodeid() / numc;
+  int end = nobj * (client->get_nodeid()+1) / numc;
 
+  dout(5) << "create_objects " << nobj << " size=" << osize 
+         << " .. doing [" << start << "," << end << ")"
+         << dendl;
+  
   bufferptr bp(osize);
   bp.zero();
   bufferlist bl;
@@ -1603,7 +1612,7 @@ int SyntheticClient::create_objects(int nobj, int osize, int inflight)
   Context *ref = safeg->new_sub();
 
   lock.Lock();
-  for (int i=0; i<nobj; i++) {
+  for (int i=start; i<end; i++) {
     object_t oid(0x1000, i);
     ObjectLayout layout = client->osdmap->make_object_layout(oid, pg_t::TYPE_REP, 2);
 
@@ -1633,9 +1642,11 @@ int SyntheticClient::create_objects(int nobj, int osize, int inflight)
   return 0;
 }
 
-int SyntheticClient::uniform_object_rw(int nobj, int osize, int wrpc)
+int SyntheticClient::object_rw(int nobj, int osize, int wrpc, double skew)
 {
-  dout(5) << "uniform_object_rw " << nobj << " size=" << osize << " with " << wrpc << "% writes" << dendl;
+  dout(5) << "uniform_object_rw " << nobj << " size=" << osize << " with "
+         << wrpc << "% writes, skew = " << skew
+         << dendl;
 
   bufferptr bp(osize);
   bp.zero();
@@ -1656,7 +1667,9 @@ int SyntheticClient::uniform_object_rw(int nobj, int osize, int wrpc)
     if (time_to_stop()) break;
     
     // pick a random object
-    object_t oid(0x1000, rand() % nobj);
+    double r = drand48(); // [0..1)
+    long o = (long)trunc(pow(r, skew) * (double)nobj);  // exponentially skew towards 0
+    object_t oid(0x1000, o);
     ObjectLayout layout = client->osdmap->make_object_layout(oid, pg_t::TYPE_REP, 2);
 
     // read or write?
index 4d19ea66d1ade2c9d0af1c6d84f8127421589244..14233aae8d1cae3bd01c86e6fe8c94f96f2a3d4d 100644 (file)
@@ -48,7 +48,7 @@
 #define SYNCLIENT_MODE_TRACE       30
 
 #define SYNCLIENT_MODE_CREATEOBJECTS 35
-#define SYNCLIENT_MODE_UNIFORMOBJECTRW 36
+#define SYNCLIENT_MODE_OBJECTRW 36
 
 #define SYNCLIENT_MODE_OPENTEST     40
 #define SYNCLIENT_MODE_OPTEST       41
@@ -228,7 +228,7 @@ class SyntheticClient {
   int read_file(string& fn, int mb, int chunk, bool ignoreprint=false);
 
   int create_objects(int nobj, int osize, int inflight);
-  int uniform_object_rw(int nobj, int osize, int wrpc);
+  int object_rw(int nobj, int osize, int wrpc, double skew);
 
   int read_random(string& fn, int mb, int chunk);
   int read_random_ex(string& fn, int mb, int chunk);