Bug 918368

Summary: Modules implementing TCP congestion control algorithms are not built
Product: [Fedora] Fedora Reporter: Glen Turner <gdt>
Component: kernelAssignee: Kernel Maintainer List <kernel-maint>
Status: CLOSED NOTABUG QA Contact: Fedora Extras Quality Assurance <extras-qa>
Severity: medium Docs Contact:
Priority: unspecified    
Version: 18CC: gansalmon, itamar, jonathan, kernel-maint, madhu.chinakonda
Target Milestone: ---   
Target Release: ---   
Hardware: All   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2013-03-06 14:58:16 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Glen Turner 2013-03-06 04:57:27 UTC
Description of problem:

Cannot load modules implementing alternative TCP congestion control algorithms.

End-user effect is that international file transfers cannot successfully use utilities which use parallel connections, due to default algorithm CUBIC's poor inter-flow fairness.


Version-Release number of selected component (if applicable):

$ rpm -q kernel
kernel-3.8.1-201.fc18.x86_64


How reproducible:

Always


Steps to Reproduce:
1. sudo modprobe tcp_westwood
2. sudo modprobe tcp_bic
3. sudo modprobe tcp_htcp
4. sudo modprobe tcp_hybla
5. sudo modprobe tcp_vegas
6. sudo modprobe tcp_scalable
7. sudo modprobe tcp_lp
8. sudo modprobe tcp_veno
9. sudo modprobe tcp_yeah
10. sudo modprobe tcp_illinois


Actual results:

$ sudo modprobe tcp_westwood
modprobe: FATAL: Module tcp_westwood not found.
$ echo $?
1

...and so on for all TCP congestion control modules.


Expected results:

$ sudo modprobe tcp_westwood
$ echo $?
0


Additional info:

The kernel was told to build these modules implementing TCP congestion control algorithms:

$ grep CONFIG_TCP_CONG /boot/config-3.8.1-201.fc18.x86_64 
CONFIG_TCP_CONG_ADVANCED=y
CONFIG_TCP_CONG_BIC=m
CONFIG_TCP_CONG_CUBIC=y
CONFIG_TCP_CONG_WESTWOOD=m
CONFIG_TCP_CONG_HTCP=m
CONFIG_TCP_CONG_HSTCP=m
CONFIG_TCP_CONG_HYBLA=m
CONFIG_TCP_CONG_VEGAS=m
CONFIG_TCP_CONG_SCALABLE=m
CONFIG_TCP_CONG_LP=m
CONFIG_TCP_CONG_VENO=m
CONFIG_TCP_CONG_YEAH=m
CONFIG_TCP_CONG_ILLINOIS=m

So any of these should work

$ for m in tcp_bic tcp_westwood tcp_htcp tcp_hybla tcp_vegas tcp_scalable tcp_lp tcp_veno tcp_yeah tcp_illinois; do sudo modprobe $m; done
modprobe: FATAL: Module tcp_bic not found.
modprobe: FATAL: Module tcp_westwood not found.
modprobe: FATAL: Module tcp_htcp not found.
modprobe: FATAL: Module tcp_hybla not found.
modprobe: FATAL: Module tcp_vegas not found.
modprobe: FATAL: Module tcp_scalable not found.
modprobe: FATAL: Module tcp_lp not found.
modprobe: FATAL: Module tcp_veno not found.
modprobe: FATAL: Module tcp_yeah not found.
modprobe: FATAL: Module tcp_illinois not found.

You would expect to see the congestion control modules listed here:

$ ls /lib/modules/3.8.1-201.fc18.x86_64/kernel/net/ipv4/tcp_*
/lib/modules/3.8.1-201.fc18.x86_64/kernel/net/ipv4/tcp_diag.ko


Compare this with Another Linux Distribution

ubuntu$ grep CONFIG_TCP_CONG /boot/config-3.5.0-25-generic 
CONFIG_TCP_CONG_ADVANCED=y
CONFIG_TCP_CONG_BIC=m
CONFIG_TCP_CONG_CUBIC=y
CONFIG_TCP_CONG_WESTWOOD=m
CONFIG_TCP_CONG_HTCP=m
CONFIG_TCP_CONG_HSTCP=m
CONFIG_TCP_CONG_HYBLA=m
CONFIG_TCP_CONG_VEGAS=m
CONFIG_TCP_CONG_SCALABLE=m
CONFIG_TCP_CONG_LP=m
CONFIG_TCP_CONG_VENO=m
CONFIG_TCP_CONG_YEAH=m
CONFIG_TCP_CONG_ILLINOIS=m

ubuntu$ for m in tcp_bic tcp_westwood tcp_htcp tcp_hybla tcp_vegas tcp_scalable tcp_lp tcp_veno tcp_yeah tcp_illinois; do sudo modprobe $m; done

ubuntu$ lsmod | grep tcp_
tcp_illinois           12838  0 
tcp_yeah               12563  0 
tcp_veno               12630  0 
tcp_lp                 12519  0 
tcp_scalable           12513  0 
tcp_vegas              13559  1 tcp_yeah
tcp_hybla              12628  0 
tcp_htcp               12863  0 
tcp_westwood           12656  0
tcp_bic                13251  0

ubuntu$ ls /lib/modules/3.5.0-25-generic/kernel/net/ipv4/tcp_*
/lib/modules/3.5.0-25-generic/kernel/net/ipv4/tcp_bic.ko
/lib/modules/3.5.0-25-generic/kernel/net/ipv4/tcp_diag.ko
/lib/modules/3.5.0-25-generic/kernel/net/ipv4/tcp_highspeed.ko
/lib/modules/3.5.0-25-generic/kernel/net/ipv4/tcp_htcp.ko
/lib/modules/3.5.0-25-generic/kernel/net/ipv4/tcp_hybla.ko
/lib/modules/3.5.0-25-generic/kernel/net/ipv4/tcp_illinois.ko
/lib/modules/3.5.0-25-generic/kernel/net/ipv4/tcp_lp.ko
/lib/modules/3.5.0-25-generic/kernel/net/ipv4/tcp_probe.ko
/lib/modules/3.5.0-25-generic/kernel/net/ipv4/tcp_scalable.ko
/lib/modules/3.5.0-25-generic/kernel/net/ipv4/tcp_vegas.ko
/lib/modules/3.5.0-25-generic/kernel/net/ipv4/tcp_veno.ko
/lib/modules/3.5.0-25-generic/kernel/net/ipv4/tcp_westwood.ko
/lib/modules/3.5.0-25-generic/kernel/net/ipv4/tcp_yeah.ko

Comment 1 Josh Boyer 2013-03-06 14:58:16 UTC
They're in the kernel-modules-extra package.  Install that.

Comment 2 Glen Turner 2013-03-06 21:22:59 UTC
Thanks Josh.

This change was not in the F17 or F18 Release Notes, as was noted during the testing of F17
http://lists.fedoraproject.org/pipermail/test/2012-April/107241.html