This was gain on behalf of David Wilder dwil...@linux.vnet.ibm.com
On 09/29/2015 09:41 PM, Pradeep Satyanarayana wrote:
skb_get_hash() returns a 0 (invalid hash) for arp packets resulting in same ids_index for every arp packet. This results in a single ovs-vswitchd handler thread processing every arp packet severely impacting the average latency of arps. This change spreads the work evenly between all the handler threads. --- datapath/vport.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/datapath/vport.c b/datapath/vport.c index 024491f..20d20fa 100644 --- a/datapath/vport.c +++ b/datapath/vport.c @@ -465,6 +465,12 @@ u32 ovs_vport_find_upcall_portid(const struct vport *vport, struct sk_buff *skb) if (ids->n_ids == 1 && ids->ids[0] == 0) return 0; + /* skb_get_hash() is not supporting ETH_P_ARP packets returning a 0 + * (invalid hash) for every ARP. + */ + if (skb->protocol == ntohs(ETH_P_ARP)) + return ids->ids[vport->port_no%ids->n_ids]; + hash = skb_get_hash(skb); return ids->ids[hash - ids->n_ids * reciprocal_divide(hash, ids->rn_ids)]; } _______________________________________________ discuss mailing list discuss@openvswitch.org http://openvswitch.org/mailman/listinfo/discuss
_______________________________________________ discuss mailing list discuss@openvswitch.org http://openvswitch.org/mailman/listinfo/discuss