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.
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] disassociated) to the shared-qos-policy too.
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(
[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 ------- ---+--- ------- ------- ------- --+---- --+---- -+----- ----+-- -----+ ------- ---+--- ------- ------- ------- --+---- --+---- -+----- ----+-- -----+ ,'ingress' ) | NO | | egress | | ------- ---+--- ------- ------- ------- --+---- --+---- -+----- ----+-- -----+
+------
| 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'
+------
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.