From patchwork Sat Jan 30 03:14:34 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andy Zhou X-Patchwork-Id: 575911 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from archives.nicira.com (unknown [IPv6:2600:3c00::f03c:91ff:fe6e:bdf7]) by ozlabs.org (Postfix) with ESMTP id 3644A140BF7 for ; Sat, 30 Jan 2016 14:13:05 +1100 (AEDT) Received: from archives.nicira.com (localhost [127.0.0.1]) by archives.nicira.com (Postfix) with ESMTP id 162CF10D72; Fri, 29 Jan 2016 19:13:03 -0800 (PST) X-Original-To: dev@openvswitch.com Delivered-To: dev@openvswitch.com Received: from mail-pa0-f65.google.com (mail-pa0-f65.google.com [209.85.220.65]) by archives.nicira.com (Postfix) with ESMTPS id 7904310D3D for ; Fri, 29 Jan 2016 19:13:02 -0800 (PST) Received: by mail-pa0-f65.google.com with SMTP id y7so474483paa.3 for ; Fri, 29 Jan 2016 19:13:02 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=Rg8xdDTajHAAlNedQ27nJWgyA64fFCmgVOpLqGDQnFM=; b=Pz1Vw2uu6H7koj2oT9Mh3gAl+Vx4yOu95DkxEQbSVgKuN/vDUp0h9gGgZn5imgqrgd bBdkU8KwYODnMzRLeO6iQFPcAIz+JrcjhQjMbaqiJ/x8RfNIR7hIdAwfEY5chH/eyLOC Atg5bk3mYfi9ZiDGFYzVjrLj0pZoacbRJ2+MbT4ChWuuXDnLa26eAsenJdLpSPf+W1av WV4L3TQaS+JgAbFmowUcaq+RdHZ8cYmPOitfcMzEB6skHHSdy6XHskjsSea0zee7Lihh juF+rST5hdxYwRsw0Dl71S5x9CpB11P2tmbjA0IXBKsgn/l/Ld1AdovBEknV5ejDfBIT 244Q== X-Gm-Message-State: AG10YOTr2PO7TtoSTXNRxCFS/bW6/YOlI2FBzmQeignzXdUoq3/ybbt8anN+SrwSUc7BcA== X-Received: by 10.66.184.15 with SMTP id eq15mr18708031pac.42.1454123581919; Fri, 29 Jan 2016 19:13:01 -0800 (PST) Received: from prmh-nsx-perf-server121.eng.vmware.com ([208.91.1.34]) by smtp.gmail.com with ESMTPSA id q136sm26496095pfq.66.2016.01.29.19.13.00 (version=TLSv1/SSLv3 cipher=OTHER); Fri, 29 Jan 2016 19:13:00 -0800 (PST) From: Andy Zhou To: dev@openvswitch.com Date: Fri, 29 Jan 2016 19:14:34 -0800 Message-Id: <1454123675-13245-1-git-send-email-azhou@ovn.org> X-Mailer: git-send-email 1.9.1 Subject: [ovs-dev] [PATCH 1/2] dpif-netdev: Load packet pointer only once in emc_processing() X-BeenThere: dev@openvswitch.org X-Mailman-Version: 2.1.16 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: dev-bounces@openvswitch.org Sender: "dev" For the machines I have access to, Reloading the same pointer from memory seems to inhibit complier optimization somewhat. In emc_processing(), using a single packet pointer, instead reloading it from memory with packets[i], improves performance by 0.3 Mpps (tested with 10G NIC pushing 64 byte packets, with the base line of 12.2 Mpps). Besides improving performance, this patch should also improves code readability. Signed-off-by: Andy Zhou --- lib/dpif-netdev.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c index 833174a..205176a 100644 --- a/lib/dpif-netdev.c +++ b/lib/dpif-netdev.c @@ -3302,9 +3302,10 @@ emc_processing(struct dp_netdev_pmd_thread *pmd, struct dp_packet **packets, for (i = 0; i < cnt; i++) { struct dp_netdev_flow *flow; + struct dp_packet *packet = packets[i]; - if (OVS_UNLIKELY(dp_packet_size(packets[i]) < ETH_HEADER_LEN)) { - dp_packet_delete(packets[i]); + if (OVS_UNLIKELY(dp_packet_size(packet) < ETH_HEADER_LEN)) { + dp_packet_delete(packet); n_dropped++; continue; } @@ -3314,18 +3315,18 @@ emc_processing(struct dp_netdev_pmd_thread *pmd, struct dp_packet **packets, OVS_PREFETCH(dp_packet_data(packets[i+1])); } - miniflow_extract(packets[i], &key.mf); + miniflow_extract(packet, &key.mf); key.len = 0; /* Not computed yet. */ - key.hash = dpif_netdev_packet_get_rss_hash(packets[i], &key.mf); + key.hash = dpif_netdev_packet_get_rss_hash(packet, &key.mf); flow = emc_lookup(flow_cache, &key); if (OVS_LIKELY(flow)) { - dp_netdev_queue_batches(packets[i], flow, &key.mf, batches, + dp_netdev_queue_batches(packet, flow, &key.mf, batches, n_batches); } else { /* Exact match cache missed. Group missed packets together at * the beginning of the 'packets' array. */ - packets[n_missed] = packets[i]; + packets[n_missed] = packet; keys[n_missed++] = key; } }