testing read/write speed

G

Gernot Frisch

Hi,

I want to have a representative information about the read and write
speeds of a drive (cf-card, HDD and RAM-Disk).
I think the buffering of the filesystem must be fooled somehow for my
test program (sorry, uses GetTickCount() == Win32 for Milliseconds)


# # #

// E:\\Temp\\ (HardDisk) Write: 9761.29KB/s, Read: 371794.26KB/s
// R:\\ (RamDrive) Write: 144010.44KB/s, Read: 372827.02KB/s

#include <stdio.h>

#define FBUFSIZ (1024*1024*8) // 8Meg
#define LOOPS 16
#define TESTFILE "R:\\test.txt"
int main(int, char**)
{
char* buffer = new char[FBUFSIZ];
DWORD start, end1, end2;
// make sure memory is there
for(int i=0; i<FBUFSIZ; ++i)
buffer=(char)i;
start = ::GetTickCount();

// Write test
for(int i=0; i<LOOPS; ++i)
{
FILE* pF = fopen(TESTFILE, "wb");
fwrite(buffer, FBUFSIZ, 1, pF);
fclose(pF);
}
end1 = ::GetTickCount();

// Read test
for(int i=0; i<LOOPS; ++i)
{
FILE* pF = fopen(TESTFILE, "rb");
fread(buffer, FBUFSIZ, 1, pF);
fclose(pF);
}
end2 = ::GetTickCount();

printf("Write: %.2fKB/s, Read: %.2fKB/s\n",
(double)FBUFSIZ*LOOPS/(end1-start),
(double)FBUFSIZ*LOOPS/(end2-end1));
buffer[0] = 1;

delete[] buffer;
}

# # #
 
V

Victor Bazarov

Gernot said:
I want to have a representative information about the read and write
speeds of a drive (cf-card, HDD and RAM-Disk).
I think the buffering of the filesystem must be fooled somehow for my
test program (sorry, uses GetTickCount() == Win32 for Milliseconds)
[...]

Thanks for sharing.

Are you seeking comments? I/O performance is platform-specific, and
has no relation to the language or the library. The Standard imposes
no requirements on I/O performance. That's my $0.02.

V
 
G

Gernot Frisch

Victor Bazarov said:
Gernot said:
I want to have a representative information about the read and
write
speeds of a drive (cf-card, HDD and RAM-Disk).
I think the buffering of the filesystem must be fooled somehow for
my
test program (sorry, uses GetTickCount() == Win32 for Milliseconds)
[...]

Thanks for sharing.

Are you seeking comments? I/O performance is platform-specific, and
has no relation to the language or the library. The Standard
imposes
no requirements on I/O performance. That's my $0.02.

The read speeds are always the same (300 MB/sec) which is in
indication that this is propably not from disk.
What might be an option to get true read speeds?
 
V

Victor Bazarov

Gernot said:
[..]
The read speeds are always the same (300 MB/sec) which is in
indication that this is propably not from disk.
What might be an option to get true read speeds?

Ask in the newsgroup for your OS.

V
 
T

Thomas J. Gritzan

Gernot said:
Hi,

I want to have a representative information about the read and write
speeds of a drive (cf-card, HDD and RAM-Disk).
I think the buffering of the filesystem must be fooled somehow for my
test program (sorry, uses GetTickCount() == Win32 for Milliseconds)

This is platform specific, you should ask in a windows platform group.
Since this is not your first posting here, you should definitly now that.
#include <stdio.h>

#define FBUFSIZ (1024*1024*8) // 8Meg
#define LOOPS 16
#define TESTFILE "R:\\test.txt"
int main(int, char**)
{
char* buffer = new char[FBUFSIZ];
DWORD start, end1, end2;
// make sure memory is there
for(int i=0; i<FBUFSIZ; ++i)
buffer=(char)i;
start = ::GetTickCount(); [...]
delete[] buffer;
}


Why do you use new[] and delete[] in an otherwise plain C programm?
 
G

Gernot Frisch

This is platform specific, you should ask in a windows platform
group.
Since this is not your first posting here, you should definitly now
that.

I didn't know it was platform specific - sorry.
[...]
Why do you use new[] and delete[] in an otherwise plain C programm?

I use fopen/fread, since cin/cout are horribly slow on my compiler.
I use printf because I don't know how to printf("%.2f", 0.0) in C++.
All the rest *should* be C++.
 
I

Ian Collins

Gernot said:
Hi,

I want to have a representative information about the read and write
speeds of a drive (cf-card, HDD and RAM-Disk).
I think the buffering of the filesystem must be fooled somehow for my
test program (sorry, uses GetTickCount() == Win32 for Milliseconds)
Have a look at the source for bonnie++ to see how this should be done.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,009
Latest member
GidgetGamb

Latest Threads

Top