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, Apr 30, 2:53 PM
Unknown Object (File)
Sun, Apr 21, 8:11 PM
Unknown Object (File)
Feb 12 2024, 5:26 PM
Unknown Object (File)
Dec 20 2023, 6:50 AM
Unknown Object (File)
Dec 12 2023, 11:03 AM
Unknown Object (File)
Dec 10 2023, 2:04 PM
Unknown Object (File)
Oct 10 2023, 6:09 PM
Unknown Object (File)
Oct 4 2023, 4:35 AM
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