Message ID | 1555712801-13534-1-git-send-email-u9012063@gmail.com |
---|---|
State | Accepted |
Headers | show |
Series | [ovs-dev,PATCHv3] dpif-netdev: fix meter at high packet rate. | expand |
On Fri, Apr 19, 2019 at 3:27 PM William Tu <u9012063@gmail.com> wrote: > > 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.") > Cc: Ilya Maximets <i.maximets@samsung.com> > Cc: Yi-Hung Wei <yihung.wei@gmail.com> > Signed-off-by: William Tu <u9012063@gmail.com> > --- Looks good to me. Acked-by: Yi-Hung Wei <yihung.wei@gmail.com>
On 20.04.2019 1:26, William Tu wrote: > 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.") > Cc: Ilya Maximets <i.maximets@samsung.com> > Cc: Yi-Hung Wei <yihung.wei@gmail.com> > Signed-off-by: William Tu <u9012063@gmail.com> > --- Acked-by: Ilya Maximets <i.maximets@samsung.com>
On Fri, Apr 19, 2019 at 03:26:41PM -0700, William Tu wrote: > 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.") > Cc: Ilya Maximets <i.maximets@samsung.com> > Cc: Yi-Hung Wei <yihung.wei@gmail.com> > Signed-off-by: William Tu <u9012063@gmail.com> Thanks, William (and Ilya and Yi-Hung). I applied this to master and backported as far as 2.9.
diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c index c20f875ee097..3240f5f768fe 100644 --- a/lib/dpif-netdev.c +++ b/lib/dpif-netdev.c @@ -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. */
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.") Cc: Ilya Maximets <i.maximets@samsung.com> Cc: Yi-Hung Wei <yihung.wei@gmail.com> Signed-off-by: William Tu <u9012063@gmail.com> --- lib/dpif-netdev.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)