This page should apply to all Ubuntu versions


Introduction

Ethernet flow control, or 802.3x, is a way for a network device to tell its immediate neighbour that it is overloaded with data, such as when a device is receiving data faster than it can process it. Unfortunately, if flow control is enabled on a gigabit switch with a gigabit server and 100Mbps clients, it may bring down the whole network bandwidth to 100Mbps. So flow control should be disabled for mixed-speed LTSP networks.

Disabling flow control on the switch

If your switch is managed, you could disable flow control from its configuration interface. Check your switch manual for instructions.

Disabling flow control with a script

If your switch doesn't allow disabling flow control (or even if it does but you don't want to bother with its configuration interface), you can download this script and put it to /etc/network/if-up.d/sch-scripts. Then make it executable by running:

sudo chmod +x /etc/network/if-up.d/sch-scripts

# And also install ethtool:
sudo apt-get --yes install ethtool

That script is part of some Greek software called "sch-scripts" and it automatically tries either ethtool or mii-tool to disable flow control for your NIC, because usually NICs only support one of those tools. You can then check if it worked by running:

grep sch-scripts /var/log/syslog

Essentially, the commands that the script internally runs are:

# $neg is either "on" or "off" depending on the NIC:
ethtool --pause eth0 autoneg "$neg" rx off

# For NICs that don't support ethtool, mii-tool is used:
mii-tool -A "1000baseT-HD 1000baseT-FD 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD" eth0

Disabling flow control with module parameters

Some might argue that the ideal way to disable flow control would be to instruct the NIC module to do so, via /etc/modprobe.d/options.conf, for example:

Driver

/etc/modprobe.d/options.conf line

e1000

options e1000 FlowControl=2

3c59x

options 3c59x flow_ctrl=0

Unfortunately only a few modules support that method. You can discover them with this code:

find /lib/modules/*/kernel/drivers/net -name '*.ko' -exec basename {} \; | 
    while read mod; do
        mod=${mod%.ko}
        res=$(modinfo "$mod" | grep -i flow)
        if [ -n "$res" ]; then
            echo "=== $mod ==="
            echo "$res"
        fi
    done

Benchmarks

A real-life benchmark showed that with flow control on, a 100/1000 mixed speed network operated at 90Mbps, and with flow control off the bandwidth increased to 900Mbps.

One easy way to benchmark your LAN is with the Epoptes computer lab management tool: http://www.epoptes.org/documentation/lan-benchmark

See Also

  • UbuntuLTSP - Community Ubuntu LTSP Documentation.

External Links


CategoryNetworking CategoryLtsp

UbuntuLTSP/FlowControl (last edited 2015-05-03 09:11:01 by alkisg)