Re: net_timedelta() affected by settimeofday() (was: [patch 12/13] net: mac80211: Remove silly timespec dance)
flat view
From: Thomas Gleixner <hidden>
Date: 2014-06-12 08:58:15
Also in:
linux-wireless, lkml
On Thu, 12 Jun 2014, Johannes Berg wrote:
On Thu, 2014-06-12 at 10:35 +0200, Johannes Berg wrote:quoted
+netdev, StephenWell, stupid me. Fixing that netdev address.quoted
On Thu, 2014-06-12 at 10:19 +0200, Thomas Gleixner wrote:quoted
On Thu, 12 Jun 2014, Johannes Berg wrote:quoted
On Wed, 2014-06-11 at 23:59 +0000, Thomas Gleixner wrote:quoted
+ msrmnt = ktime_to_ms(net_timedelta(skb_arv));This is probably more of a question about net_timedelta(), but is ktime_get_real() really appropriate for duration measurements? Isn't that non-monotonic?Well, it's monotonic, but might be affected by settimeofday().Right, but isn't that odd? Suddenly your delay measurement here might be minutes, hours, or years if you settimeofday() between timestamping and calculating the delta. That seems very strange to me, why would that be the right behaviour in any way?
Indeed. clock monotonic is the appropriate one for measurements.
quoted
Now, it seems that there are only two current users of net_timedelta() (in DCCP) so perhaps it's not too late to change some of this? Maybe in general the skb timestamp should be based on a different clock and only adjusted to real time when used in userspace?
You have the same problem then, just at a different place:
ts = ktime_get();
settimeofday()
offset_mono_to_real = new value;
userts = mono_to_real(ts);
But maybe that's not a real issue, as ktime_get_real() can race with
settimeofday() or NTP as well.
ts = ktime_get_real();
settimeofday();
userts = ts;
So the user might see a weird timestamp for a packet, which cannot be
correlated with the user space gettimeofday().
Thanks,
tglx