In benchmarking you must always establish what your limits are. Because if you expect to get 100mbs out of that lan than you are only fooling your self!
Look at this Block design of the RaspberryPI Model-B
So we establish a very important fact here. Ethernet is bottlenecked by the USB controller because form the block digram we establish it is connected to the USB hub. (No clear indication is it uses another bus or just simply USB2?)
Ohh look - another block diagram,
Now that sheds even more light on the situation. The 10/100 controller is connected to the USB hub- unfortunately, again, no where on the spec does it say how fast the hub communicates with the lan controller-- expect for the key fact that is says the usb speed and lan are negotiated for mixed speed usb environments.
Where is the SD Card?
It turns out the SD card is directly connected to the BCM2835 (page 65) and they go into great detail how performance is impacted from various configuration levels. One important thing to notice is that if the SD card has a dedicated Clock it can run independently of the core CPU/GPU at full speed.(of whatever card and standard is used - you can see it supported a few standards.)
So what does that mean?
It means if you benchmark the faster SD card and crappy pen drive(4gb/8gb) you will most likely get massive performance differences. So now it raises the question, how does the CPU/GPU handle communication with this wonderful embedded device (usb/lan chip) and what speeds is it capable of communicating at.
You see how far theory can actually go before we actually do any benchmarking? Another key point here is -- How does the CPU control flow of data. Does it use the separate clock channel as recommended?
IN an ideal world you would think that this LAN/USB would handle it. But that requires a MCU.. do we see an MCY anywhere in that block diagram.. NO!
So the CPU has to request IO DATA send it the USB port then it goes to the LAN port (via the Same USB HUB) Yes.. so that is going to cause some speed issues somewhere.
Also great thing to note what happens when you copy to a USB pen drive and from the SD card all via LAN.. it is going to cause some traffic.
We need to benchmark various aspects
In establishing what we are trying to benchmark we can ask a real world question.
- How fast does the internal USB handle data from SD?
- How much CPU is used to read/write to SD then to LAN?
- How much CPU is used to read/write to a USB Pen drive?
- Does copying any data directly influence the CPU usage?
- How well does the embedded USB/LAN chip handle reading data from 2 sources back into the LAN port and does it affect the CPU proportionally?
- There is no need to test if lan will get full 10mb/s because its bottlenecked by the state in which the USB hub is in.
Now that you know what you are fighting for I challenge you to answer them your self.
You might find this a very good starting point.
References
But mostly,
my own technical knowledge and assessments I have made based on my own embedded experience. The OP asked a very good question but lacks to understand that without theoretical understanding of a system you are doomed in trying to assess/solve the practical problems.
Results
(4) This answer shows some down to earth piratical testing. And it proves that doing intense data transaction directly influences the CPU (just not sure if its the SD card or the process of shifting data inside the BCM chip to the USB/LAN chip)
(6) It has been proved that the only bottle neck is going to be the source (for example a slow SD card) The USB hub manages to pump data at 90%+ but answer to questions 4 and 5 can directly influence this performance.
So doing some research and contribution of other users we are starting to establish and get preliminary results.
Here is a nice chart to help visualise what we are dealing with.
sudo hdparm -t /dev/sdx
as a useful tool for benchmarking.