I did some tests and have some results.
The tests were performed on 100Mbps & 1Gbps NIC. The source machine is Win2K3 server (SATA) and the target machine is Win2k3 server (RAID 5).
I ran 3 tests:
1) Network Reader -> This program just reads files across the network. The purpose of the program is to find the maximum n/w read speed. I am performing a NON BUFFERED reads using CreateFile & ReadFile.
2) Disk Writer -> This program benchmarks the RAID 5 speed by writing data. NON BUFFERED writes are performed using CreateFile & WriteFile.
3) Blitz Copy -> This program is the file copy engine. It copies files across the network. The logic of this program was discussed in the initial question. I am using synchronous I/O with NO_BUFFERING Reads & Writes. The APIs used are CreateFile, ReadFile & WriteFile.
Below are the results:
NETWORK READER:-
100 Mbps NIC
Took 148344 ms to read 768 MB with chunk size 8 KB.
Took 89359 ms to read 768 MB with chunk size 64 KB
Took 82625 ms to read 768 MB with chunk size 128 KB
Took 79594 ms to read 768 MB with chunk size 256 KB
Took 78687 ms to read 768 MB with chunk size 512 KB
Took 79078 ms to read 768 MB with chunk size 1024 KB
Took 78594 ms to read 768 MB with chunk size 2048 KB
Took 78406 ms to read 768 MB with chunk size 4096 KB
Took 78281 ms to read 768 MB with chunk size 8192 KB
1 Gbps NIC
Took 206203 ms to read 5120 MB (5GB) with chunk size 8 KB
Took 77860 ms to read 5120 MB with chunk size 64 KB
Took 74531 ms to read 5120 MB with chunk size 128 KB
Took 68656 ms to read 5120 MB with chunk size 256 KB
Took 64922 ms to read 5120 MB with chunk size 512 KB
Took 66312 ms to read 5120 MB with chunk size 1024 KB
Took 68688 ms to read 5120 MB with chunk size 2048 KB
Took 64922 ms to read 5120 MB with chunk size 4096 KB
Took 66047 ms to read 5120 MB with chunk size 8192 KB
DISK WRITER:-
Write performed on RAID 5 With NO_BUFFERING & WRITE_THROUGH
Writing 2048MB (2GB) of data with chunk size 4MB took 68328ms.
Writing 2048MB of data with chunk size 8MB took 55985ms.
Writing 2048MB of data with chunk size 16MB took 49569ms.
Writing 2048MB of data with chunk size 32MB took 47281ms.
Write performed on RAID 5 With NO_BUFFERING only
Writing 2048MB (2GB) of data with chunk size 4MB took 57484ms.
Writing 2048MB of data with chunk size 8MB took 52594ms.
Writing 2048MB of data with chunk size 16MB took 49125ms.
Writing 2048MB of data with chunk size 32MB took 46360ms.
Write performance degrades linearly as the chunk size reduces. And WRITE_THROUGH flag introduces some performance hit
BLITZ COPY:-
1 Gbps NIC, Copying 60 GB of files with NO_BUFFERING
Time Taken to complete copy : 2236735 ms. Ie, 37.2 mins.
The speed is ~ 97 GB / per.
100 Mbps NIC, Copying 60 GB of files with NO_BUFFERING
Time Taken to complete copy : 7337219 ms. Ie, 122 mins.
The speed is ~ 30 GB / per.
I did try using 10-FileCopy program by Jeffrey Ritcher that uses Async-IO with NO_BUFFERING. But, the results were poor. I guess the reason could be the chunk size is 256 KB... 256 KB write on RAID 5 is terribly slow.
Comparing with robocopy:
100 Mbps NIC : Blitz Copy and robocopy perform @ ~30 GB per hour.
1 GBps NIC : Blitz Copy goes @ ~97 GB per hour while robocopy @ ~50 GB per hour.