I did some tests and got some results. Tests were performed on a network adapter 100 Mbit / s and 1 Gbit / s. The source computer is the Win2K3 server (SATA), and the target machine is the Win2k3 server (RAID 5).
I conducted 3 tests:
1) Network reader → This program simply reads files over the network. The goal of the program is to find the maximum reading speed n / w. I am performing NON BUFFERED reads using CreateFile and ReadFile.
2) Disk Writer -> This program compares RAID 5 speed by writing data. NO BUFFERED writes are performed using CreateFile and WriteFile.
3) Blitz Copy → This program is a file copying mechanism. It copies files over the network. The logic of this program was discussed in the original question. I use synchronous I / O with NO_BUFFERING Reads and Writes. The APIs used are CreateFile, ReadFile, and WriteFile.
The following are the results:
NETWORK READER: -
100 Mbps NIC
Took 148344 ms to read 768 MB with a block size of 8 KB.
Took 89359 ms to read 768 MB with a block size of 64 KB
Took 82625 ms for reading 768 MB with a block size of 128 KB
Took 79594 ms to read 768 MB with a block size of 256 KB
Took 78687 ms to read 768 MB with a block size of 512 KB
Took 79078 ms to read 768 MB with a block size of 1024 KB
Took 78594 ms to read 768 MB with a block size of 2048 KB
Took 78406 ms to read 768 MB with a block size of 4096 KB
Took 78281 ms to read 768 MB with a block size of 8192 KB
1 Gbps NIC
Got 206203 ms for reading 5120 MB (5 GB) with a block size of 8 KB
Taken 77860 ms for reading 5120 MB with a block size of 64 KB
Took 74531 ms for reading 5120 MB with a block size of 128 KB
Took 68656 ms to read 5120 MB with a block size of 256 KB
Took 64922 ms to read 5120 MB with a block size of 512 KB
Took 66312 ms for reading 5120 MB with a block size of 1024 KB
Took 68688 ms for reading 5120 MB with a block size of 2048 KB
Took 64922 ms to read 5120 MB with a block size of 4096 KB
Took 66047 ms for reading 5120 MB with a block size of 8192 KB
DISK WRITER: -
Write is performed on RAID 5 with NO_BUFFERING and WRITE_THROUGH
Writing 2048 MB (2 GB) of data with a block size of 4 MB takes 68328 ms.
Writing 2048 MB of data with a block size of 8 MB took 55985 ms.
Recording 2048 MB of data with a block size of 16 MB took 49569ms.
Writing 2048 MB of data with a block size of 32 MB took 47281 ms.
Write on RAID 5 Only with NO_BUFFERING
Recording 2048 MB (2 GB) of data with a block size of 4 MB took 57484 ms.
Writing 2048 MB of data with a block size of 8 MB takes 52594 ms.
Recording 2048 MB of data with a block size of 16 MB took 49125 ms.
Writing 2048 MB of data with a block size of 32 MB takes 46360 ms.
Recording performance deteriorates linearly as block size decreases. And the WRITE_THROUGH flag represents some kind of performance hit
BLITZ COPY: -
1 Gb / s NIC, copy 60 GB files with NO_BUFFERING
Time to complete copying: 2236735 ms. That is, 37.2 minutes. The speed is ~ 97 GB / s.
100 Mbps NIC, copy 60 GB files with NO_BUFFERING
Time required to complete copying: 7337219 ms. That is, 122 minutes. Speed ~ 30 GB / s.
I tried using the 10-FileCopy Jeffrey Ritcher program, which uses Async-IO with NO_BUFFERING. But the results were bad. I think the reason may be the 256 KB block size ... 256 KB writing on RAID 5 is awfully slow.
Comparison with robocopy:
100 Mbps NIC: Blitz Copy and copy copy @ ~ 30 GB per hour.
1 GBps NIC: Blitz Copy goes @ ~ 97 GB per hour, and robocopy @ ~ 50 GB per hour.