Bug 193762

Summary: [cc_cdg] crash after change net.inet.tcp.cc.cdg.smoothing_factor
Product: Base System Reporter: iron.udjin
Component: kernAssignee: Michael Tuexen <tuexen>
Status: Closed FIXED    
Severity: Affects Only Me CC: aoimidori27, emaste, hiren, net, tuexen
Priority: --- Keywords: patch
Version: 10.1-STABLEFlags: tuexen: mfc-stable12+
tuexen: mfc-stable11+
Hardware: amd64   
OS: Any   
Attachments:
Description Flags
cc_cdg bug fix
none
packetdrill script for reproducing the issue none

Description iron.udjin 2014-09-19 03:05:09 UTC
Hello,

FreeBSD 10.1-BETA1 r271827.

1) # kldload cc_cdg
2) # sysctl net.inet.tcp.cc.algorithm=cdg
3) # sysctl net.inet.tcp.cc.cdg.smoothing_factor=0

After that system works 5-10 sec, freezes and restarts. I could reproduce it on my server and desktop.
Comment 1 Midori Kato 2014-11-18 23:43:32 UTC
Hi, I tried to reproduce your problem on my machine (OS version: 10.0-RELEASE), but nothing happens. Do you still encounter this problem?
Comment 2 iron.udjin 2014-11-19 20:01:19 UTC
Hello,

Thank you for reply. I can reproduce it on my desktop with 10.1-STABLE r274707 and server with 10.1-STABLE r274618. It bug appear when I run these commands and after that produce some network activity. For example, open browser or download something.
How can I debug it or catch any traceback before system restart?

Thanks
Comment 3 Midori Kato 2014-11-20 07:29:08 UTC
I could reproduce your problem and found why this problem occurs. You need to attach a patch to your kernel in order to fix it. Wait for a moment. I will generate it soon.
Comment 4 Midori Kato 2014-11-20 17:07:07 UTC
Hi,

I found you don't need a patch. The reasonable solution is set smoothing_factor to one instead of zero.
# sysctl net.inet.tcp.cc.cdg.smoothing_factor=1
This configuration helps connections to behave what you like exactly. Could you try this?
Comment 5 iron.udjin 2014-11-20 18:06:16 UTC
Yes, it helps. But according to CC_CDG(4): smoothing_factor - Number of samples used for moving average smoothing (0 means no smoothing).  Default is 8.

That's why I tried to set 0. If smoothing_factor=0 is abnormal setting for this tunable, documentation needs to be changed and restrict possibility to set smoothing_factor to 0. In any case, it's not normal behaviour when OS freezes and restarts, IMHO.

Thanks
Comment 6 Midori Kato 2014-11-20 18:11:12 UTC
This is completely an implementation issue. I am proposing to my fix to a BSD developer. What can I help you exactly?
Comment 7 iron.udjin 2014-11-20 18:47:03 UTC
This bug is not critical for me as we have a workaround. I guess it would be good to add some comments to CC CDG(4) to avoid other users face the same problem.

Thank you for help.
Comment 8 Midori Kato 2014-11-20 21:40:08 UTC
Np, thanks you for your bug report!
Comment 9 Midori Kato 2014-11-22 17:43:55 UTC
Created attachment 149717 [details]
cc_cdg bug fix
Comment 10 Midori Kato 2014-11-22 17:45:55 UTC
Hi again,

Could you test my attaching patch? If it works correctly, your finding bug fix merge into the main tree.
Comment 11 iron.udjin 2014-11-22 20:55:18 UTC
I just tested attached patch on my server. It still restarts when I set net.inet.tcp.cc.cdg.smoothing_factor=0
Comment 12 Midori Kato 2014-11-22 23:33:48 UTC
Could u check if ur revision is proper? If the revision is okay, show me the commands to rebuild ur kernel, please.
Comment 13 iron.udjin 2014-11-23 06:45:25 UTC
uname -a
FreeBSD dev 10.1-STABLE FreeBSD 10.1-STABLE #5 r274887M: Sat Nov 22 22:03:30 EET 2014     root@dev:/usr/obj/usr/src/sys/TG_DEV.debug  amd64

make -j20 buildworld NOCLEAN=YES && make -j20 buildkernel KERNCONF=TG_DEV.debug NOCLEAN=YES && make installworld && make installkernel KERNCONF=TG_DEV.debug
Comment 14 iron.udjin 2014-11-23 07:20:07 UTC
I just deveted everything in /usr/obj/ and buld world and kernel again. The same result. Server restarts.
Comment 15 Marcus von Appen freebsd_committer freebsd_triage 2015-02-18 11:54:21 UTC
Updated 10.1-BETA and 10.1-RC versioned bugs to 10.1-STABLE.
Comment 16 Michael Tuexen freebsd_committer freebsd_triage 2019-02-03 12:54:20 UTC
Created attachment 201680 [details]
packetdrill script for reproducing the issue
Comment 17 Michael Tuexen freebsd_committer freebsd_triage 2019-02-03 13:11:23 UTC
I added a potential fix in review D19071.
Comment 18 iron.udjin 2019-02-03 14:45:20 UTC
I just tested fix on my desktop PC. It works fine and doesn't restart. Also packetdrill script has successfully executed without PC restarts.

Please commit changes.
Thank you!
Comment 19 iron.udjin 2019-02-03 14:49:15 UTC
Forgot to mention: tested on 12.0-STABLE r343713M
Comment 20 Michael Tuexen freebsd_committer freebsd_triage 2019-02-03 16:35:19 UTC
(In reply to iron.udjin from comment #18)
Thanks testing!

The fix needs to be MFCed to stable/11 and stable/12 after getting it into head.
Comment 21 commit-hook freebsd_committer freebsd_triage 2019-02-08 20:43:05 UTC
A commit references this bug:

Author: tuexen
Date: Fri Feb  8 20:42:50 UTC 2019
New revision: 343920
URL: https://svnweb.freebsd.org/changeset/base/343920

Log:
  Ensure that when using the TCP CDG congestion control and setting the
  sysctl variable net.inet.tcp.cc.cdg.smoothing_factor to 0, the smoothing
  is disabled. Without this patch, a division by zero orrurs.

  PR:			193762
  Reviewed by:		lstewart@, rrs@
  MFC after:		3 days
  Sponsored by:		Netflix, Inc.
  Differential Revision:	https://reviews.freebsd.org/D19071

Changes:
  head/sys/netinet/cc/cc_cdg.c
Comment 22 commit-hook freebsd_committer freebsd_triage 2019-02-25 12:26:39 UTC
A commit references this bug:

Author: tuexen
Date: Mon Feb 25 12:25:44 UTC 2019
New revision: 344514
URL: https://svnweb.freebsd.org/changeset/base/344514

Log:
  MFC r343920:

  Ensure that when using the TCP CDG congestion control and setting the
  sysctl variable net.inet.tcp.cc.cdg.smoothing_factor to 0, the smoothing
  is disabled. Without this patch, a division by zero orrurs.

  PR:			193762
  Reviewed by:		lstewart@, rrs@
  Sponsored by:		Netflix, Inc.
  Differential Revision:	https://reviews.freebsd.org/D19071

Changes:
_U  stable/12/
  stable/12/sys/netinet/cc/cc_cdg.c