[ovs-discuss] [OVN] QoS rules share the same Openflow meter

Maciej Jozefczyk mjozefcz at redhat.com
Tue Mar 24 13:33:26 UTC 2020


Hi all!

I have the following setup:
- Logical Switch with 3 Logical Ports that are VMs:
   * 1 LSP from which i test QoS with iperf3
   * 2 LSPs have QoS policy set.

Configured QoS rules:
--------------------------------------------------------------------------------------------------------
stack at mjozefcz-devstack-qos:~$ ovn-nbctl list qos
_uuid               : 7ad43edb-ed2a-4279-8373-f925a6591508
action              : {}
bandwidth           : {burst=10000, rate=10000}
direction           : from-lport
external_ids        : {}
match               : "inport == \"0dbccc4f-5c36-406e-a629-70d49d52e391\""
priority            : 2002

_uuid               : 8ecac46b-1ec0-4e76-a9e0-0b3063fc79e0
action              : {}
bandwidth           : {burst=10000, rate=10000}
direction           : from-lport
external_ids        : {}
match               : "inport == \"cad88274-feea-4ddb-b8c1-af49ca8833cf\""
priority            : 2002
stack at mjozefcz-devstack-qos:~$
--------------------------------------------------------------------------------------------------------
Please note that the rules have the same bandwidth configuration.
Those QoS rules are mapped for those two logical flows:

-----------------------------------------------------------------------------------------------------------------------------------------------
stack at mjozefcz-devstack-qos:~$ ovn-sbctl list logical_flow
7ae15276-6869-40ac-be1d-b4707dcf5dc7
_uuid               : 7ae15276-6869-40ac-be1d-b4707dcf5dc7
actions             : "set_meter(10000, 10000); next;"
external_ids        : {source="ovn-northd.c:5451", stage-hint="8ecac46b",
stage-name=ls_in_qos_meter}
logical_datapath    : 9a1af1f9-7b42-43c2-ab0b-f4796d209e63
match               : "inport == \"cad88274-feea-4ddb-b8c1-af49ca8833cf\""
pipeline            : ingress
priority            : 2002
table_id            : 8
hash                : 0
stack at mjozefcz-devstack-qos:~$ ovn-sbctl list logical_flow
f541520a-ef70-4038-8ee5-b5b609fc3883
_uuid               : f541520a-ef70-4038-8ee5-b5b609fc3883
actions             : "set_meter(10000, 10000); next;"
external_ids        : {source="ovn-northd.c:5451", stage-hint="7ad43edb",
stage-name=ls_in_qos_meter}
logical_datapath    : 9a1af1f9-7b42-43c2-ab0b-f4796d209e63
match               : "inport == \"0dbccc4f-5c36-406e-a629-70d49d52e391\""
pipeline            : ingress
priority            : 2002
table_id            : 8
hash                : 0
stack at mjozefcz-devstack-qos:~$
-----------------------------------------------------------------------------------------------------------------------------------------------

The problem is that those two rules use the same meter (meter id 2):
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
stack at mjozefcz-devstack-qos:~$ sudo ovs-ofctl -O OpenFlow13 dump-flows
br-int | grep meter
 cookie=0xf541520a, duration=4215.163s, table=16, n_packets=12497,
n_bytes=15463221, priority=2002,reg14=0x4,metadata=0x1
actions=meter:2,resubmit(,17)
 cookie=0x7ae15276, duration=4215.163s, table=16, n_packets=13789,
n_bytes=33132305, priority=2002,reg14=0x5,metadata=0x1
actions=meter:2,resubmit(,17)
stack at mjozefcz-devstack-qos:~$ sudo ovs-ofctl -O OpenFlow13 dump-meters
br-int
OFPST_METER_CONFIG reply (OF1.3) (xid=0x2):
meter=2 kbps burst stats bands=
type=drop rate=10000 burst_size=10000
stack at mjozefcz-devstack-qos:~$ sudo ovs-ofctl -O OpenFlow13 meter-stats
br-int
OFPST_METER reply (OF1.3) (xid=0x2):
meter:2 flow_count:2 packet_in_count:21607 byte_in_count:40746921
duration:4158.558s bands:
0: packet_count:2010 byte_count:6486212
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

