Skip to contentSkip to conversation

unstable 10GBE performance with recent kernels (> 3.0.X)

DISCUSSION Stefan Priebe - Profihost AG 2 participants 9 messages Jun 18, 2012

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

Hello list,

i've discovered very unstable 10GBE performance using recent kernels. I'm using some optimized settings mentioned by intel here (part:Improving Performance): http://downloadmirror.intel.com/5874/eng/README.txt

I'm using Intel X520 cards (ixgbe driver version: 3.9.17-NAPI in all tests).

I'm measuring the performance with iperf.

With 3.0.32 i get constant 9,90 Gbit/s in both directions simultaneously.

With 3.4.2 or 3.5.0-rc2 it get sometimes 9,9gbit/s - sometimes 3gbit/s or even sometimes only 1gbit/s throughput.

I also tried to change the tcp_congestion_control from cubic to reno, bic and highspeed but no change.

I also tried to bisect the issue but there are so many changes in the net kernel part that i'm unable to identify the problem as with some commits i only get 0-300kb/s performance.

Any ideas?

Greets
Stefan

#1 lore raw
Quoted 7 lines · Stefan Priebe - Profihost AG

Hello list,

i've discovered very unstable 10GBE performance using recent kernels. I'm using some optimized settings mentioned by intel here (part:Improving Performance):
http://downloadmirror.intel.com/5874/eng/README.txt

like what settings ?

Quoted 10 lines

I'm using Intel X520 cards (ixgbe driver version: 3.9.17-NAPI in all tests).

I'm measuring the performance with iperf.

With 3.0.32 i get constant 9,90 Gbit/s in both directions simultaneously.

With 3.4.2 or 3.5.0-rc2 it get sometimes 9,9gbit/s - sometimes 3gbit/s or even sometimes only 1gbit/s throughput.

Quoted 8 lines

I also tried to change the tcp_congestion_control from cubic to reno, bic and highspeed but no change.

I also tried to bisect the issue but there are so many changes in the net kernel part that i'm unable to identify the problem as with some commits i only get 0-300kb/s performance.

Any ideas?

ethtool -S eth0
ethtool -k eth0
netstat -s (on sender, on receiver)

single flow , multiple flows ?

#2 lore raw

Am 18.06.2012 11:45, schrieb Eric Dumazet:

Quoted 9 lines · Stefan Priebe - Profihost AG
Quoted 7 lines

Hello list,

i've discovered very unstable 10GBE performance using recent kernels. I'm using some optimized settings mentioned by intel here (part:Improving Performance):
http://downloadmirror.intel.com/5874/eng/README.txt

like what settings ?

Sorry these ones:
http://pastebin.com/raw.php?i=J2XRFAjD

Quoted 3 lines
Quoted 1 line

Any ideas?

ethtool -S eth0

From host1 and 2: http://pastebin.com/raw.php?i=0Pp8Vs3Y

Quoted 1 line

ethtool -k eth0

From host1 and 2: # ethtool -k eth2
Offload parameters for eth2:
rx-checksumming: on
tx-checksumming: on
scatter-gather: on
tcp-segmentation-offload: on
udp-fragmentation-offload: off
generic-segmentation-offload: on
generic-receive-offload: on
large-receive-offload: off
ntuple-filters: off
receive-hashing: on

# ethtool -k eth2
Offload parameters for eth2:
rx-checksumming: on
tx-checksumming: on
scatter-gather: on
tcp-segmentation-offload: on
udp-fragmentation-offload: off
generic-segmentation-offload: on
generic-receive-offload: on
large-receive-offload: off
ntuple-filters: off
receive-hashing: on
Quoted 1 line

netstat -s (on sender, on receiver)

From host1 and 2: http://pastebin.com/raw.php?i=P9T96j0L

Quoted 1 line

single flow , multiple flows ?

host1: iperf -s
host2: iperf -c ssdstor002 -d -t 600 -i 10;

In this test i got around 7.4Gbit/s

Stefan

#3 lore raw
Quoted 9 lines · Stefan Priebe - Profihost AG

Am 18.06.2012 11:45, schrieb Eric Dumazet:

Quoted 8 lines · Stefan Priebe - Profihost AG
Quoted 7 lines

Hello list,

i've discovered very unstable 10GBE performance using recent kernels. I'm using some optimized settings mentioned by intel here (part:Improving Performance):
http://downloadmirror.intel.com/5874/eng/README.txt

Quoted 5 lines
Quoted 1 line

like what settings ?

Sorry these ones:
http://pastebin.com/raw.php?i=J2XRFAjD

I would remove all this (pretty old and obsolete) stuff and use standard params.

Only thing you could do is :

ethtool -K eth2 ntuple on

on both machines

#4 lore raw

Am 18.06.2012 12:25, schrieb Eric Dumazet:

Quoted 2 lines

I would remove all this (pretty old and obsolete) stuff and use standard params.

OK, thanks. done.

I've one RHEL6 system (using default 2.6.32 kernel) where only using "ntuple on" results in just 4-5Gbit/s while the others using 3.5.0-rc2 are working fine.

