mirror of
https://github.com/markqvist/Reticulum.git
synced 2024-11-22 13:40:19 +00:00
Cap resource max window for resource transfer over very slow links
This commit is contained in:
parent
7363c9c821
commit
53226d7035
@ -54,6 +54,9 @@ class Resource:
|
|||||||
# The maximum window size for transfers on slow links
|
# The maximum window size for transfers on slow links
|
||||||
WINDOW_MAX_SLOW = 10
|
WINDOW_MAX_SLOW = 10
|
||||||
|
|
||||||
|
# The maximum window size for transfers on very slow links
|
||||||
|
WINDOW_MAX_VERY_SLOW = 4
|
||||||
|
|
||||||
# The maximum window size for transfers on fast links
|
# The maximum window size for transfers on fast links
|
||||||
WINDOW_MAX_FAST = 75
|
WINDOW_MAX_FAST = 75
|
||||||
|
|
||||||
@ -65,12 +68,22 @@ class Resource:
|
|||||||
# rounds, the fast link window size will be allowed.
|
# rounds, the fast link window size will be allowed.
|
||||||
FAST_RATE_THRESHOLD = WINDOW_MAX_SLOW - WINDOW - 2
|
FAST_RATE_THRESHOLD = WINDOW_MAX_SLOW - WINDOW - 2
|
||||||
|
|
||||||
|
# If the very slow rate is sustained for this many request
|
||||||
|
# rounds, window will be capped to the very slow limit.
|
||||||
|
VERY_SLOW_RATE_THRESHOLD = 2
|
||||||
|
|
||||||
# If the RTT rate is higher than this value,
|
# If the RTT rate is higher than this value,
|
||||||
# the max window size for fast links will be used.
|
# the max window size for fast links will be used.
|
||||||
# The default is 50 Kbps (the value is stored in
|
# The default is 50 Kbps (the value is stored in
|
||||||
# bytes per second, hence the "/ 8").
|
# bytes per second, hence the "/ 8").
|
||||||
RATE_FAST = (50*1000) / 8
|
RATE_FAST = (50*1000) / 8
|
||||||
|
|
||||||
|
# If the RTT rate is lower than this value,
|
||||||
|
# the window size will be capped at .
|
||||||
|
# The default is 50 Kbps (the value is stored in
|
||||||
|
# bytes per second, hence the "/ 8").
|
||||||
|
RATE_VERY_SLOW = (2*1000) / 8
|
||||||
|
|
||||||
# The minimum allowed flexibility of the window size.
|
# The minimum allowed flexibility of the window size.
|
||||||
# The difference between window_max and window_min
|
# The difference between window_max and window_min
|
||||||
# will never be smaller than this value.
|
# will never be smaller than this value.
|
||||||
@ -275,6 +288,7 @@ class Resource:
|
|||||||
self.req_resp_rtt_rate = 0
|
self.req_resp_rtt_rate = 0
|
||||||
self.rtt_rxd_bytes_at_part_req = 0
|
self.rtt_rxd_bytes_at_part_req = 0
|
||||||
self.fast_rate_rounds = 0
|
self.fast_rate_rounds = 0
|
||||||
|
self.very_slow_rate_rounds = 0
|
||||||
self.request_id = request_id
|
self.request_id = request_id
|
||||||
self.is_response = is_response
|
self.is_response = is_response
|
||||||
|
|
||||||
@ -759,6 +773,12 @@ class Resource:
|
|||||||
if self.fast_rate_rounds == Resource.FAST_RATE_THRESHOLD:
|
if self.fast_rate_rounds == Resource.FAST_RATE_THRESHOLD:
|
||||||
self.window_max = Resource.WINDOW_MAX_FAST
|
self.window_max = Resource.WINDOW_MAX_FAST
|
||||||
|
|
||||||
|
if self.fast_rate_rounds == 0 and self.req_data_rtt_rate < Resource.RATE_VERY_SLOW and self.very_slow_rate_rounds < Resource.VERY_SLOW_RATE_THRESHOLD:
|
||||||
|
self.very_slow_rate_rounds += 1
|
||||||
|
|
||||||
|
if self.very_slow_rate_rounds == Resource.VERY_SLOW_RATE_THRESHOLD:
|
||||||
|
self.window_max = Resource.WINDOW_MAX_VERY_SLOW
|
||||||
|
|
||||||
self.request_next()
|
self.request_next()
|
||||||
else:
|
else:
|
||||||
self.receiving_part = False
|
self.receiving_part = False
|
||||||
|
Loading…
Reference in New Issue
Block a user