8

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?

William Hilsum
  • 3,506
  • 5
  • 28
  • 39
  • There is an existing post on this topic at http://stackoverflow.com/questions/2734144/linux-disable-using-loopback-and-send-data-via-wire-between-2-eth-cards-of-one – dwurf Apr 25 '12 at 12:52
  • I can say that I looked around thoroughly, but, never thought of checking Stack Overflow for this! Reading now. – William Hilsum Apr 25 '12 at 12:58
  • Google-Fu: I didn't get any love till I googled "disable loopback linux". Turns out people try to do that for all the same reasons as you have :) – dwurf Apr 25 '12 at 13:18
  • I had success with `ip netns` exemplified here https://serverfault.com/a/861465/210994 – ThorSummoner Jan 03 '19 at 06:42

3 Answers3

5

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.

Khaled
  • 35,688
  • 8
  • 69
  • 98
  • I guessed this is what the issue was, just didn't know it was via the loopback - you just gave me the idea of disabling the loopback interface - however, this didn't help and now I can't even get the big speed! Also tried going via a switch instead of going direct (port to port).. Do you know another tool that can help? At the moment, I am thinking of just using another machine... However, I really want to try and keep it to just one if possible. – William Hilsum Apr 25 '12 at 12:40
  • Try putting the interfaces on different subnets, and ensure that ip forwarding is disabled. Just a thought! – dwurf Apr 25 '12 at 12:46
  • @WilliamHilsum: I think it can be done by some ARP trick. – Khaled Apr 25 '12 at 12:49
  • I am certain this could be solved by editing the routing table, but, I just ran out of time and in the end, I just used a second server! Marking as answer though as it explained the problem and got me the closest... If someone else writes an actual answer on how to fix, I will switch the answer to that. – William Hilsum Jul 01 '12 at 16:42
2

I know this is old, but posting in case it helps anyone else.

Quote from iPerf 2 user documentation

If iPerf is in server mode, then specifying a host with -c will limit the connections that iPerf will accept to the host specified. Does not work well for UDP.

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.

iperf.exe -B 192.168.0.1 -s -c 192.168.0.2 -P 0 -i 1 -p 5001 -f m

iperf.exe -B 192.168.0.2 -c 192.168.0.1 -P 1 -i 1 -p 5001 -f m -t 100 -F c:\data.bin
masegaloeh
  • 17,978
  • 9
  • 56
  • 104
user305077
  • 21
  • 1
0

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...

  • This does not provide an answer to the question. Once you have sufficient [reputation](https://serverfault.com/help/whats-reputation) you will be able to [comment on any post](https://serverfault.com/help/privileges/comment); instead, [provide answers that don't require clarification from the asker](https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can-i-do-instead). - [From Review](/review/late-answers/516483) – Davidw Mar 31 '22 at 19:46