From f2707f586190b8f9f5288d2fb4a7f79d6b1a5e02 Mon Sep 17 00:00:00 2001 From: sageweil Date: Thu, 30 Aug 2007 18:16:12 +0000 Subject: [PATCH] skew object workload git-svn-id: https://ceph.svn.sf.net/svnroot/ceph@1740 29311d96-e01e-0410-9327-a35deaab8ce9 --- trunk/ceph/client/SyntheticClient.cc | 33 +++++++++++++++++++--------- trunk/ceph/client/SyntheticClient.h | 4 ++-- 2 files changed, 25 insertions(+), 12 deletions(-) diff --git a/trunk/ceph/client/SyntheticClient.cc b/trunk/ceph/client/SyntheticClient.cc index fed64b1de2ae5..7a5c220e83afa 100644 --- a/trunk/ceph/client/SyntheticClient.cc +++ b/trunk/ceph/client/SyntheticClient.cc @@ -131,8 +131,9 @@ void parse_syn_options(vector& 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; iosdmap->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? diff --git a/trunk/ceph/client/SyntheticClient.h b/trunk/ceph/client/SyntheticClient.h index 4d19ea66d1ade..14233aae8d1ca 100644 --- a/trunk/ceph/client/SyntheticClient.h +++ b/trunk/ceph/client/SyntheticClient.h @@ -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); -- 2.39.5