Comment 6 for bug 1858610

Revision history for this message
Jie Li (neoareslinux) wrote :

Hi @Slawek @Rodolfo:

I'd like to describe our thought simplify here, please let me know if something you don't agree with or have better idea. thanks.

[Backend Driver]
share-qos-policy will depends linux tc and ifb interface.

[API and Extensions]
1. add an new neutron extension shared-qos-policy
2. shared-qos-policy could be associated with several ports.
3. port could be associated with share-qos-policy or qos policy, but not both at the same time.
   In other words, if port has been associated with share-qos-policy, it can't be associated with qos policy anymore.

[Neutron Server]
If user use nova command to add/delete an new interface to/from vm. neutron-server also need to catch those event to check whether
wether the vm has port associated with shared-qos-policy, if so, the the new port will be binded(disassociated) to the shared-qos-policy too.

[DB Model]
Add three new db tables for shared-qos-policy api extension.

qos_shared_policy
+------------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------+--------------+------+-----+---------+-------+
| id | varchar(36) | NO | PRI | NULL | |
| name | varchar(255) | YES | | NULL | |
| project_id | varchar(255) | YES | MUL | NULL | |
| standard_attr_id | bigint(20) | NO | UNI | NULL | |
+------------------+--------------+------+-----+---------+-------+

qos_shared_policy_rules
+----------------+--------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------------+--------------------------+------+-----+---------+-------+
| id | varchar(36) | NO | PRI | NULL | |
| qos_policy_id | varchar(36) | NO | MUL | NULL | |
| max_kbps | int(11) | YES | | NULL | |
| max_burst_kbps | int(11) | YES | | NULL | |
| direction | enum('egress','ingress') | NO | | egress | |
+----------------+--------------------------+------+-----+---------+-------+

qos_shared_port_policy_binding
+-----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| policy_id | varchar(36) | NO | MUL | NULL | |
| port_id | varchar(36) | NO | PRI | NULL | |
+-----------+-------------+------+-----+---------+-------+

[Agent(ovs-agent、linux-bridge-agent)]
backend drivers: linux tc、 ifb(Intermediate Functional Block).

shared-qos-policy will be associated to multiple ports, if ports belong to one vm, ovs-agent will redirect the traffic of those nics to ifb-X interface,
share-qos-policy bandwidth rule will be configured on ifb-X interface. after qos shaping, the trafiic will be send back to qovXXX interfaces.