On 14 October 2014 10:43, Ben Pfaff <b...@nicira.com> wrote: > On Tue, Oct 07, 2014 at 12:23:38AM +1300, Joe Stringer wrote: > > One of the limiting factors on the number of flows that can be supported > > in the datapath is the overhead of assembling flow dump messages in the > > datapath. This patch modifies the flow_dump interface to allow > > revalidators to skip dumping the key, mask and actions from the > > datapath, by making use of the unique identifiers introduced in earlier > > patches. > > > > For each flow dump, the dpif user specifies whether to skip these > > attributes, allowing the common case to only dump a pair of 128-bit ID > > and flow stats. This increases the number of flows that a revalidator > > can handle per second by 50% or more. > > > > Signed-off-by: Joe Stringer <joestrin...@nicira.com> > > Thanks! I think this series is close to being ready to go. > > I see an apparent inconsistency in push_ukey_ops__(): the initial loop > asserts that every operation has a ukey: > for (i = 0; i < n_ops; i++) { > ovs_assert(ops[i].ukey); > opsp[i] = &ops[i].dop; > } > but later code has different cases based on whether a ukey is present. > Unless I misunderstand, this needs to be resolved one way or the other. >
Sorry, this requirement has gone back and forth multiple times. The current iteration should not require a ukey - this is linked to whether we attempt to install ukeys from revalidator threads or not. > > The change to dp_netdev_flow_to_dpif_flow() appears fairly large at > first glance, but ignoring changes in indentation it shrinks a great > deal and I see the following, which makes me wonder whether the > memcpy() to struct assignment change should have been done in an > earlier commit: > > @@ -1461,12 +1470,13 @@ dp_netdev_flow_to_dpif_flow(const struct > dp_netdev_flow *netdev_flow, > > /* Actions */ > actions = dp_netdev_flow_get_actions(netdev_flow); > flow->actions = actions->actions; > flow->actions_len = actions->size; > + } > > - memcpy(&flow->uid, &netdev_flow->uid, sizeof flow->uid); > + flow->uid = netdev_flow->uid; > get_dpif_flow_stats(netdev_flow, &flow->stats); > } > > static int > dpif_netdev_mask_from_nlattrs(const struct nlattr *key, uint32_t key_len, > Good spotting, I'll take a closer look at this when I respin the series. > In dpif_netlink_flow_dump_create(), it took me a moment to realize > that the dump_flags were only for the terse mode. Maybe they could be > called the terse_flags, or just written inline in the call to > odp_uid_to_nlattrs()? > Sure. > > In dpif_netlink_flow_dump_next(), this comment deserves an update: > if (dump->up.terse || datapath_flow.actions) { > /* Common case: the flow includes actions. */ > dpif_netlink_flow_to_dpif_flow(&dpif->dpif, &flows[n_flows++], > &datapath_flow); > maybe to "Common case: the flow includes actions (or we don't want > actions).". > Agreed, I'll update this. > > In the ukey_acquire() comment: > * Returns 0 on success, setting *result to the matching ukey and > returning it > * in a locked state. Otherwise, returns an errno and clears *result. > EBUSY > * indicates that another thread is handling this flow. Other errors an > "Other errors" indicate "an". > * unexpected condition creating a new ukey. > > There might be an optimization in push_ukey_ops__() by comparing > stats->packet to op->ukey->stats.n_packets without taking the lock; if > they're the same, then (in the absence of NetFlow) I think we could > skip taking the lock entirely. I don't know whether this would yield > any measurable improvement, and if not it is probably not worth it. > I suppose this would provide a benefit if the typical case has no packets to attribute in this function. However, when pushed to the limits of datapath flow support, revalidate() and revalidate_ukey() will tend not to push stats, instead deferring the push until push_ukey_ops__(). By that logic, I wouldn't expect much improvement. > As long as the apparent inconsistency in push_ukey_ops__() that I > reported above gets cleared up one way or another, you can have my: > Acked-by: Ben Pfaff <b...@nicira.com> Thanks for the review! _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev