diff mbox series

[ovs-dev,ovs,v2,2/3] dpif-netdev: Add the burst size to buckets.

Message ID 20210121094210.55038-2-xiangxia.m.yue@gmail.com
State Superseded
Headers show
Series [ovs-dev,ovs,v2,1/3] dpif-netdev: Fix the meter buckets overflow. | expand

Commit Message

Tonghao Zhang Jan. 21, 2021, 9:42 a.m. UTC
From: Tonghao Zhang <xiangxia.m.yue@gmail.com>

For now, the meter of the userspace datapath, don't include
the bucket burst size to buckets. This patch includes it now.

$ ovs-ofctl -O OpenFlow13 add-meter br0 \
	'meter=1 pktps burst stats bands=type=drop rate=10000 burst_size=2000'

Signed-off-by: Tonghao Zhang <xiangxia.m.yue@gmail.com>
---
 lib/dpif-netdev.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)
diff mbox series

Patch

diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c
index c281f9ac6..ee1619695 100644
--- a/lib/dpif-netdev.c
+++ b/lib/dpif-netdev.c
@@ -6205,7 +6205,7 @@  dp_netdev_run_meter(struct dp_netdev *dp, struct dp_packet_batch *packets_,
 
         band = &meter->bands[m];
         /* Update band's bucket. */
-        max_bucket_size = band->rate * 1000ULL;
+        max_bucket_size = (band->burst_size + band->rate) * 1000ULL;
         band->bucket += (uint64_t)delta_t * band->rate;
         if (band->bucket > max_bucket_size) {
             band->bucket = max_bucket_size;
@@ -6328,7 +6328,8 @@  dpif_netdev_meter_set(struct dpif *dpif, ofproto_meter_id meter_id,
         meter->bands[i].rate = config->bands[i].rate;
         meter->bands[i].burst_size = config->bands[i].burst_size;
         /* Start with a full bucket. */
-        meter->bands[i].bucket = meter->bands[i].rate * 1000ULL;
+        meter->bands[i].bucket =
+            (meter->bands[i].burst_size + meter->bands[i].rate) * 1000ULL;
 
         /* Figure out max delta_t that is enough to fill any bucket. */
         band_max_delta_t