Enable QoS minimum packet rate rule for OVS backend

This patch does *not* implement dataplane enforcement.

QoS minimum packet rate rule is enabled in OVS backend driver and
create/delete/update empty methods are added to enable placement
enforcement.

Partial-Bug: #1922237
See-Also: https://review.opendev.org/785236
Change-Id: Ie283ad3a4ec433c88ac23f798908cd143159394b
This commit is contained in:
Przemyslaw Szczerbik 2021-08-18 09:12:05 +02:00
parent d699a955cd
commit aada855f6d
5 changed files with 78 additions and 7 deletions

View File

@ -84,12 +84,20 @@ traffic directions (from the VM point of view).
.. table:: **Neutron backends, supported directions and enforcement types for Minimum Packet Rate rule**
============================ ==================== ==================== ============== =====
Enforcement type \ Backend Open vSwitch SR-IOV Linux Bridge OVN
============================ ==================== ==================== ============== =====
Dataplane - - - -
Placement - - - -
============================ ==================== ==================== ============== =====
============================ ========================== ==================== ============== =====
Enforcement type \ Backend Open vSwitch SR-IOV Linux Bridge OVN
============================ ========================== ==================== ============== =====
Dataplane - - - -
Placement Any(1)/Egress/Ingress (2) - - -
============================ ========================== ==================== ============== =====
.. note::
(1) Minimum packet rate rule supports ``any`` direction that can be used
with non-hardware-offloaded OVS deployments, where packets processed
from both ingress and egress directions are handled by the same set of
CPU cores.
(2) Since Yoga.
For an ml2 plug-in, the list of supported QoS rule types and parameters is
defined as a common subset of rules supported by all active mechanism drivers.

View File

@ -214,3 +214,22 @@ class QosOVSAgentDriver(qos.QosLinuxAgentDriver):
return
LOG.debug("Minimum bandwidth rule for ingress direction was deleted "
"for port %s", port['port_id'])
# NOTE(przszc): Even though dataplane enforcement is not yet implemented
# for minimum packet rate rule, we need dummy methods to support placement
# enforcement.
def create_minimum_packet_rate(self, port, rule):
LOG.debug("Minimum packet rate rule was created for port %s and "
"rule %s.", port['port_id'], rule.id)
def update_minimum_packet_rate(self, port, rule):
LOG.debug("Minimum packet rate rule was updated for port %s and "
"rule %s.", port['port_id'], rule.id)
def delete_minimum_packet_rate(self, port):
LOG.debug("Minimum packet rate rule was deleted for port %s",
port['port_id'])
def delete_minimum_packet_rate_ingress(self, port):
LOG.debug("Minimum packet rate rule for ingress direction was deleted "
"for port %s", port['port_id'])

View File

@ -21,6 +21,7 @@ from neutron_lib.services.qos import constants as qos_consts
from oslo_log import log as logging
from neutron.objects import network as network_object
from neutron.services.qos import constants as neutron_qos_consts
LOG = logging.getLogger(__name__)
@ -43,7 +44,13 @@ SUPPORTED_RULES = {
qos_consts.MIN_KBPS: {
'type:range': [0, db_consts.DB_INTEGER_MAX_VALUE]},
qos_consts.DIRECTION: {'type:values': constants.VALID_DIRECTIONS}
}
},
neutron_qos_consts.RULE_TYPE_MINIMUM_PACKET_RATE: {
qos_consts.MIN_KPPS: {
'type:range': [0, db_consts.DB_INTEGER_MAX_VALUE]},
qos_consts.DIRECTION: {
'type:values': constants.VALID_DIRECTIONS_AND_ANY},
},
}

View File

@ -260,3 +260,35 @@ class QosOVSAgentDriverTestCase(ovs_test_base.OVSAgentConfigTestBase):
self.qos_driver.update_minimum_bandwidth(port, rule)
mock_delete_minimum_bandwidth_queue.assert_called_once_with(
'port_id', ['port1', 'port2'], 'ofport', 1500)
# TODO(przszc): Update tests when dataplane enforcement is implemented for
# minimum packet rate rule
def test_create_minimum_packet_rate(self):
try:
port = {'port_id': 'p_id'}
rule = mock.MagicMock(id='rule_id')
self.qos_driver.create_minimum_packet_rate(port, rule)
except Exception:
self.fail('create_minimum_packet_rate failed')
def test_update_minimum_packet_rate(self):
try:
port = {'port_id': 'p_id'}
rule = mock.MagicMock(id='rule_id')
self.qos_driver.update_minimum_packet_rate(port, rule)
except Exception:
self.fail('update_minimum_packet_rate failed')
def test_delete_minimum_packet_rate(self):
try:
port = {'port_id': 'p_id'}
self.qos_driver.delete_minimum_packet_rate(port)
except Exception:
self.fail('delete_minimum_packet_rate failed')
def test_delete_minimum_packet_rate_ingress(self):
try:
port = {'port_id': 'p_id'}
self.qos_driver.delete_minimum_packet_rate_ingress(port)
except Exception:
self.fail('delete_minimum_packet_rate_ingress failed')

View File

@ -0,0 +1,5 @@
---
features:
- |
Enabled placement enforcement for QoS minimum packet rate rule in OVS
backend.