Page MenuHomeFreeBSD

Address two incorrect calculations and enhance readability of PRR code
ClosedPublic

Authored by rscheff on Feb 19 2021, 11:55 PM.
Tags
None
Referenced Files
Unknown Object (File)
Tue, Nov 5, 9:06 AM
Unknown Object (File)
Mon, Nov 4, 2:59 AM
Unknown Object (File)
Thu, Oct 17, 12:35 PM
Unknown Object (File)
Wed, Oct 16, 5:45 AM
Unknown Object (File)
Tue, Oct 15, 5:57 AM
Unknown Object (File)
Mon, Oct 14, 11:55 AM
Unknown Object (File)
Sun, Oct 13, 9:12 AM
Unknown Object (File)
Oct 11 2024, 8:37 PM
Subscribers

Details

Summary

While further investigating the reported performance degradations caused
by cwnd sometimes becoming zero during PRR loss recovery, found two subtle
bugs. One was due to an implicit typecast from int to uint by the
in-kernel max() macro. The other an oversight in the hand-coded
implementation of a CEILING() division, where a macro "howmany()" exists,
which is performing an integer-ceiling division.

Further enhanced the readability by using the appropriate, correct type
imax/imin functions, for the PRR calculation match the pseudocode.

Also changed the temporary variables from long to int, as TCP generally
only used 32 bit sequence space - and thus cwnd.

  • address second instance of cwnd potentially becoming zero
  • fix sublte bug due to implicit int to uint typecase in max()
  • fix bug due to typo in hand-coded CEILING() function by using howmany() macro
  • use int instead of long
  • replace if conditionals with easier to read imax/imin (as in pseudocode)...

Diff Detail

Repository
rG FreeBSD src repository
Lint
Lint Not Applicable
Unit
Tests Not Applicable