Hmm, what's the point of doing it multi-threaded? Isn't this just going to thrash the disk drives seek requests?
On drives with a single spindle, you're right to suspect minimal or even negative improvement, yet most of the time with relatively small files (perhaps even as large as, say, files in an MP3 collection), you can still gain a performance advantage by using a small number of threads (2-5 has worked well for me in the past) on single drives.
Some things that affect whether multi-threading will improve copy speeds:
- The sizes of the files.
- The availability of NCQ on the drives (both source and destination).
- The sizes of the internal memory caches on the drives.
- The number of spindles that make up the volumes (e.g. a RAID array)
- Other hardware caching of data on the drives (NAS controllers, etc.)
On high-end systems (like these
) I often see 10 times the throughput using multiple threads (whether using McTool or multiple instances of RoboCopy) when copying smallish files from one system to another. I have seen throughput speeds of over 90 MB/s in a single instance of the tool.
I don't know enough about SMB, CIFS, or Completion Ports to talk intelligently about them, but in developing this application, I have run into enough information about them to think it would be worth learning more...