[ovs-dev] [PATCH OVS 4/4] revert: dpif-netdev: includes microsecond delta in meter bucket calculation

xiangxia.m.yue at gmail.com xiangxia.m.yue at gmail.com
Thu Apr 30 11:00:39 UTC 2020


From: Tonghao Zhang <xiangxia.m.yue at gmail.com>

Use the pktgen-dpdk to test the commit 5c41c31ebd64
("dpif-netdev: includes microsecond delta in meter bucket calculation"), it
does't work as expected. And it broken the meter function (e.g. set rate
200Mbps, the rate watched was 400Mbps). To reproduce it:

$ ovs-vsctl add-br br-int -- set bridge br-int datapath_type=netdev
$ ovs-ofctl -O OpenFlow13 add-meter br-int "meter=100 kbps burst stats bands=type=drop rate=200000 burst_size=200000"
$ ovs-ofctl -O OpenFlow13 add-flow br-int "in_port=dpdk0 action=meter:100,output:dpdk1"

$ pktgen -l 1,3,5,7,9,11,13,15,17,19 -n 8 --socket-mem 4096 --file-prefix pg1 \
        -w 0000:82:00.0 -w 0000:82:00.1 -- -T -P -m "[3/5/7/9/11/13/15].[0-1]" -f meter-test.pkt

| meter-test.pkt:
| set 0 count 0
| set 0 size 1500
| set 0 rate 100
| set 0 burst 64
| set 0 sport 1234
| set 0 dport 5678
| set 0 prime 1
| set 0 type ipv4
| set 0 proto udp
| set 0 dst ip 1.1.1.2
| set 0 src ip 1.1.1.1/24
| set 0 dst mac ec:0d:9a:ab:54:0a
| set 0 src mac ec:0d:9a:bf:df:bb
| set 0 vlanid 0
| start 0

Cc: Ilya Maximets <i.maximets at ovn.org>
Cc: William Tu <u9012063 at gmail.com>
Cc: Jarno Rajahalme <jarno at ovn.org>
Cc: Ben Pfaff <blp at ovn.org>
Cc: Andy Zhou <azhou at ovn.org>
Cc: Jiang Lidong <jianglidong3 at jd.com>
Signed-off-by: Tonghao Zhang <xiangxia.m.yue at gmail.com>
---
 lib/dpif-netdev.c | 5 -----
 1 file changed, 5 deletions(-)

diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c
index 104347d8b251..cf10b5a62423 100644
--- a/lib/dpif-netdev.c
+++ b/lib/dpif-netdev.c
@@ -5902,7 +5902,6 @@ dp_netdev_run_meter(struct dp_netdev *dp, struct dp_packet_batch *packets_,
     struct dp_packet *packet;
     long long int long_delta_t; /* msec */
     uint32_t delta_t; /* msec */
-    uint32_t delta_in_us; /* usec */
     const size_t cnt = dp_packet_batch_size(packets_);
     uint32_t bytes, volume;
     int exceeded_band[NETDEV_MAX_BURST];
@@ -5933,9 +5932,6 @@ dp_netdev_run_meter(struct dp_netdev *dp, struct dp_packet_batch *packets_,
            Assuming that all racing threads received packets at the same time
            to avoid overflow. */
         long_delta_t = 0;
-        delta_in_us  = 0;
-    } else {
-        delta_in_us  = (now - meter->used) % 1000;
     }
 
     /* Make sure delta_t will not be too large, so that bucket will not
@@ -5971,7 +5967,6 @@ dp_netdev_run_meter(struct dp_netdev *dp, struct dp_packet_batch *packets_,
 
         /* Update band's bucket. */
         band->bucket += (uint64_t)delta_t * band->up.rate;
-        band->bucket += delta_in_us * band->up.rate / 1000;
         if (band->bucket > band->up.burst_size) {
             band->bucket = band->up.burst_size;
         }
-- 
1.8.3.1



More information about the dev mailing list