]> git.proxmox.com Git - ovs.git/commitdiff
dpif-netdev: fix meter at high packet rate.
authorWilliam Tu <u9012063@gmail.com>
Fri, 19 Apr 2019 22:26:41 +0000 (15:26 -0700)
committerBen Pfaff <blp@ovn.org>
Mon, 22 Apr 2019 16:51:28 +0000 (09:51 -0700)
When testing packet rate around 1Mpps with meter enabled, the frequency
of hitting meter action becomes much higher, around 30us each time.
As a result, the meter's calculation of 'uint32_t delta_t' becomes
always 0 and meter action has no effect.  This is due to the previous
commit 05f9e707e194 divides the delta by 1000, in order to convert to
msec granularity.  The patch fixes it updating the time when across
millisecond boundary.

Fixes: 05f9e707e194 ("dpif-netdev: Use microsecond granularity.")
Acked-by: Yi-Hung Wei <yihung.wei@gmail.com>
Acked-by: Ilya Maximets <i.maximets@samsung.com>
Signed-off-by: William Tu <u9012063@gmail.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
lib/dpif-netdev.c

index c20f875ee097621d274cb7fa99422c18f7f830dc..3240f5f768fea3e434ddadccbe7649c3ac346e57 100644 (file)
@@ -5549,7 +5549,7 @@ dp_netdev_run_meter(struct dp_netdev *dp, struct dp_packet_batch *packets_,
     memset(exceeded_rate, 0, cnt * sizeof *exceeded_rate);
 
     /* All packets will hit the meter at the same time. */
-    long_delta_t = (now - meter->used) / 1000; /* msec */
+    long_delta_t = now / 1000 - meter->used / 1000; /* msec */
 
     /* Make sure delta_t will not be too large, so that bucket will not
      * wrap around below. */