I must have mixed my results up here somewhere; this patch essentially doesn't change anything.
Please disregard---I'll send a replacement patch. On 8 November 2013 09:41, Joe Stringer <[email protected]> wrote: > When dealing with a large number of ports, bundle_run() and > bundle_wait() add significant unnecessary processing to the main run > loop, even when not in use. This patch skips such execution if it is > unneeded, reducing CPU usage from about 25% to about 20% in a test > environment of 5000 internal ports and 50 tunnel ports running bfd. > > Signed-off-by: Joe Stringer <[email protected]> > --- > ofproto/ofproto-dpif.c | 18 ++++++++++++------ > 1 file changed, 12 insertions(+), 6 deletions(-) > > diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c > index 3717365..189b185 100644 > --- a/ofproto/ofproto-dpif.c > +++ b/ofproto/ofproto-dpif.c > @@ -1470,7 +1470,6 @@ static int > run(struct ofproto *ofproto_) > { > struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_); > - struct ofbundle *bundle; > int error; > > if (mbridge_need_revalidate(ofproto->mbridge)) { > @@ -1510,8 +1509,12 @@ run(struct ofproto *ofproto_) > port_run(ofport); > } > } > - HMAP_FOR_EACH (bundle, hmap_node, &ofproto->bundles) { > - bundle_run(bundle); > + if (hmap_count(&ofproto->bundles)) { > + struct ofbundle *bundle; > + > + HMAP_FOR_EACH (bundle, hmap_node, &ofproto->bundles) { > + bundle_run(bundle); > + } > } > > stp_run(ofproto); > @@ -1551,7 +1554,6 @@ static void > wait(struct ofproto *ofproto_) > { > struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_); > - struct ofbundle *bundle; > > if (ofproto_get_flow_restore_wait()) { > return; > @@ -1563,8 +1565,12 @@ wait(struct ofproto *ofproto_) > if (ofproto->ipfix) { > dpif_ipfix_wait(ofproto->ipfix); > } > - HMAP_FOR_EACH (bundle, hmap_node, &ofproto->bundles) { > - bundle_wait(bundle); > + if (hmap_count(&ofproto->bundles)) { > + struct ofbundle *bundle; > + > + HMAP_FOR_EACH (bundle, hmap_node, &ofproto->bundles) { > + bundle_wait(bundle); > + } > } > if (ofproto->netflow) { > netflow_wait(ofproto->netflow); > -- > 1.7.9.5 > _______________________________________________ dev mailing list [email protected] http://openvswitch.org/mailman/listinfo/dev
