Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   C++ (http://www.velocityreviews.com/forums/f39-c.html)
-   -   testing read/write speed (http://www.velocityreviews.com/forums/t456532-testing-read-write-speed.html)

Gernot Frisch 08-29-2006 09:13 AM

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);}




Victor Bazarov 08-29-2006 12:20 PM

Re: testing read/write speed
 
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



Gernot Frisch 08-29-2006 01:09 PM

Re: testing read/write speed
 

"Victor Bazarov" <v.Abazarov@comAcast.net> schrieb im Newsbeitrag
news:ed1bee$ndh$1@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?




Victor Bazarov 08-29-2006 01:18 PM

Re: testing read/write speed
 
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



Thomas J. Gritzan 08-29-2006 01:38 PM

Re: testing read/write speed
 
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

Gernot Frisch 08-29-2006 02:40 PM

Re: testing read/write speed
 

>> 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++.




Ian Collins 08-29-2006 09:29 PM

Re: testing read/write speed
 
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.

Gernot Frisch 08-30-2006 09:29 AM

Re: testing read/write speed
 

> Have a look at the source for bonnie++ to see how this should be
> done.


thank you.




All times are GMT. The time now is 01:51 AM.

Powered by vBulletin®. Copyright ©2000 - 2014, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.