[ovs-discuss] a suggestion to improve performance when adding lots of ports
ychen
ychen103103 at 163.com
Tue Aug 4 11:52:23 UTC 2015
I wanted to know whether ovs community have any suggestions to resolve this problem.
now this problem also appear on openstack, the error log "Unable to add port tapcfca4a52-37 to OVS bridge br-int" appeared when there is nearly 1000 ports on one compute node.
but with command "add-port --timeout=50" the phenomenon disappeared.
At 2014-12-05 10:08:56, "ychen" <ychen103103 at 163.com> wrote:
hi,
This a patch for performance optimization when adding lots of ports.
The patch is based on version 2.3.0, and I have run all the testsuites.
The main optimize points are :
1) monitor some special records instead of monitor all the records
2) remove column "ports" in table "Bridge", replaced with adding "bridges" in table "Port"
At 2014-11-25 23:40:09, "Ben Pfaff" <blp at nicira.com> wrote:
>On Tue, Nov 25, 2014 at 05:36:31PM +0800, ychen wrote:
>> I have found that when adding lots of ports, system consumes more and more time when ports number increasing.
>> And the main time is consumed on encapsulation and decapsulation the JSON message between vsctl and ovsdb-server.
>> when vsctl starts, it will first send monitor request to ovsdb-server, and then db-server send all the records with the related column to vsctl
>> please notice the word "all records", so that when ports number gets larger, system will need more time to encap and decap the JSON message between vsctl and db-server.
>>
>>
>> I suggest to slightly modify the RPC method "Monitor" in RFC 7047. The main idea is only monitor specified records when add /del/set/get port.
>> The original Monitor method is like that:
>> Each <monitor-request> is an object with the following members:
>> "columns": [<column>*] optional
>> "select": <monitor-select> optional
>> The columns, if present, define the columns within the table to be
>> monitored. <monitor-select> is an object with the following members:
>> "initial": <boolean> optional
>> "insert": <boolean> optional
>> "delete": <boolean> optional
>>
>> "modify": <boolean> optional
>> And I want give this method a slight change:
>> <monitor-select> is an object with the following members:
>> "initial": <boolean> optional
>> "insert": <boolean> optional
>> "delete": <boolean> optional
>>
>> "modify": <boolean> optional
>> "where": [<condition>*] optional
>> for example, when add or del a port p0, first we will send a monitor request like this:
>> method="monitor", params=["Open_vSwitch",null,{"Port":{"columns":["bridges","fake_bridge","interfaces","name","tag"],"select":{"where":[["name","==","p0"]]}},"Interface":{"columns":["name","ofport","type"],"select":{"where":[["name","==","p0"]]}},"Bridge":{"columns":["controller","fail_mode","name"],"select":{"where":[["name","==","br0"]]}},"Controller":{"columns":[]},"Open_vSwitch":{"columns":["bridges","cur_cfg"]}}]
>> then ovsdb-server should only reply with the specified record p0, so that we can save lots of time when monitoring.
>> I have done a test with this method, with 4000 ports, the time consuming can be decreased from about 2800s to about 500s.
>
>Sounds great, please submit patches when you have them ready.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://openvswitch.org/pipermail/ovs-discuss/attachments/20150804/11f53507/attachment-0002.html>
More information about the discuss
mailing list