mirror of
https://github.com/mongodb/mongo.git
synced 2024-11-30 00:56:44 +01:00
112 lines
2.4 KiB
C++
112 lines
2.4 KiB
C++
#include "stdafx.h"
|
|
#include <stdio.h>
|
|
#include "../util/goodies.h"
|
|
#include <fcntl.h>
|
|
|
|
// logstream defines these, we don't want that:
|
|
#undef cout
|
|
#undef endl
|
|
|
|
#if defined(F_FULLFSYNC)
|
|
void fullsync(int f) { fcntl( f, F_FULLFSYNC ); }
|
|
#else
|
|
void fullsync(int f) { fdatasync(f); }
|
|
#endif
|
|
|
|
int main(int argc, char* argv[], char *envp[] ) {
|
|
cout << "hello" << endl;
|
|
|
|
FILE *f = fopen("/data/db/temptest", "a");
|
|
|
|
if( f == 0 ) {
|
|
cout << "can't open file\n";
|
|
return 1;
|
|
}
|
|
|
|
{
|
|
Timer t;
|
|
for( int i = 0; i < 50000; i++ )
|
|
fwrite("abc", 3, 1, f);
|
|
cout << "small writes: " << t.millis() << "ms" << endl;
|
|
}
|
|
|
|
{
|
|
Timer t;
|
|
for( int i = 0; i < 10000; i++ ) {
|
|
fwrite("abc", 3, 1, f);
|
|
fflush(f);
|
|
fsync( fileno( f ) );
|
|
}
|
|
int ms = t.millis();
|
|
cout << "flush: " << ms << "ms, " << ms / 10000.0 << "ms/request" << endl;
|
|
}
|
|
|
|
{
|
|
Timer t;
|
|
for( int i = 0; i < 500; i++ ) {
|
|
fwrite("abc", 3, 1, f);
|
|
fflush(f);
|
|
fsync( fileno( f ) );
|
|
sleepmillis(10);
|
|
}
|
|
int ms = t.millis();
|
|
cout << "flush with sleeps intermixed: " << ms << "ms, " << (ms-5000) / 500.0 << "ms/request" << endl;
|
|
}
|
|
|
|
char buf[8192];
|
|
for( int pass = 0; pass < 2; pass++ ) {
|
|
cout << "pass " << pass << endl;
|
|
{
|
|
Timer t;
|
|
int n = 500;
|
|
for( int i = 0; i < n; i++ ) {
|
|
if( pass == 0 )
|
|
fwrite("abc", 3, 1, f);
|
|
else
|
|
fwrite(buf, 8192, 1, f);
|
|
buf[0]++;
|
|
fflush(f);
|
|
fullsync(fileno(f));
|
|
}
|
|
int ms = t.millis();
|
|
cout << "fullsync: " << ms << "ms, " << ms / ((double) n) << "ms/request" << endl;
|
|
}
|
|
|
|
{
|
|
Timer t;
|
|
for( int i = 0; i < 500; i++ ) {
|
|
if( pass == 0 )
|
|
fwrite("abc", 3, 1, f);
|
|
else
|
|
fwrite(buf, 8192, 1, f);
|
|
buf[0]++;
|
|
fflush(f);
|
|
fullsync(fileno(f));
|
|
sleepmillis(10);
|
|
}
|
|
int ms = t.millis();
|
|
cout << "fullsync with sleeps intermixed: " << ms << "ms, " << (ms-5000) / 500.0 << "ms/request" << endl;
|
|
}
|
|
}
|
|
|
|
// with noatime
|
|
{
|
|
fclose(f);
|
|
/* try from beginning of the file, where we aren't appending and changing the file length,
|
|
to see if this is faster as the directory entry then doesn't have to be flushed (if noatime in effect).
|
|
*/
|
|
f = fopen("/data/db/temptest", "r+");
|
|
Timer t;
|
|
int n = 500;
|
|
for( int i = 0; i < n; i++ ) {
|
|
fwrite("xyz", 3, 1, f);
|
|
fflush(f);
|
|
fullsync(fileno(f));
|
|
}
|
|
int ms = t.millis();
|
|
cout << "fullsync without growing: " << ms << "ms, " << ms / ((double) n) << "ms/request" << endl;
|
|
}
|
|
|
|
return 0;
|
|
}
|