Quoted 4 lines

Only thing you could do is :
ethtool -K eth2 ntuple on

on both machines

Thanks that works great and boosts the performance a lot. What does it do? man ethtool doesn't show anything useful.

Is this also recommanded for 1Gb/s?

Could you recommend a tcp_congestion_control module? RHEL6 uses cubic by default. Some others use reno or bic.

Stefan

#5 lore raw
Quoted 9 lines · Stefan Priebe - Profihost AG

Am 18.06.2012 12:25, schrieb Eric Dumazet:

Quoted 2 lines

I would remove all this (pretty old and obsolete) stuff and use standard params.

OK, thanks. done.

I've one RHEL6 system (using default 2.6.32 kernel) where only using "ntuple on" results in just 4-5Gbit/s while the others using 3.5.0-rc2 are working fine.

OK, then you might play with affinities, that's the only thing that might need sysadmin tuning (irqbalance needs to be disabled)

Quoted 7 lines
Quoted 4 lines

Only thing you could do is :
ethtool -K eth2 ntuple on

on both machines

Thanks that works great and boosts the performance a lot. What does it do? man ethtool doesn't show anything useful.

I am not Intel guy, but you might find some info in :

http://downloadmirror.intel.com/14687/eng/README.txt

Quoted 2 lines

Is this also recommanded for 1Gb/s?

Not sure it's supported on ixgb

Quoted 2 lines

Could you recommend a tcp_congestion_control module? RHEL6 uses cubic by default. Some others use reno or bic.

Hard to tell, there is no generic answer. Default should be fine for most uses.

#6 lore raw

Am 18.06.2012 14:51, schrieb Eric Dumazet:

Quoted 6 lines · Stefan Priebe - Profihost AG
Quoted 5 lines

Am 18.06.2012 12:25, schrieb Eric Dumazet:

Quoted 2 lines

I would remove all this (pretty old and obsolete) stuff and use standard params.

OK, thanks. done.

Quoted 7 lines
Quoted 4 lines

I've one RHEL6 system (using default 2.6.32 kernel) where only using "ntuple on" results in just 4-5Gbit/s while the others using 3.5.0-rc2 are working fine.

OK, then you might play with affinities, that's the only thing that might need sysadmin tuning (irqbalance needs to be disabled)

I've now used this one:

# script provided by intel
/root/set_irq_affinity.sh eth2
ifconfig eth2 mtu 9000
ethtool -K eth2 ntuple on

irqbalance is off

But with the latest long term stable vanilla kernel 3.0.34.

# iperf -c HOST -t 60

works fine but with -d for using both directions i see around 9.8Gbit/s in one direction and only 300kb/s in the other direction.

Stefan

#7 lore raw
Quoted 25 lines · Stefan Priebe - Profihost AG

Am 18.06.2012 14:51, schrieb Eric Dumazet:

Quoted 3 lines · Stefan Priebe - Profihost AG
Quoted 2 lines

Am 18.06.2012 12:25, schrieb Eric Dumazet:

Quoted 1 line

I would remove all this (pretty old and obsolete) stuff and use

standard

Quoted 10 lines
Quoted 7 lines
Quoted 1 line

params.

OK, thanks. done.

I've one RHEL6 system (using default 2.6.32 kernel) where only using "ntuple on" results in just 4-5Gbit/s while the others using 3.5.0-rc2 are working fine.

OK, then you might play with affinities, that's the only thing that might need sysadmin tuning (irqbalance needs to be disabled)

I've now used this one:

# script provided by intel
/root/set_irq_affinity.sh eth2
ifconfig eth2 mtu 9000
ethtool -K eth2 ntuple on

irqbalance is off

Quoted 8 lines

But with the latest long term stable vanilla kernel 3.0.34.

# iperf -c HOST -t 60

works fine but with -d for using both directions i see around 9.8Gbit/s in one direction and only 300kb/s in the other direction.

Stefan

I would try using regular MTU.

And post "netstat -s" results before/after your iperf.

#8 lore raw

Am 18.06.2012 15:29, schrieb Eric Dumazet:

Quoted 8 lines
Quoted 6 lines

But with the latest long term stable vanilla kernel 3.0.34.

# iperf -c HOST -t 60

works fine but with -d for using both directions i see around 9.8Gbit/s in one direction and only 300kb/s in the other direction.

I would try using regular MTU.

For 3.5.0-rc2 this works fine but decreases the speed from 9,9Gbit/s to 9,3Gbit/s. With mtu 9000 i get around 3-4Gbit/s (netstat -s attached below)

With 3.0.34 MTU 9000 works fine with constant 9,9Gbit/s in both directions.

Quoted 1 line

And post "netstat -s" results before/after your iperf.

Tests with mtu 9000 and 3.5rc2:
Pre: http://pastebin.com/raw.php?i=uBjsFKjs
Post: http://pastebin.com/raw.php?i=TAK8JS6j

Thanks again!

Stefan