I need to test network throughput of a server to/from itself (it's a lonnnng story!).
I love Iperf and use it across the network, but, I just can't figure out how to bind it to a single interface and only listen via that.
From the documentation, I would assume that this would work: iperf -B eth0 -s to bind one instance to eth0, then in another session: iperf -B eth1 -c ip.of.eth.1.
This doesn't work at all, and actually fails. If I use the ip instead of interface, it does work, but, throughput is at 29Gb/s - so, unless there is some magic going on where by I have a super server with a 30Gb/s card, I am guessing that I am not even touching the network and this is just going locally.
Can anyone help me here, or know of a better test/tool?
Yes, this traffic is transferred locally without reaching your physical interfaces. It is transferred using the loopback interface. The kernel detects that the destination is a local one, so the traffic is looped back to the machine itself without going through eth0 or eth1.
I know this is old, but posting in case it helps anyone else.
Quote from iPerf 2 user documentation
I used this to perform TCP throughput tests on Windows 7 64bit from LAN to WiFi interfaces. Worked fine with either iperf 2.0.8 or 2.0.5, not sure about other versions. See below the commands used.
Since I cannot comment due to insufficient reputation, I will be adding an answer that isn't an answer, but the "solutions" mentioned in https://stackoverflow.com/questions/2734144/linux-disable-using-loopback-and-send-data-via-wire-between-2-eth-cards-of-one/4490220#4490220 seem good in theory, but neither actually works (at least on Debian/Ubuntu, as iperf cannot assign the IP addresses when you either delete the local routes or try to use the virtual NAT addresses.)
Just to save people the time and effort for something that seems good in theory, but doesn't actually work on (modern) Debian/Ubuntu...