diff options
-rw-r--r-- | src/mongo/client/examples/mongoperf.cpp | 58 |
1 files changed, 29 insertions, 29 deletions
diff --git a/src/mongo/client/examples/mongoperf.cpp b/src/mongo/client/examples/mongoperf.cpp index 8a1a4d1c29d..fd616a304b1 100644 --- a/src/mongo/client/examples/mongoperf.cpp +++ b/src/mongo/client/examples/mongoperf.cpp @@ -32,6 +32,7 @@ using namespace mongo; using namespace bson; int dummy; +unsigned recSizeKB; LogFile *lf = 0; MemoryMappedFile *mmfFile; char *mmf = 0; @@ -75,29 +76,38 @@ unsigned long long rrand() { void workerThread() { bool r = options["r"].trueValue(); bool w = options["w"].trueValue(); - //cout << "read:" << r << " write:" << w << endl; + cout << "read:" << r << " write:" << w << endl; long long su = options["sleepMicros"].numberLong(); Aligned a; while( 1 ) { unsigned long long rofs = (rrand() * PG) % len; unsigned long long wofs = (rrand() * PG) % len; + const unsigned P = PG/1024; if( mmf ) { if( r ) { - dummy += mmf[rofs]; + for( unsigned p = P; p <= recSizeKB; p += P ) { + if( rofs < len ) + dummy += mmf[rofs]; + rofs += PG; + } iops++; } if( w ) { - mmf[wofs] = 3; + for( unsigned p = P; p <= recSizeKB; p += P ) { + if( rofs < len ) + mmf[wofs] = 3; + wofs += PG; + } iops++; } } else { if( r ) { - lf->readAt(rofs, a.addr(), PG); + lf->readAt(rofs, a.addr(), recSizeKB * 1024); iops++; } if( w ) { - lf->writeAt(wofs, a.addr(), PG); + lf->writeAt(wofs, a.addr(), recSizeKB * 1024); iops++; } } @@ -110,6 +120,12 @@ void workerThread() { void go() { verify( options["r"].trueValue() || options["w"].trueValue() ); + + recSizeKB = options["recSizeKB"].numberInt(); + if( recSizeKB == 0 ) + recSizeKB = 4; + verify( recSizeKB <= 64000 && recSizeKB > 0 ); + MemoryMappedFile f; cout << "creating test file size:"; len = options["fileSizeMB"].numberLong(); @@ -157,7 +173,13 @@ void go() { cout << "testing..."<< endl; - unsigned wthr = (unsigned) o["nThreads"].Int(); + cout << "optoins:" << o.toString() << endl; + unsigned wthr = 1; + if( !o["nThreads"].eoo() ) { + wthr = (unsigned) o["nThreads"].Int(); + } + cout << "wthr " << wthr << endl; + if( wthr < 1 ) { cout << "bad threads field value" << endl; return; @@ -208,6 +230,7 @@ cout << " mmf:<bool>, // if true do i/o's via memory mapped files (default false)\n" " r:<bool>, // do reads (default false)\n" " w:<bool>, // do writes (default false)\n" +" recSizeKB:<n>, // size of each write (default 4KB)\n" " syncDelay:<n> // secs between fsyncs, like --syncdelay in mongod. (default 0/never)\n" " }\n" "\n" @@ -245,29 +268,6 @@ cout << cout << "parsed options:\n" << options.toString() << endl; go(); -#if 0 - cout << "connecting to localhost..." << endl; - DBClientConnection c; - c.connect("localhost"); - cout << "connected ok" << endl; - unsigned long long count = c.count("test.foo"); - cout << "count of exiting documents in collection test.foo : " << count << endl; - - bo o = BSON( "hello" << "world" ); - c.insert("test.foo", o); - - string e = c.getLastError(); - if( !e.empty() ) { - cout << "insert #1 failed: " << e << endl; - } - - // make an index with a unique key constraint - c.ensureIndex("test.foo", BSON("hello"<<1), /*unique*/true); - - c.insert("test.foo", o); // will cause a dup key error on "hello" field - cout << "we expect a dup key error here:" << endl; - cout << " " << c.getLastErrorDetailed().toString() << endl; -#endif } catch(DBException& e) { cout << "caught DBException " << e.toString() << endl; |