So if there are more than one Logical Switch Ports from the same Logical
Switch bound on the chassis that share the same QoS BW limit settings,
those also share the same meter.
That ends with slitted bw limit across those Logical Switch Ports.
I tested it using iperf3, the results:

If only one LSP consumes the limit:
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
stack at mjozefcz-devstack-qos:~$ sudo ip netns exec
ovnmeta-9a1af1f9-7b42-43c2-ab0b-f4796d209e63 iperf3 -R -O 1 -c 10.1.0.20
Connecting to host 10.1.0.20, port 5201
Reverse mode, remote host 10.1.0.20 is sending
[  4] local 10.1.0.2 port 57206 connected to 10.1.0.20 port 5201
[ ID] Interval           Transfer     Bandwidth
[  4]   0.00-1.00   sec  3.49 MBytes  29.3 Mbits/sec
 (omitted)
[  4]   0.00-1.00   sec  1.06 MBytes  8.86 Mbits/sec
[  4]   1.00-2.00   sec  1.37 MBytes  11.5 Mbits/sec
[  4]   2.00-3.00   sec  1.16 MBytes  9.71 Mbits/sec
[  4]   3.00-4.00   sec  1.17 MBytes  9.80 Mbits/sec
[  4]   4.00-5.00   sec  1.17 MBytes  9.84 Mbits/sec
[  4]   5.00-6.00   sec  1.13 MBytes  9.46 Mbits/sec
[  4]   6.00-7.00   sec  1.04 MBytes  8.76 Mbits/sec
[  4]   7.00-8.00   sec  1.26 MBytes  10.6 Mbits/sec
[  4]   8.00-9.00   sec  1.06 MBytes  8.88 Mbits/sec
[  4]   9.00-10.00  sec  1.33 MBytes  11.2 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Retr
[  4]   0.00-10.00  sec  11.7 MBytes  9.78 Mbits/sec  2554
sender
[  4]   0.00-10.00  sec  11.7 MBytes  9.85 Mbits/sec
 receiver

iperf Done.
stack at mjozefcz-devstack-qos:~$
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

If two VMs are using the meter - two iperf3 tests at the same time:
stack at mjozefcz-devstack-qos:~$ sleep 1; sudo ip netns exec
ovnmeta-9a1af1f9-7b42-43c2-ab0b-f4796d209e63 iperf3 -R -c 1
0.1.0.16
Connecting to host 10.1.0.16, port 5201
Reverse mode, remote host 10.1.0.16 is sending
[  4] local 10.1.0.2 port 56874 connected to 10.1.0.16 port 5201
[ ID] Interval           Transfer     Bandwidth
[  4]   0.00-1.00   sec  3.39 MBytes  28.5 Mbits/sec
[  4]   1.00-2.00   sec  69.6 KBytes   570 Kbits/sec
[  4]   2.00-3.00   sec   456 KBytes  3.74 Mbits/sec
[  4]   3.00-4.00   sec   290 KBytes  2.38 Mbits/sec
[  4]   4.00-5.00   sec   534 KBytes  4.37 Mbits/sec
[  4]   5.00-6.00   sec   324 KBytes  2.65 Mbits/sec
[  4]   6.00-7.00   sec  16.8 KBytes   137 Kbits/sec
[  4]   7.00-8.00   sec   474 KBytes  3.89 Mbits/sec
[  4]   8.00-9.00   sec   400 KBytes  3.27 Mbits/sec
[  4]   9.00-10.00  sec   750 KBytes  6.15 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Retr
[  4]   0.00-10.00  sec  6.92 MBytes  5.80 Mbits/sec  867             sender
[  4]   0.00-10.00  sec  6.63 MBytes  5.56 Mbits/sec
 receiver

iperf Done.
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Questions:
- Can we create separate meter for each QoS row, to not share the same
meter if the rules are the same (except match)?
- If we would introduce QoS for Port Groups [1], can we also use separate
meters?

Versions used:
- OVN 20.03
- OVS

Thanks,
Maciej

[1]
https://mail.openvswitch.org/pipermail/ovs-discuss/2020-March/049864.html

-- 
Best regards,
Maciej Józefczyk
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openvswitch.org/pipermail/ovs-discuss/attachments/20200324/73b6868c/attachment.html>


More information about the discuss mailing list