Hi Ian,
I appreciate the work you have put into this patch and have no doubt that
it may have cost a lot of time, but the problem here is one of perspective.
Let's separate the issues:
| The RFC is a little confusing but I think I have carried out it's
| intention correctly. I'll quote verbatim here the relevant parts:
|
| When calculating the average loss interval we need to decide whether
| to include the interval since the most recent packet loss event. We
| only do this if it is sufficiently large to increase the average loss
| interval.
|
| Thus if the most recent loss intervals are I_0 to I_n, with I_0 being
| the interval since the most recent loss event, then we calculate the
| average loss interval I_mean as:
|
| Notice here the "interval since the most recent packet loss event".
| This implies (but would help if explicit) that this is an interval
| with no loss. We only use if it would increase the average.
|
| Backing up my implications is that we have intervals from I_0 to I_n
| which is actually n+1 intervals so therefore I read I_0 to be the
| interval of non-loss. Does this help? Once you see that it all falls
| into place.
|
| > If you mean this, then the patch is not necessary. The reason is that this
statement
| > refers to I_tot0 versus I_tot1. The statement
| >
| > I_tot = max(I_tot0, I_tot1);
| >
| > takes care of using the `interval since the most recent packet loss event'
only if
| > it is sufficiently large. It is not explicit to see, but is implicitly
contained in the
| > way the two weighted averages are compared against each other: it boils
down to
| > comparing I_0 against the oldest 5 loss intervals.
| >
| > [ For a more detailed explanation, cf. the MSc thesis by Widmer, I also
have a set of
| > notes on this case ]
| >
| I didn't mean that but someone had tried to implement it and had done
| it incorrectly. The intent as I read is not to compare the calculation
| with and without the most recent loss interval but to compare with and
| without the non-loss interval.
1) see previous posting - I think we are still having a misunderstanding here
and
I do think that what you cite above is already covered by the condition
I_tot = max(I_tot0, I_tot1)". That would mean, as soon as we implement [RFC
3448, 5.4],
we have this sorted out (and this method has been tested for 7 years).
| The implementation in the kernel, which was wrong logic, also had
| wrong implementation! The code was taken over from FreeBSD (relicensed
| under GPL) and we actually didn't analyse properly and were excluding
| the wrong item from the loop as linked lists ran the opposite
| direction in FreeBSD to Linux in this case!!
2) if you think this has not been implemented correctly, then can you please
point out
> where <. The situation at the moment is: you are saying "X has been
implemented
wrongly, so I use Y to solve the problem". Y however has not much in common
with X, so
we are left with a broken method X and a non-standard method Y.
| > As far as I can see, it is non-standard.
|
| I believe it is standard as per earlier. It does boost performance but
| correctly so. Search the archives for Burak and you will see what it
| solves. It is particularly applicable to links like satellite with
| fixed bandwidth. Think about say a 128 Kbits link and you get a loss
| when you are at 40 Kbits per second. If you get no more loss then you
| can never achieve your link speed as i_mean is not recalculated.
3) I have a suggestion: you seem to be sure of the merits of this solution and
report on
test results. My suggestion would be to offer using this method via a
configuration
option (same as per the nofeedback timer threshold). You could put detailed
advice into
the kernel configuration menu, and we would have the best of both worlds -
a standards-
compliant TFRC implementation and a configurable Ian's nifty solution.
Would that settle
things?
| All this is is a method of not having to call calc_i_mean for EVERY
| packet which would be very expensive on CPU. It is new but is a very
4) This code is only invoked when ccid3_hc_rx_detect_loss() returns true,
hence it is not
invoked for every packet.
-
To unsubscribe from this list: send the line "unsubscribe dccp" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html