468,504 Members | 1,946 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 468,504 developers. It's quick & easy.

testing read/write speed


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[i]=(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;
}

# # #


--
-Gernot
int main(int argc, char** argv) {printf
("%silto%c%cf%cgl%ssic%ccom%c", "ma", 58, 'g', 64, "ba", 46, 10);}

Aug 29 '06 #1
7 6519
Gernot Frisch wrote:
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
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask
Aug 29 '06 #2

"Victor Bazarov" <v.********@comAcast.netschrieb im Newsbeitrag
news:ed**********@news.datemas.de...
Gernot Frisch wrote:
>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?

Aug 29 '06 #3
Gernot Frisch wrote:
[..]
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
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask
Aug 29 '06 #4
Gernot Frisch schrieb:
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[i]=(char)i;
start = ::GetTickCount();
[...]
delete[] buffer;
}
Why do you use new[] and delete[] in an otherwise plain C programm?

--
Thomas
Aug 29 '06 #5
>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.
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++.

Aug 29 '06 #6
Gernot Frisch wrote:
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.

--
Ian Collins.
Aug 29 '06 #7
Have a look at the source for bonnie++ to see how this should be
done.
thank you.
Aug 30 '06 #8

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

18 posts views Thread by jas | last post: by
3 posts views Thread by junky_fellow | last post: by
8 posts views Thread by Patrik Malmström | last post: by
4 posts views Thread by Bruno | last post: by
reply views Thread by NPC403 | last post: by
3 posts views Thread by gieforce | last post: by
reply views Thread by fmendoza | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.