[ovs-discuss] Slow ovsdb-server performance issue with lots of tunnel ports on switch with embedded SoC.

张东亚 zhangdy at centecnetworks.com
Wed Sep 24 07:59:03 UTC 2014


Hi all,

We have used ovsdb-server/openvswitch for a long time on our switch
which use an freescale SoC p1010 with cpu core frequency set to 533Mhz,
recently we want to add 1000 GRE tunnel ports support to our switch,
however, we have observed significant slow down when we trying to
configure more that 500 tunnels.

After some debugging and profiling, we found out it's may be related to
vswitchd schema design, because it is designed like this:

/"Bridge": {//
//"columns": {//
//"name": {//
//"type": "string",//
//"mutable": false},//
//"datapath_type": {//
//"type": "string"},//
//"datapath_id": {//
//"type": {"key": "string", "min": 0, "max": 1},//
//"ephemeral": true},//
//"stp_enable": {//
//"type": "boolean"},//
//"ports": {//
//"type": {"key": {"type": "uuid",//
//"refTable": "Port"},//
//"min": 0, "max": "unlimited"}},//
//# the 'port' column will be stored as a set object by ovsdb//.//
/
We have found that ovsdb will notify the following json update to
vswitchd & ovs-vsctl(since it's also monitoring the ovsdb database) when
we trying to create No 501 tunnel ports after we have 500 tunnels created:

/json string:
{"method":"update","id":null,"params":[null,{"Bridge":{"a2109f5a-79c6-4649-b896-904e269ec3a8"://
//
//{"old":{"ports":["set",[["uuid","0152ceff-aaa1-499f-bf4f-1ef27985c4b5"],
... ### other 499 uuid of ports.//
//
//{"new":{"ports":["set",[["uuid","0152ceff-aaa1-499f-bf4f-1ef27985c4b5"],
... ### other 499 + 1 uuid of ports, the 1 is the newly created GRE
tunnel ports./

It seems for a column typed 'set' in an ovsdb row, ovsdb can only
support replacing its value instead of only notify the changed, this may
be the operation unit of ovsdb server is an row or other design concerns
we do not know currently.

However, this operation cause significant delay on the the aforemethiond
embedded system, it seems to be related to json serialization and
sending the buffer to ovs-vswitchd/ovs-vsctl through socket.

To solve this issue, we are planning to change the schema to let port
reference to bridge instead of let bridge holding all ports, in that
case, there is not set updated in the bridge row.

Before we started, we want to here the advice from the community, may be
there are better way to solve this issues, thanks.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://openvswitch.org/pipermail/ovs-discuss/attachments/20140924/6c96beb6/attachment-0002.html>


More information about the discuss mailing list