* Re: [PATCH 13/15] [DCCP] options: convert dccp_insert_option_timestamp to ktime_t
2007-08-19 23:52 [PATCH 13/15] [DCCP] options: convert dccp_insert_option_timestamp Arnaldo Carvalho de Melo
@ 2007-08-21 13:25 ` Gerrit Renker
0 siblings, 0 replies; 2+ messages in thread
From: Gerrit Renker @ 2007-08-21 13:25 UTC (permalink / raw)
To: dccp
Sorry this one has a bug also - it compresses a signed 64 bit quantity into a 32-bit unsigned
value. When re-interpreted as microsecond value (in dccp_sample_rtt), this gives values which
are way too small.
Maybe we should keep the dccp_epoch thing, but now with ktime_t, so as to avoid large microsecond values?
In any case, the RTT sampling is not usable - it constantly produces overflow, since the timestamp
option value is too small.
Please see below.
| @@ -388,11 +388,7 @@ EXPORT_SYMBOL_GPL(dccp_timestamp);
|
| int dccp_insert_option_timestamp(struct sock *sk, struct sk_buff *skb)
| {
| - struct timeval tv;
| - __be32 now;
| -
| - dccp_timestamp(sk, &tv);
| - now = htonl(timeval_usecs(&tv) / 10);
| + __be32 now = htonl(((suseconds_t)ktime_to_us(ktime_get_real())) / 10);
| /* yes this will overflow but that is the point as we want a
| * 10 usec 32 bit timer which mean it wraps every 11.9 hours */
|
I debugged this by adding
int dccp_insert_option_timestamp(struct sock *sk, struct sk_buff *skb)
{
ktime_t time = ktime_get_real();
s64 n = ktime_to_us(time);
u32 now;
do_div(n, 10);
now = n;
printk("TIME: %lld => us = %lld => %u (%x) ", (long long) time.tv64, (long long)n, now, now);
now = htonl(now);
printk(" = %x\n", now);
}
... and I get values such as
TIME: 1187701891935389887 => us = 118770189193538 => 1458557250 (56efd142) = 42d1ef56
This is the cut-off, the `us' value is
6C0556efd142 and the u32 (__be32) converted value is
56efd142
So this doesn't work - in CCID3, due to the large RTT values, the sending rate currently goes down
to 7..8 kbits/sec - when I change the RTT back to normal, the rate goes back to line speed (91.6 Mbits/sec).
^ permalink raw reply [flat|nested] 2+ messages in thread