CHROMIUM: net/sched_arl: Reduce rate fluctuation

Reduce the rate fluctuation by pausing longer between BW_PROBE state
and increase rate at a slower pace.

Limiting the rate increase at the end of UNTHROTTLED state to 2x of the
base rate to reduce rate overshot.

Adding new IDLE state and restore the rate to the starting rate after a
long period (20 minutes) in the IDLE state. When there is a congestion
condition caused by a temporarily drop of bandwidth, ARL can react
quickly to remove the bloated queue by reducing the rate limit. However,
unless there is significant load generated by the user, the rate won't
be restored after the congestion condition is gone. This change allows
the rate be restored without depending on user activity.

Update some of the rate and bandwidth calculation to make the scale
works with a lower minimum rate (1 Mbits).

Don't clear the max_bw and min_base_rate after each time the stats is
read by arl_dump_stats().

The default configuration now set the minimum rate to 70% of the
bandwidth, update the starting condition according.

BUG=b:156160233
TEST=Test network latency under load (go/qdisc-arl-test)

Signed-off-by: Kan Yan <kyan@google.com>
Change-Id: I220cb15a77b750a696e592464b90782ebfb05f3b
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/kernel/+/2232022
Reviewed-by: Kan Yan <kyan@chromium.org>
Reviewed-by: Danny Mitzel <mitzel@chromium.org>
Tested-by: Kan Yan <kyan@chromium.org>
2 files changed