Slashdot Mirror


Finding the Bottleneck in a Gigabit Ethernet LAN?

guroove asks: "I have a small gigabit ethernet network at home, and I spent a lot of money getting gigabit NICs for all my computers and even bought cat 6 cabling. I only have 3 computers on the gigabit network (a Mac, a Windoze machine, and a Linux box) so instead of getting a switch, I triple NIC'd the Linux box, which I use as a gateway and a file server. After the network was complete, I wasn't satisfied with transfer rates, so I started a transfer of a very large file and found that the transfer rate was topping off at just over 145 Mbps (which is a far cry from 1000 Mbps). I'm wondering now where my bottleneck is. Is it the NICs? Are all gigabit NICs really giving us 1000 megabits per second? Is it the driver? Is it Samba? Could it be that the hard drives aren't fast enough? Does anyone have experience with gigabit home networking enough to know where the bottlenecks are? Does the current PCI technology even allow for bandwidth that high"

4 of 100 comments (clear)

  1. The Linux machine is acting as a router ? by bungeejumper · · Score: 5, Insightful

    It is "entirely possible" that the Linux machine is acting as a router, switching all your traffic in C code. Not to mention it is probably sending traffic up and down the PCI bus, once at ingress and once at egress. The lookup of the IP destination address is probably using a whole lot of memory bandwidth, and if it's at all like a regular router, it's probably doing a full IP header Sanity check (using the IP CRC), version number and TTL decrement. After the TTL decrement, you would need to recompute the CRC. I would say the Linux machine is your bottleneck. Unless you could somehow get it configured as an ethernet switch, rather than a Layer 3 router.

    1. Re:The Linux machine is acting as a router ? by Jahf · · Score: 5, Informative

      Agreed.

      While there are a number of Linux based routers out there, none that I know of are used in the Gigabit realm. Even if they are, they at the -very- least have recompiled the kernel to switch on a number of router/gateway optimizations ... and quite possibly contain proprietary network / NIC kernel modules to further gain improvements.

      Unless you have a VERY modern bus architecture (alot of people using Linux routers do so on old gear), preferably an AMD with hyperthreading (since I doubt you have a non-x86 system or you'd have mentioned it), you will never get close to maximizing not one but -3- Gb NICs.

      Take a look at some of the servers that are out there in the x86 realm. They usually require you to use a 100MHz or 133MHz PCI card to get best results from a Gb ethernet NIC. And if you look at the first generation of x86 servers (say, from 2 years ago) that came with Gb ports by default, looking deep into the benchmarks you often find that they never reached their Gb potential with the built-in ports either. The advantage was that it was still better than 100 Megabit.

      With a hyperthreaded high-speed bus and some kernel tweaks, I would be quite happy if I could get all 3 NICs to stress-test simultaneously at 300-500Mb/each. Heck, I'd probably be happy around the 250Mb range.

      BTW, even a Gb switch, on the home CPE level, is probably never going to send multi-Gb of data (ie, by trying to switch data amongst multiple Gb ports). Often times you are limited to a max of 1Gb total throughput because of the switched backplane. Heck, even then you may max around 900Mb due to network overhead.

      Moral is simply to realize that with all networking products, the real speed is usually significantly less than the rated speed.

      --
      It is more productive to voice thoughtful opinions (reply) than to judge (moderate) others.
  2. How about checking the HD's on either end? by _LORAX_ · · Score: 5, Insightful

    Um... how about the obvious. How fast is the Hard Drives in both computers? 145Mbps = ~18MB/s which is approaching the sustained limit for many ATA100/133 drives these day.

    So I would start there.

  3. Re:Use Iperf to test network bandwidth by bohnsack · · Score: 5, Informative

    Using IPerf to test your network bandwidth is easy:

    [machine1]# iperf -s
    Server listening on TCP port 5001
    TCP window size: 85.3 KByte (default)
    [ ID] Interval Transfer Bandwidth
    [ 4] 0.0-10.0 sec 1.10 GBytes 941 Mbits/sec

    [machine2]# iperf -c machine1
    Client connecting to machine1, TCP port 5001
    TCP window size: 16.0 KByte (default)
    [ ID] Interval Transfer Bandwidth
    [ 3] 0.0-10.0 sec 1.10 GBytes 941 Mbits/sec

    This, ~950 Mb/s, is around what you can expect from a 1500 MTU GigE network.