[jboss-jira] [JBoss JIRA] Updated: (JGRP-1053) UNICAST: set retransmission timeout based on actual retransmission times
Bela Ban (JIRA)
jira-events at lists.jboss.org
Mon Sep 20 01:09:28 EDT 2010
[ https://jira.jboss.org/browse/JGRP-1053?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Bela Ban updated JGRP-1053:
---------------------------
Fix Version/s: 3.0
(was: 2.11)
Investigate in conjunction with dynamically changing credits in flow control
> UNICAST: set retransmission timeout based on actual retransmission times
> ------------------------------------------------------------------------
>
> Key: JGRP-1053
> URL: https://jira.jboss.org/browse/JGRP-1053
> Project: JGroups
> Issue Type: Feature Request
> Reporter: Bela Ban
> Assignee: Bela Ban
> Fix For: 3.0
>
>
> UNICAST needs to compute a rolling average of retransmission times, per sender (AckSenderWindow).
> The retransmission timeout per sender can then be set based on the actual average retransmission times. The advantage is that we throttle retransmission when we have a lot of message loss, and speed it up again when there are no message drops.
> The function to set the timeout should always compute the new timeot value based on (1) the old value times a decay factor and (2) a new value.
> The average should go up relatively quickly if the actual retransmission values go up, but come down slowly when the actual values go down.
> A potential function is shown below:
> static final double SLOW_DECAY_FACTOR=0.9, FAST_DECAY_FACTOR=0.7;
> static final double FAST_UP= 1 / FAST_DECAY_FACTOR, SLOW_UP= 1 / SLOW_DECAY_FACTOR;
> static final double SAFETY_BUFFER=0.3;
> static double avg=200;
> public static void main(String[] args) {
> final long[] times={200,200,400,400,500,500,500,500,500,100,100,100,100,100,100,100,100,100,100,100,100,100};
> // final long[] times={200,200,200,200,200,200,200,200,200,200,200};
> for(Long val: times) {
> double result=avg(val);
> System.out.println(val + ": " + result);
> }
> }
> private static double avg(long val) {
> double decay, up;
> if(val > avg) {
> decay=FAST_DECAY_FACTOR;
> up=FAST_UP;
> }
> else {
> decay=SLOW_DECAY_FACTOR;
> up=SLOW_UP;
> }
> double old_val=avg * decay;
> double result=(old_val + val * up) / 2;
> avg=result;
> return result * (1 + SAFETY_BUFFER);
> }
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://jira.jboss.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the jboss-jira
mailing list