From patchwork Fri Dec 1 15:44:27 2017
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
X-Patchwork-Submitter: Ilya Maximets
X-Patchwork-Id: 843552
X-Patchwork-Delegate: ian.stokes@intel.com
Return-Path:
X-Original-To: incoming@patchwork.ozlabs.org
Delivered-To: patchwork-incoming@bilbo.ozlabs.org
Authentication-Results: ozlabs.org;
spf=pass (mailfrom) smtp.mailfrom=openvswitch.org
(client-ip=140.211.169.12; helo=mail.linuxfoundation.org;
envelope-from=ovs-dev-bounces@openvswitch.org;
receiver=)
Authentication-Results: ozlabs.org;
dkim=fail reason="signature verification failed" (1024-bit key;
unprotected) header.d=samsung.com header.i=@samsung.com
header.b="OeDH4JLb"; dkim-atps=neutral
Received: from mail.linuxfoundation.org (mail.linuxfoundation.org
[140.211.169.12])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256
bits)) (No client certificate requested)
by ozlabs.org (Postfix) with ESMTPS id 3ypJWs5B5gz9ryk
for ;
Sat, 2 Dec 2017 02:45:45 +1100 (AEDT)
Received: from mail.linux-foundation.org (localhost [127.0.0.1])
by mail.linuxfoundation.org (Postfix) with ESMTP id 09333C14;
Fri, 1 Dec 2017 15:44:52 +0000 (UTC)
X-Original-To: ovs-dev@openvswitch.org
Delivered-To: ovs-dev@mail.linuxfoundation.org
Received: from smtp1.linuxfoundation.org (smtp1.linux-foundation.org
[172.17.192.35])
by mail.linuxfoundation.org (Postfix) with ESMTPS id F0B9ABF2
for ; Fri, 1 Dec 2017 15:44:50 +0000 (UTC)
X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6
Received: from mailout2.w1.samsung.com (mailout2.w1.samsung.com
[210.118.77.12])
by smtp1.linuxfoundation.org (Postfix) with ESMTPS id 140A74C5
for ; Fri, 1 Dec 2017 15:44:48 +0000 (UTC)
Received: from eucas1p1.samsung.com (unknown [182.198.249.206])
by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id
20171201154445euoutp02273f7f4c756e0c116140d6575cb0c14a~8Nh-k8awg3158431584euoutp02k;
Fri, 1 Dec 2017 15:44:45 +0000 (GMT)
DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com
20171201154445euoutp02273f7f4c756e0c116140d6575cb0c14a~8Nh-k8awg3158431584euoutp02k
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com;
s=mail20170921; t=1512143085;
bh=090YdnurHgCx7WWVWnPzKOAUXDQGEx8fXhgLrv1ve0w=;
h=From:To:Cc:Subject:Date:In-reply-to:References:From;
b=OeDH4JLboTaMGuK4fMSBRsuVuygVSWgUGP2eMduRBJx6Mcn4Bw5BXuQ5jYwgOdjYx
htMEsQZt/i2xIDKV3/TD15A1bULj3W4NvTq+wvo1/xk5YY9qwMhTn037HhgoYYdkWA
uy90qbmk4xgCvGGQBcDuwsIEZrGyB3B/hOgpryrw=
Received: from eusmges5.samsung.com (unknown [203.254.199.245]) by
eucas1p2.samsung.com (KnoxPortal) with ESMTP id
20171201154443eucas1p278c09dc1dbe2cf10dbb873214d464fd9~8Nh_IPJQb1819718197eucas1p28;
Fri, 1 Dec 2017 15:44:43 +0000 (GMT)
Received: from eucas1p1.samsung.com ( [182.198.249.206]) by
eusmges5.samsung.com (EUCPMTA) with SMTP id 48.FD.12743.BE8712A5;
Fri, 1 Dec 2017 15:44:43 +0000 (GMT)
Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by
eucas1p2.samsung.com (KnoxPortal) with ESMTP id
20171201154443eucas1p2d360bc11b0554074efe3c0dd0e0dd771~8Nh9YAmQ21816418164eucas1p23;
Fri, 1 Dec 2017 15:44:43 +0000 (GMT)
X-AuditID: cbfec7f5-f79d06d0000031c7-47-5a2178eb54c3
Received: from eusync3.samsung.com ( [203.254.199.213]) by
eusmgms1.samsung.com (EUCPMTA) with SMTP id 1C.72.18832.BE8712A5;
Fri, 1 Dec 2017 15:44:43 +0000 (GMT)
Received: from imaximets.rnd.samsung.ru ([106.109.129.180]) by
eusync3.samsung.com (Oracle Communications Messaging Server
7.0.5.31.0 64bit (built May 5 2014)) with ESMTPA id
<0P0A00BWSH2B5A50@eusync3.samsung.com>;
Fri, 01 Dec 2017 15:44:43 +0000 (GMT)
From: Ilya Maximets
To: ovs-dev@openvswitch.org, Bhanuprakash Bodireddy
Date: Fri, 01 Dec 2017 18:44:27 +0300
Message-id: <1512143073-22347-2-git-send-email-i.maximets@samsung.com>
X-Mailer: git-send-email 2.7.4
In-reply-to: <1512143073-22347-1-git-send-email-i.maximets@samsung.com>
X-Brightmail-Tracker:
H4sIAAAAAAAAA+NgFjrFIsWRmVeSWpSXmKPExsWy7djPc7qvKxSjDGY0aVms/sVpsfOZskVL
/0xmiztXfrJZTPt8m93iSvtPdouND8+yWhz5fprRYu2hD+wWcz89Z3Tg8vj19Sqbx+I9L5k8
nt38z+jxfh+Q27dlFWMAaxSXTUpqTmZZapG+XQJXxrV/m9kKNuhUdH6xaGDsk+9i5OSQEDCR
OLHmOiOELSZx4d56ti5GLg4hgaWMEu/vbmEHSQgJfGaUWHzTFqbhVtsUJoiiZYwSJ39uZoQo
amaS2P1UD8RmE9CROLX6CFhcRCBC4sH3WewgDcwCp5kk3mxaxNzFyMEhLBAtsemeNkgNi4Cq
xIvpD8DqeQXcJPqfPWCDWCYncfNcJ1g5p4C7xJHf4iBjJAQWsEmsP/GbCaLGRWLusb0sELaw
xKvjEEdLCMhIdHYcZIJoaGaUaFh1iRHCmcAo8aV5OVS3vcSpm1fBbGYBPolJ26aDbZMQ4JXo
aBOCKPGQ6Hk5gxXCdpToaoeYIyQwi1Hi9MWpbBMYpRcwMqxiFEktLc5NTy021StOzC0uzUvX
S87P3cQIjOHT/45/3cG49JjVIUYBDkYlHl6GcMUoIdbEsuLK3EOMEhzMSiK8WSVAId6UxMqq
1KL8+KLSnNTiQ4zSHCxK4ry2UW2RQgLpiSWp2ampBalFMFkmDk6pBsbm96lsM2MnfViya15K
t9ejp6nnYgWNDRTqVoleFNrOb3jfc0moidaZA7suP9AXubl0wt8FBrY6jHy32HltBeuZCi46
b4l1jo++/t9T4p3ZsZ37Vy7b3LPA56XV5xl3JQ4J3dqrwPg/5p9/TPOfOYG98ovWBFYl7X3P
fGV1gMglhjRl7nPT0wOUWIozEg21mIuKEwGe9bPV3QIAAA==
X-Brightmail-Tracker:
H4sIAAAAAAAAA+NgFlrALMWRmVeSWpSXmKPExsVy+t/xq7qvKxSjDE6+Z7NY/YvTYuczZYuW
/pnMFneu/GSzmPb5NrvFlfaf7BYbH55ltTjy/TSjxdpDH9gt5n56zujA5fHr61U2j8V7XjJ5
PLv5n9Hj/T4gt2/LKsYA1igum5TUnMyy1CJ9uwSujGv/NrMVbNCp6Pxi0cDYJ9/FyMkhIWAi
cattChOELSZx4d56ti5GLg4hgSWMEg9Xt7JAOK1MEhOb/rKBVLEJ6EicWn2EEcQWEYiQaJmz
nhGkiFngLJNE6+njYEXCAtES9988ZQexWQRUJV5MfwDWwCvgJtH/7AEbxDo5iZvnOpm7GDk4
OAXcJY78FgcJCwGV7N+9g3ECI+8CRoZVjCKppcW56bnFhnrFibnFpXnpesn5uZsYgeG27djP
zTsYL20MPsQowMGoxMO7IkQxSog1say4MvcQowQHs5IIb1YJUIg3JbGyKrUoP76oNCe1+BCj
NAeLkjhv757VkUIC6YklqdmpqQWpRTBZJg5OqQbG/iY1eR8dzwKxwpepUYlH5vzmLYg7GC1V
fzFH74XPYgnBmPtpv2LiPs/J+tTm8IS50MEnXeyaarVXQs7hyP4vHPemqqi/a9ik9ii18lyf
Vncwz5RtMy0zmkr1TzzSPWxYLzD9Ae/24/l57RpqlzKK18gbl73vZvzG8zL0SbyzGbfH4mmx
TUosxRmJhlrMRcWJAKZDr48zAgAA
X-CMS-MailID: 20171201154443eucas1p2d360bc11b0554074efe3c0dd0e0dd771
X-Msg-Generator: CA
CMS-TYPE: 201P
X-CMS-RootMailID: 20171201154443eucas1p2d360bc11b0554074efe3c0dd0e0dd771
X-RootMTR: 20171201154443eucas1p2d360bc11b0554074efe3c0dd0e0dd771
References: <1512143073-22347-1-git-send-email-i.maximets@samsung.com>
X-Spam-Status: No, score=-7.0 required=5.0 tests=BAYES_00,DKIM_SIGNED,
DKIM_VALID, DKIM_VALID_AU, RCVD_IN_DNSWL_HI,
T_RP_MATCHES_RCVD autolearn=ham version=3.3.1
X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on
smtp1.linux-foundation.org
Cc: Heetae Ahn ,
Ilya Maximets
Subject: [ovs-dev] [PATCH v6 1/7] dpif-netdev: Refactor PMD thread structure
for further extension.
X-BeenThere: ovs-dev@openvswitch.org
X-Mailman-Version: 2.1.12
Precedence: list
List-Id:
List-Unsubscribe: ,
List-Archive:
List-Post:
List-Help:
List-Subscribe: ,
MIME-Version: 1.0
Sender: ovs-dev-bounces@openvswitch.org
Errors-To: ovs-dev-bounces@openvswitch.org
This is preparation for 'struct dp_netdev_pmd_thread' modification
in upcoming commits. Needed to avoid reordering and regrouping while
replacing old and adding new members.
Signed-off-by: Bhanuprakash Bodireddy
Co-authored-by: Bhanuprakash Bodireddy
Signed-off-by: Ilya Maximets
---
lib/dpif-netdev.c | 65 ++++++++++++++++++++++++++++++++++---------------------
1 file changed, 40 insertions(+), 25 deletions(-)
diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c
index 0a62630..7a7c6ce 100644
--- a/lib/dpif-netdev.c
+++ b/lib/dpif-netdev.c
@@ -549,29 +549,22 @@ struct tx_port {
struct dp_netdev_pmd_thread {
PADDED_MEMBERS_CACHELINE_MARKER(CACHE_LINE_SIZE, cacheline0,
struct dp_netdev *dp;
- struct cmap_node node; /* In 'dp->poll_threads'. */
- pthread_cond_t cond; /* For synchronizing pmd thread
- reload. */
+ struct cmap_node node; /* In 'dp->poll_threads'. */
+ pthread_cond_t cond; /* For synchronizing pmd thread reload. */
);
PADDED_MEMBERS_CACHELINE_MARKER(CACHE_LINE_SIZE, cacheline1,
struct ovs_mutex cond_mutex; /* Mutex for condition variable. */
pthread_t thread;
- unsigned core_id; /* CPU core id of this pmd thread. */
- int numa_id; /* numa node id of this pmd thread. */
);
/* Per thread exact-match cache. Note, the instance for cpu core
* NON_PMD_CORE_ID can be accessed by multiple threads, and thusly
* need to be protected by 'non_pmd_mutex'. Every other instance
* will only be accessed by its own pmd thread. */
- OVS_ALIGNED_VAR(CACHE_LINE_SIZE) struct emc_cache flow_cache;
- struct ovs_refcount ref_cnt; /* Every reference must be refcount'ed. */
-
- /* Queue id used by this pmd thread to send packets on all netdevs if
- * XPS disabled for this netdev. All static_tx_qid's are unique and less
- * than 'cmap_count(dp->poll_threads)'. */
- uint32_t static_tx_qid;
+ PADDED_MEMBERS(CACHE_LINE_SIZE,
+ OVS_ALIGNED_VAR(CACHE_LINE_SIZE) struct emc_cache flow_cache;
+ );
/* Flow-Table and classifiers
*
@@ -579,7 +572,10 @@ struct dp_netdev_pmd_thread {
* changes to 'classifiers' must be made while still holding the
* 'flow_mutex'.
*/
- struct ovs_mutex flow_mutex;
+ PADDED_MEMBERS(CACHE_LINE_SIZE,
+ struct ovs_mutex flow_mutex;
+ /* 8 pad bytes. */
+ );
PADDED_MEMBERS(CACHE_LINE_SIZE,
struct cmap flow_table OVS_GUARDED; /* Flow table. */
@@ -596,35 +592,50 @@ struct dp_netdev_pmd_thread {
/* Used to count cycles. See 'cycles_counter_end()'. */
unsigned long long last_cycles;
- struct latch exit_latch; /* For terminating the pmd thread. */
- );
+ /* 8 pad bytes. */
+ );
PADDED_MEMBERS(CACHE_LINE_SIZE,
/* Statistics. */
struct dp_netdev_pmd_stats stats;
+ /* 8 pad bytes. */
+ );
+ PADDED_MEMBERS(CACHE_LINE_SIZE,
+ struct latch exit_latch; /* For terminating the pmd thread. */
struct seq *reload_seq;
uint64_t last_reload_seq;
- atomic_bool reload; /* Do we need to reload ports? */
- bool isolated;
-
+ atomic_bool reload; /* Do we need to reload ports? */
/* Set to true if the pmd thread needs to be reloaded. */
bool need_reload;
- /* 5 pad bytes. */
+ bool isolated;
+
+ struct ovs_refcount ref_cnt; /* Every reference must be refcount'ed. */
+
+ /* Queue id used by this pmd thread to send packets on all netdevs if
+ * XPS disabled for this netdev. All static_tx_qid's are unique and
+ * less than 'cmap_count(dp->poll_threads)'. */
+ uint32_t static_tx_qid;
+
+ unsigned core_id; /* CPU core id of this pmd thread. */
+ int numa_id; /* numa node id of this pmd thread. */
+
+ /* 20 pad bytes. */
);
PADDED_MEMBERS(CACHE_LINE_SIZE,
- struct ovs_mutex port_mutex; /* Mutex for 'poll_list'
- and 'tx_ports'. */
- /* 16 pad bytes. */
+ /* Mutex for 'poll_list' and 'tx_ports'. */
+ struct ovs_mutex port_mutex;
);
+
PADDED_MEMBERS(CACHE_LINE_SIZE,
/* List of rx queues to poll. */
struct hmap poll_list OVS_GUARDED;
- /* Map of 'tx_port's used for transmission. Written by the main
- * thread, read by the pmd thread. */
+ /* Map of 'tx_port's used for transmission.
+ * Written by the main thread, read by the pmd thread. */
struct hmap tx_ports OVS_GUARDED;
);
+
PADDED_MEMBERS(CACHE_LINE_SIZE,
/* These are thread-local copies of 'tx_ports'. One contains only
* tunnel ports (that support push_tunnel/pop_tunnel), the other
@@ -648,9 +659,13 @@ struct dp_netdev_pmd_thread {
* values and subtracts them from 'stats' and 'cycles' before
* reporting to the user */
unsigned long long stats_zero[DP_N_STATS];
- uint64_t cycles_zero[PMD_N_CYCLES];
/* 8 pad bytes. */
);
+
+ PADDED_MEMBERS(CACHE_LINE_SIZE,
+ uint64_t cycles_zero[PMD_N_CYCLES];
+ /* 48 pad bytes. */
+ );
};
/* Interface to netdev-based datapath. */
From patchwork Fri Dec 1 15:44:28 2017
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
X-Patchwork-Submitter: Ilya Maximets
X-Patchwork-Id: 843553
X-Patchwork-Delegate: ian.stokes@intel.com
Return-Path:
X-Original-To: incoming@patchwork.ozlabs.org
Delivered-To: patchwork-incoming@bilbo.ozlabs.org
Authentication-Results: ozlabs.org;
spf=pass (mailfrom) smtp.mailfrom=openvswitch.org
(client-ip=140.211.169.12; helo=mail.linuxfoundation.org;
envelope-from=ovs-dev-bounces@openvswitch.org;
receiver=)
Authentication-Results: ozlabs.org;
dkim=fail reason="signature verification failed" (1024-bit key;
unprotected) header.d=samsung.com header.i=@samsung.com
header.b="o9RbaOMg"; dkim-atps=neutral
Received: from mail.linuxfoundation.org (mail.linuxfoundation.org
[140.211.169.12])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256
bits)) (No client certificate requested)
by ozlabs.org (Postfix) with ESMTPS id 3ypJXq267yz9rvt
for ;
Sat, 2 Dec 2017 02:46:35 +1100 (AEDT)
Received: from mail.linux-foundation.org (localhost [127.0.0.1])
by mail.linuxfoundation.org (Postfix) with ESMTP id E3C2AC48;
Fri, 1 Dec 2017 15:44:52 +0000 (UTC)
X-Original-To: ovs-dev@openvswitch.org
Delivered-To: ovs-dev@mail.linuxfoundation.org
Received: from smtp1.linuxfoundation.org (smtp1.linux-foundation.org
[172.17.192.35])
by mail.linuxfoundation.org (Postfix) with ESMTPS id D67EB727
for ; Fri, 1 Dec 2017 15:44:51 +0000 (UTC)
X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6
Received: from mailout1.w1.samsung.com (mailout1.w1.samsung.com
[210.118.77.11])
by smtp1.linuxfoundation.org (Postfix) with ESMTPS id 66E8347E
for ; Fri, 1 Dec 2017 15:44:50 +0000 (UTC)
Received: from eucas1p2.samsung.com (unknown [182.198.249.207])
by mailout1.w1.samsung.com (KnoxPortal) with ESMTP id
20171201154448euoutp014b10fcdb440529e80dd9ab236b5bf854~8NiCLjiij1298612986euoutp01e;
Fri, 1 Dec 2017 15:44:48 +0000 (GMT)
DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com
20171201154448euoutp014b10fcdb440529e80dd9ab236b5bf854~8NiCLjiij1298612986euoutp01e
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com;
s=mail20170921; t=1512143088;
bh=hQ/tVAFA9xw2A2fTJ6qq7Pv5crFDewh0fB5zITlEp2k=;
h=From:To:Cc:Subject:Date:In-reply-to:References:From;
b=o9RbaOMgVu2IpTF7lV2yWO1Zg7XpF/5kITa8pANHkkoOEOqprcxoX3bj6VmKOKXXz
WV5tBqrmreFTLbfHgbuILIkUN21PQbj2FERk6dSGyk8rX5C9dKtB70SYzyxn97qlAC
wZd83dvQCcDoPnsh4sLmgkKYBpD3+lXk/lvSJBUE=
Received: from eusmges4.samsung.com (unknown [203.254.199.244]) by
eucas1p2.samsung.com (KnoxPortal) with ESMTP id
20171201154447eucas1p27358d0d6d7c2d9a50626fce0affb40fc~8NiBExU-X1816518165eucas1p2C;
Fri, 1 Dec 2017 15:44:47 +0000 (GMT)
Received: from eucas1p1.samsung.com ( [182.198.249.206]) by
eusmges4.samsung.com (EUCPMTA) with SMTP id 99.30.30163.EE8712A5;
Fri, 1 Dec 2017 15:44:46 +0000 (GMT)
Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by
eucas1p2.samsung.com (KnoxPortal) with ESMTP id
20171201154446eucas1p2625b54269242f8e4f11a96cda7a1838c~8NiAZn5Nv1820118201eucas1p28;
Fri, 1 Dec 2017 15:44:46 +0000 (GMT)
X-AuditID: cbfec7f4-f790c6d0000075d3-c8-5a2178ee2f3d
Received: from eusync3.samsung.com ( [203.254.199.213]) by
eusmgms1.samsung.com (EUCPMTA) with SMTP id AD.72.18832.EE8712A5;
Fri, 1 Dec 2017 15:44:46 +0000 (GMT)
Received: from imaximets.rnd.samsung.ru ([106.109.129.180]) by
eusync3.samsung.com (Oracle Communications Messaging Server
7.0.5.31.0 64bit (built May 5 2014)) with ESMTPA id
<0P0A00BWSH2B5A50@eusync3.samsung.com>;
Fri, 01 Dec 2017 15:44:46 +0000 (GMT)
From: Ilya Maximets
To: ovs-dev@openvswitch.org, Bhanuprakash Bodireddy
Date: Fri, 01 Dec 2017 18:44:28 +0300
Message-id: <1512143073-22347-3-git-send-email-i.maximets@samsung.com>
X-Mailer: git-send-email 2.7.4
In-reply-to: <1512143073-22347-1-git-send-email-i.maximets@samsung.com>
X-Brightmail-Tracker:
H4sIAAAAAAAAA+NgFjrHIsWRmVeSWpSXmKPExsWy7djPc7rvKhSjDE4vN7ZY/YvTYuczZYuW
/pnMFneu/GSzmPb5NrvFlfaf7BYbH55ltTjy/TSjxdpDH9gt5n56zujA5fHr61U2j8V7XjJ5
PLv5n9Hj/T4gt2/LKsYA1igum5TUnMyy1CJ9uwSujIUzFzIWPJzJWDFnagN7A+PSnC5GTg4J
AROJmW0dzBC2mMSFe+vZuhi5OIQEljJK/D3zignC+cwo8fvxNDaYjr+PLrJDJJYxSvxrO8YM
4TQzSWy6NIkRpIpNQEfi1OojYLaIQITEg++zwDqYBU4zSbzZtAhsobBAgMTiJR0sIDaLgKrE
1YtbwOK8Am4St9Y+YYJYJydx81wnUJyDg1PAXeLIb3GQORICK9gk3jYuhzrJReLFqZvsELaw
xKvjW6BsGYnOjoNMEA3NjBINqy4xQjgTGCW+NC+H2mAvcermVTCbWYBPYtK26WDbJAR4JTra
hCBKPCRmfl3OAhF2lDjQIQLx8SxGiTl/vrFNYJRewMiwilEktbQ4Nz212ESvODG3uDQvXS85
P3cTIzCWT/87/mUH4+JjVocYBTgYlXh4GcIVo4RYE8uKK3MPMUpwMCuJ8GaVAIV4UxIrq1KL
8uOLSnNSiw8xSnOwKInz2ka1RQoJpCeWpGanphakFsFkmTg4pRoYfT3nqartfXNQ/ufJ/8Hf
6zf6ix3asPzeiQnlVo1/Hj67ES/XnJyuENjDZ7fsrK99sduaYMvfvyct4Ki5bSF/YPEOoR2i
dmttOzbG5k6e03OBi3PzBD6xxuuPP65Tutq6QvVJVU97vBZXbfW8PRf5dspFNb3+cT9DuKkt
Yr9KxOzEs/OYDQROKbEUZyQaajEXFScCAPKSDF3hAgAA
X-Brightmail-Tracker:
H4sIAAAAAAAAA+NgFlrELMWRmVeSWpSXmKPExsVy+t/xq7rvKhSjDOb1iFms/sVpsfOZskVL
/0xmiztXfrJZTPt8m93iSvtPdouND8+yWhz5fprRYu2hD+wWcz89Z3Tg8vj19Sqbx+I9L5k8
nt38z+jxfh+Q27dlFWMAaxSXTUpqTmZZapG+XQJXxsKZCxkLHs5krJgztYG9gXFpThcjJ4eE
gInE30cX2SFsMYkL99azdTFycQgJLGGUuDpvNiOE08okMat1JiNIFZuAjsSp1UfAbBGBCImW
OevBipgFzjJJtJ4+zgaSEBbwk7h79jpYEYuAqsTVi1uYQWxeATeJW2ufMEGsk5O4ea4TKM7B
wSngLnHktzhIWAioZP/uHYwTGHkXMDKsYhRJLS3OTc8tNtQrTswtLs1L10vOz93ECAy5bcd+
bt7BeGlj8CFGAQ5GJR7eFSGKUUKsiWXFlbmHGCU4mJVEeLNKgEK8KYmVValF+fFFpTmpxYcY
pTlYlMR5e/esjhQSSE8sSc1OTS1ILYLJMnFwSjUwGv3K+JcdnusR/tctZZPm1y1vdIrL3Oy2
38vn3rr2j+/5PfcvPvXdUcKWztbwZOZ886NvlFSPXfix7PjaSJ6XN7bcnTT//pT9/ct1/s3Y
tHSGmYG2VwRXAlPy48+bVbwUDs9d8OTxvuil3GHLc464eaq+tErLvb6bQ+2vcQ/PwSX2O/86
aD383qLEUpyRaKjFXFScCABEVHE5NQIAAA==
X-CMS-MailID: 20171201154446eucas1p2625b54269242f8e4f11a96cda7a1838c
X-Msg-Generator: CA
CMS-TYPE: 201P
X-CMS-RootMailID: 20171201154446eucas1p2625b54269242f8e4f11a96cda7a1838c
X-RootMTR: 20171201154446eucas1p2625b54269242f8e4f11a96cda7a1838c
References: <1512143073-22347-1-git-send-email-i.maximets@samsung.com>
X-Spam-Status: No, score=-7.0 required=5.0 tests=BAYES_00,DKIM_SIGNED,
DKIM_VALID, DKIM_VALID_AU, RCVD_IN_DNSWL_HI,
T_RP_MATCHES_RCVD autolearn=ham version=3.3.1
X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on
smtp1.linux-foundation.org
Cc: Heetae Ahn ,
Ilya Maximets
Subject: [ovs-dev] [PATCH v6 2/7] dpif-netdev: Keep latest measured time for
PMD thread.
X-BeenThere: ovs-dev@openvswitch.org
X-Mailman-Version: 2.1.12
Precedence: list
List-Id:
List-Unsubscribe: ,
List-Archive:
List-Post:
List-Help:
List-Subscribe: ,
MIME-Version: 1.0
Sender: ovs-dev-bounces@openvswitch.org
Errors-To: ovs-dev-bounces@openvswitch.org
In current implementation 'now' variable updated once on each
receive cycle and passed through the whole datapath via function
arguments. It'll be better to keep this variable inside PMD
thread structure to be able to get it at any time. Such solution
will save the stack memory and simplify possible modifications
in current logic.
This patch introduces new structure 'dp_netdev_pmd_thread_ctx'
contained by 'struct dp_netdev_pmd_thread' to store any processing
context of this PMD thread. For now, only time and cycles moved to
that structure. Can be extended in the future.
Signed-off-by: Ilya Maximets
---
lib/dpif-netdev.c | 146 ++++++++++++++++++++++++++++++++----------------------
1 file changed, 88 insertions(+), 58 deletions(-)
diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c
index 7a7c6ce..90beea4 100644
--- a/lib/dpif-netdev.c
+++ b/lib/dpif-netdev.c
@@ -528,6 +528,17 @@ struct tx_port {
struct hmap_node node;
};
+/* A set of properties for the current processing loop that is not directly
+ * associated with the pmd thread itself, but with the packets being
+ * processed or the short-term system configuration (for example, time).
+ * Contained by struct dp_netdev_pmd_thread's 'ctx' member. */
+struct dp_netdev_pmd_thread_ctx {
+ /* Latest measured time. See 'pmd_thread_ctx_time_update()'. */
+ long long now;
+ /* Used to count cycles. See 'cycles_count_end()' */
+ unsigned long long last_cycles;
+};
+
/* PMD: Poll modes drivers. PMD accesses devices via polling to eliminate
* the performance overhead of interrupt processing. Therefore netdev can
* not implement rx-wait for these devices. dpif-netdev needs to poll
@@ -590,10 +601,8 @@ struct dp_netdev_pmd_thread {
/* Cycles counters */
struct dp_netdev_pmd_cycles cycles;
- /* Used to count cycles. See 'cycles_counter_end()'. */
- unsigned long long last_cycles;
-
- /* 8 pad bytes. */
+ /* Current context of the PMD thread. */
+ struct dp_netdev_pmd_thread_ctx ctx;
);
PADDED_MEMBERS(CACHE_LINE_SIZE,
/* Statistics. */
@@ -694,8 +703,7 @@ static void dp_netdev_execute_actions(struct dp_netdev_pmd_thread *pmd,
struct dp_packet_batch *,
bool may_steal, const struct flow *flow,
const struct nlattr *actions,
- size_t actions_len,
- long long now);
+ size_t actions_len);
static void dp_netdev_input(struct dp_netdev_pmd_thread *,
struct dp_packet_batch *, odp_port_t port_no);
static void dp_netdev_recirculate(struct dp_netdev_pmd_thread *,
@@ -755,9 +763,9 @@ static uint64_t
dp_netdev_rxq_get_intrvl_cycles(struct dp_netdev_rxq *rx, unsigned idx);
static void
dpif_netdev_xps_revalidate_pmd(const struct dp_netdev_pmd_thread *pmd,
- long long now, bool purge);
+ bool purge);
static int dpif_netdev_xps_get_tx_qid(const struct dp_netdev_pmd_thread *pmd,
- struct tx_port *tx, long long now);
+ struct tx_port *tx);
static inline bool emc_entry_alive(struct emc_entry *ce);
static void emc_clear_entry(struct emc_entry *ce);
@@ -801,6 +809,28 @@ emc_cache_slow_sweep(struct emc_cache *flow_cache)
flow_cache->sweep_idx = (flow_cache->sweep_idx + 1) & EM_FLOW_HASH_MASK;
}
+/* Updates the time in PMD threads context and should be called in three cases:
+ *
+ * 1. PMD structure initialization:
+ * - dp_netdev_configure_pmd()
+ *
+ * 2. Before processing of the new packet batch:
+ * - dpif_netdev_execute()
+ * - dp_netdev_input__()
+ *
+ * 3. At least once per polling iteration in main polling threads if no
+ * packets received on current iteration:
+ * - dpif_netdev_run()
+ * - pmd_thread_main()
+ *
+ * 'pmd->ctx.now' should be used without update in all other cases if possible.
+ */
+static inline void
+pmd_thread_ctx_time_update(struct dp_netdev_pmd_thread *pmd)
+{
+ pmd->ctx.now = time_msec();
+}
+
/* Returns true if 'dpif' is a netdev or dummy dpif, false otherwise. */
bool
dpif_is_netdev(const struct dpif *dpif)
@@ -2949,6 +2979,9 @@ dpif_netdev_execute(struct dpif *dpif, struct dpif_execute *execute)
ovs_mutex_lock(&dp->non_pmd_mutex);
}
+ /* Update current time in PMD context. */
+ pmd_thread_ctx_time_update(pmd);
+
/* The action processing expects the RSS hash to be valid, because
* it's always initialized at the beginning of datapath processing.
* In this case, though, 'execute->packet' may not have gone through
@@ -2961,8 +2994,7 @@ dpif_netdev_execute(struct dpif *dpif, struct dpif_execute *execute)
dp_packet_batch_init_packet(&pp, execute->packet);
dp_netdev_execute_actions(pmd, &pp, false, execute->flow,
- execute->actions, execute->actions_len,
- time_msec());
+ execute->actions, execute->actions_len);
if (pmd->core_id == NON_PMD_CORE_ID) {
ovs_mutex_unlock(&dp->non_pmd_mutex);
@@ -3183,7 +3215,7 @@ cycles_count_start(struct dp_netdev_pmd_thread *pmd)
OVS_ACQUIRES(&cycles_counter_fake_mutex)
OVS_NO_THREAD_SAFETY_ANALYSIS
{
- pmd->last_cycles = cycles_counter();
+ pmd->ctx.last_cycles = cycles_counter();
}
/* Stop counting cycles and add them to the counter 'type' */
@@ -3193,7 +3225,7 @@ cycles_count_end(struct dp_netdev_pmd_thread *pmd,
OVS_RELEASES(&cycles_counter_fake_mutex)
OVS_NO_THREAD_SAFETY_ANALYSIS
{
- unsigned long long interval = cycles_counter() - pmd->last_cycles;
+ unsigned long long interval = cycles_counter() - pmd->ctx.last_cycles;
non_atomic_ullong_add(&pmd->cycles.n[type], interval);
}
@@ -3206,8 +3238,8 @@ cycles_count_intermediate(struct dp_netdev_pmd_thread *pmd,
OVS_NO_THREAD_SAFETY_ANALYSIS
{
unsigned long long new_cycles = cycles_counter();
- unsigned long long interval = new_cycles - pmd->last_cycles;
- pmd->last_cycles = new_cycles;
+ unsigned long long interval = new_cycles - pmd->ctx.last_cycles;
+ pmd->ctx.last_cycles = new_cycles;
non_atomic_ullong_add(&pmd->cycles.n[type], interval);
if (rxq && (type == PMD_CYCLES_PROCESSING)) {
@@ -3906,7 +3938,8 @@ dpif_netdev_run(struct dpif *dpif)
}
}
cycles_count_end(non_pmd, PMD_CYCLES_IDLE);
- dpif_netdev_xps_revalidate_pmd(non_pmd, time_msec(), false);
+ pmd_thread_ctx_time_update(non_pmd);
+ dpif_netdev_xps_revalidate_pmd(non_pmd, false);
ovs_mutex_unlock(&dp->non_pmd_mutex);
dp_netdev_pmd_unref(non_pmd);
@@ -3957,7 +3990,7 @@ pmd_free_cached_ports(struct dp_netdev_pmd_thread *pmd)
struct tx_port *tx_port_cached;
/* Free all used tx queue ids. */
- dpif_netdev_xps_revalidate_pmd(pmd, 0, true);
+ dpif_netdev_xps_revalidate_pmd(pmd, true);
HMAP_FOR_EACH_POP (tx_port_cached, node, &pmd->tnl_port_cache) {
free(tx_port_cached);
@@ -4099,6 +4132,9 @@ reload:
lc = 0;
coverage_try_clear();
+ /* It's possible that the time was not updated on current
+ * iteration, if there were no received packets. */
+ pmd_thread_ctx_time_update(pmd);
dp_netdev_pmd_try_optimize(pmd, poll_list, poll_cnt);
if (!ovsrcu_try_quiesce()) {
emc_cache_slow_sweep(&pmd->flow_cache);
@@ -4550,8 +4586,9 @@ dp_netdev_configure_pmd(struct dp_netdev_pmd_thread *pmd, struct dp_netdev *dp,
ovs_mutex_init(&pmd->port_mutex);
cmap_init(&pmd->flow_table);
cmap_init(&pmd->classifiers);
- pmd->next_optimization = time_msec() + DPCLS_OPTIMIZATION_INTERVAL;
- pmd->rxq_next_cycle_store = time_msec() + PMD_RXQ_INTERVAL_LEN;
+ pmd_thread_ctx_time_update(pmd);
+ pmd->next_optimization = pmd->ctx.now + DPCLS_OPTIMIZATION_INTERVAL;
+ pmd->rxq_next_cycle_store = pmd->ctx.now + PMD_RXQ_INTERVAL_LEN;
hmap_init(&pmd->poll_list);
hmap_init(&pmd->tx_ports);
hmap_init(&pmd->tnl_port_cache);
@@ -4880,19 +4917,18 @@ packet_batch_per_flow_init(struct packet_batch_per_flow *batch,
static inline void
packet_batch_per_flow_execute(struct packet_batch_per_flow *batch,
- struct dp_netdev_pmd_thread *pmd,
- long long now)
+ struct dp_netdev_pmd_thread *pmd)
{
struct dp_netdev_actions *actions;
struct dp_netdev_flow *flow = batch->flow;
dp_netdev_flow_used(flow, batch->array.count, batch->byte_count,
- batch->tcp_flags, now);
+ batch->tcp_flags, pmd->ctx.now);
actions = dp_netdev_flow_get_actions(flow);
dp_netdev_execute_actions(pmd, &batch->array, true, &flow->flow,
- actions->actions, actions->size, now);
+ actions->actions, actions->size);
}
static inline void
@@ -5000,7 +5036,7 @@ handle_packet_upcall(struct dp_netdev_pmd_thread *pmd,
struct dp_packet *packet,
const struct netdev_flow_key *key,
struct ofpbuf *actions, struct ofpbuf *put_actions,
- int *lost_cnt, long long now)
+ int *lost_cnt)
{
struct ofpbuf *add_actions;
struct dp_packet_batch b;
@@ -5039,7 +5075,7 @@ handle_packet_upcall(struct dp_netdev_pmd_thread *pmd,
* we'll send the packet up twice. */
dp_packet_batch_init_packet(&b, packet);
dp_netdev_execute_actions(pmd, &b, true, &match.flow,
- actions->data, actions->size, now);
+ actions->data, actions->size);
add_actions = put_actions->size ? put_actions : actions;
if (OVS_LIKELY(error != ENOSPC)) {
@@ -5067,9 +5103,9 @@ static inline void
fast_path_processing(struct dp_netdev_pmd_thread *pmd,
struct dp_packet_batch *packets_,
struct netdev_flow_key *keys,
- struct packet_batch_per_flow batches[], size_t *n_batches,
- odp_port_t in_port,
- long long now)
+ struct packet_batch_per_flow batches[],
+ size_t *n_batches,
+ odp_port_t in_port)
{
const size_t cnt = dp_packet_batch_size(packets_);
#if !defined(__CHECKER__) && !defined(_WIN32)
@@ -5126,7 +5162,7 @@ fast_path_processing(struct dp_netdev_pmd_thread *pmd,
miss_cnt++;
handle_packet_upcall(pmd, packet, &keys[i], &actions,
- &put_actions, &lost_cnt, now);
+ &put_actions, &lost_cnt);
}
ofpbuf_uninit(&actions);
@@ -5179,18 +5215,19 @@ dp_netdev_input__(struct dp_netdev_pmd_thread *pmd,
OVS_ALIGNED_VAR(CACHE_LINE_SIZE)
struct netdev_flow_key keys[PKT_ARRAY_SIZE];
struct packet_batch_per_flow batches[PKT_ARRAY_SIZE];
- long long now = time_msec();
size_t n_batches;
odp_port_t in_port;
+ pmd_thread_ctx_time_update(pmd);
+
n_batches = 0;
emc_processing(pmd, packets, keys, batches, &n_batches,
md_is_valid, port_no);
if (!dp_packet_batch_is_empty(packets)) {
/* Get ingress port from first packet's metadata. */
in_port = packets->packets[0]->md.in_port.odp_port;
- fast_path_processing(pmd, packets, keys, batches, &n_batches,
- in_port, now);
+ fast_path_processing(pmd, packets, keys,
+ batches, &n_batches, in_port);
}
/* All the flow batches need to be reset before any call to
@@ -5208,7 +5245,7 @@ dp_netdev_input__(struct dp_netdev_pmd_thread *pmd,
}
for (i = 0; i < n_batches; i++) {
- packet_batch_per_flow_execute(&batches[i], pmd, now);
+ packet_batch_per_flow_execute(&batches[i], pmd);
}
}
@@ -5229,7 +5266,6 @@ dp_netdev_recirculate(struct dp_netdev_pmd_thread *pmd,
struct dp_netdev_execute_aux {
struct dp_netdev_pmd_thread *pmd;
- long long now;
const struct flow *flow;
};
@@ -5253,7 +5289,7 @@ dpif_netdev_register_upcall_cb(struct dpif *dpif, upcall_callback *cb,
static void
dpif_netdev_xps_revalidate_pmd(const struct dp_netdev_pmd_thread *pmd,
- long long now, bool purge)
+ bool purge)
{
struct tx_port *tx;
struct dp_netdev_port *port;
@@ -5263,7 +5299,7 @@ dpif_netdev_xps_revalidate_pmd(const struct dp_netdev_pmd_thread *pmd,
if (!tx->port->dynamic_txqs) {
continue;
}
- interval = now - tx->last_used;
+ interval = pmd->ctx.now - tx->last_used;
if (tx->qid >= 0 && (purge || interval >= XPS_TIMEOUT_MS)) {
port = tx->port;
ovs_mutex_lock(&port->txq_used_mutex);
@@ -5276,18 +5312,14 @@ dpif_netdev_xps_revalidate_pmd(const struct dp_netdev_pmd_thread *pmd,
static int
dpif_netdev_xps_get_tx_qid(const struct dp_netdev_pmd_thread *pmd,
- struct tx_port *tx, long long now)
+ struct tx_port *tx)
{
struct dp_netdev_port *port;
long long interval;
int i, min_cnt, min_qid;
- if (OVS_UNLIKELY(!now)) {
- now = time_msec();
- }
-
- interval = now - tx->last_used;
- tx->last_used = now;
+ interval = pmd->ctx.now - tx->last_used;
+ tx->last_used = pmd->ctx.now;
if (OVS_LIKELY(tx->qid >= 0 && interval < XPS_TIMEOUT_MS)) {
return tx->qid;
@@ -5315,7 +5347,7 @@ dpif_netdev_xps_get_tx_qid(const struct dp_netdev_pmd_thread *pmd,
ovs_mutex_unlock(&port->txq_used_mutex);
- dpif_netdev_xps_revalidate_pmd(pmd, now, false);
+ dpif_netdev_xps_revalidate_pmd(pmd, false);
VLOG_DBG("Core %d: New TX queue ID %d for port \'%s\'.",
pmd->core_id, tx->qid, netdev_get_name(tx->port->netdev));
@@ -5366,7 +5398,7 @@ dp_execute_userspace_action(struct dp_netdev_pmd_thread *pmd,
struct dp_packet *packet, bool may_steal,
struct flow *flow, ovs_u128 *ufid,
struct ofpbuf *actions,
- const struct nlattr *userdata, long long now)
+ const struct nlattr *userdata)
{
struct dp_packet_batch b;
int error;
@@ -5379,7 +5411,7 @@ dp_execute_userspace_action(struct dp_netdev_pmd_thread *pmd,
if (!error || error == ENOSPC) {
dp_packet_batch_init_packet(&b, packet);
dp_netdev_execute_actions(pmd, &b, may_steal, flow,
- actions->data, actions->size, now);
+ actions->data, actions->size);
} else if (may_steal) {
dp_packet_delete(packet);
}
@@ -5395,7 +5427,6 @@ dp_execute_cb(void *aux_, struct dp_packet_batch *packets_,
struct dp_netdev_pmd_thread *pmd = aux->pmd;
struct dp_netdev *dp = pmd->dp;
int type = nl_attr_type(a);
- long long now = aux->now;
struct tx_port *p;
switch ((enum ovs_action_attr)type) {
@@ -5407,7 +5438,7 @@ dp_execute_cb(void *aux_, struct dp_packet_batch *packets_,
dynamic_txqs = p->port->dynamic_txqs;
if (dynamic_txqs) {
- tx_qid = dpif_netdev_xps_get_tx_qid(pmd, p, now);
+ tx_qid = dpif_netdev_xps_get_tx_qid(pmd, p);
} else {
tx_qid = pmd->static_tx_qid;
}
@@ -5490,7 +5521,7 @@ dp_execute_cb(void *aux_, struct dp_packet_batch *packets_,
flow_extract(packet, &flow);
dpif_flow_hash(dp->dpif, &flow, sizeof flow, &ufid);
dp_execute_userspace_action(pmd, packet, may_steal, &flow,
- &ufid, &actions, userdata, now);
+ &ufid, &actions, userdata);
}
if (clone) {
@@ -5651,13 +5682,13 @@ dp_execute_cb(void *aux_, struct dp_packet_batch *packets_,
conntrack_execute(&dp->conntrack, packets_, aux->flow->dl_type, force,
commit, zone, setmark, setlabel, helper,
- nat_action_info_ref, now);
+ nat_action_info_ref, pmd->ctx.now);
break;
}
case OVS_ACTION_ATTR_METER:
dp_netdev_run_meter(pmd->dp, packets_, nl_attr_get_u32(a),
- time_msec());
+ pmd->ctx.now);
break;
case OVS_ACTION_ATTR_PUSH_VLAN:
@@ -5686,10 +5717,9 @@ static void
dp_netdev_execute_actions(struct dp_netdev_pmd_thread *pmd,
struct dp_packet_batch *packets,
bool may_steal, const struct flow *flow,
- const struct nlattr *actions, size_t actions_len,
- long long now)
+ const struct nlattr *actions, size_t actions_len)
{
- struct dp_netdev_execute_aux aux = { pmd, now, flow };
+ struct dp_netdev_execute_aux aux = { pmd, flow };
odp_execute_actions(&aux, packets, may_steal, actions,
actions_len, dp_execute_cb);
@@ -6016,9 +6046,8 @@ dp_netdev_pmd_try_optimize(struct dp_netdev_pmd_thread *pmd,
struct polled_queue *poll_list, int poll_cnt)
{
struct dpcls *cls;
- long long int now = time_msec();
- if (now > pmd->rxq_next_cycle_store) {
+ if (pmd->ctx.now > pmd->rxq_next_cycle_store) {
/* Get the cycles that were used to process each queue and store. */
for (unsigned i = 0; i < poll_cnt; i++) {
uint64_t rxq_cyc_curr = dp_netdev_rxq_get_cycles(poll_list[i].rxq,
@@ -6028,10 +6057,10 @@ dp_netdev_pmd_try_optimize(struct dp_netdev_pmd_thread *pmd,
0);
}
/* Start new measuring interval */
- pmd->rxq_next_cycle_store = now + PMD_RXQ_INTERVAL_LEN;
+ pmd->rxq_next_cycle_store = pmd->ctx.now + PMD_RXQ_INTERVAL_LEN;
}
- if (now > pmd->next_optimization) {
+ if (pmd->ctx.now > pmd->next_optimization) {
/* Try to obtain the flow lock to block out revalidator threads.
* If not possible, just try next time. */
if (!ovs_mutex_trylock(&pmd->flow_mutex)) {
@@ -6041,7 +6070,8 @@ dp_netdev_pmd_try_optimize(struct dp_netdev_pmd_thread *pmd,
}
ovs_mutex_unlock(&pmd->flow_mutex);
/* Start new measuring interval */
- pmd->next_optimization = now + DPCLS_OPTIMIZATION_INTERVAL;
+ pmd->next_optimization = pmd->ctx.now
+ + DPCLS_OPTIMIZATION_INTERVAL;
}
}
}
From patchwork Fri Dec 1 15:44:29 2017
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
X-Patchwork-Submitter: Ilya Maximets
X-Patchwork-Id: 843554
X-Patchwork-Delegate: ian.stokes@intel.com
Return-Path:
X-Original-To: incoming@patchwork.ozlabs.org
Delivered-To: patchwork-incoming@bilbo.ozlabs.org
Authentication-Results: ozlabs.org;
spf=pass (mailfrom) smtp.mailfrom=openvswitch.org
(client-ip=140.211.169.12; helo=mail.linuxfoundation.org;
envelope-from=ovs-dev-bounces@openvswitch.org;
receiver=)
Authentication-Results: ozlabs.org;
dkim=fail reason="signature verification failed" (1024-bit key;
unprotected) header.d=samsung.com header.i=@samsung.com
header.b="YcDF/J6i"; dkim-atps=neutral
Received: from mail.linuxfoundation.org (mail.linuxfoundation.org
[140.211.169.12])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256
bits)) (No client certificate requested)
by ozlabs.org (Postfix) with ESMTPS id 3ypJYy1HKXz9s03
for ;
Sat, 2 Dec 2017 02:47:34 +1100 (AEDT)
Received: from mail.linux-foundation.org (localhost [127.0.0.1])
by mail.linuxfoundation.org (Postfix) with ESMTP id 2CA63C7C;
Fri, 1 Dec 2017 15:44:55 +0000 (UTC)
X-Original-To: ovs-dev@openvswitch.org
Delivered-To: ovs-dev@mail.linuxfoundation.org
Received: from smtp1.linuxfoundation.org (smtp1.linux-foundation.org
[172.17.192.35])
by mail.linuxfoundation.org (Postfix) with ESMTPS id C7685C77
for ; Fri, 1 Dec 2017 15:44:53 +0000 (UTC)
X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6
Received: from mailout2.w1.samsung.com (mailout2.w1.samsung.com
[210.118.77.12])
by smtp1.linuxfoundation.org (Postfix) with ESMTPS id 28DFC496
for ; Fri, 1 Dec 2017 15:44:53 +0000 (UTC)
Received: from eucas1p1.samsung.com (unknown [182.198.249.206])
by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id
20171201154450euoutp023c885e5c4a25b5eee4cf96d62c9ee743~8NiEqQKGF3160831608euoutp02k;
Fri, 1 Dec 2017 15:44:50 +0000 (GMT)
DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com
20171201154450euoutp023c885e5c4a25b5eee4cf96d62c9ee743~8NiEqQKGF3160831608euoutp02k
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com;
s=mail20170921; t=1512143091;
bh=rnw7yQo8WUth8cRzRw4N0B6CyDJBWErwy7OSn6wmGOs=;
h=From:To:Cc:Subject:Date:In-reply-to:References:From;
b=YcDF/J6i1baE1jy+403mwSZqJWyGaiiYc0x782vtIoo2URFOJwbZdzThmzX+Ho37M
GSlSKaDWYF5V9dNr8i6mS+O2loOdN6w7O7g5bllR8BGnPit8pIVzFOM8yLbHSekLGk
3ue2osZmYt2dLGQIWVOIfqtinjfnuuIwDfqgRM1g=
Received: from eusmges5.samsung.com (unknown [203.254.199.245]) by
eucas1p2.samsung.com (KnoxPortal) with ESMTP id
20171201154449eucas1p27aedb2e15de7d5a6bd5c3732b6efb806~8NiDpObHv1816418164eucas1p24;
Fri, 1 Dec 2017 15:44:49 +0000 (GMT)
Received: from eucas1p2.samsung.com ( [182.198.249.207]) by
eusmges5.samsung.com (EUCPMTA) with SMTP id 79.FD.12743.1F8712A5;
Fri, 1 Dec 2017 15:44:49 +0000 (GMT)
Received: from eusmgms2.samsung.com (unknown [182.198.249.180]) by
eucas1p1.samsung.com (KnoxPortal) with ESMTP id
20171201154449eucas1p162106056d97e8ed1d7dc0eeb859024d2~8NiC-nrr21690516905eucas1p1A;
Fri, 1 Dec 2017 15:44:49 +0000 (GMT)
X-AuditID: cbfec7f5-f79d06d0000031c7-50-5a2178f1e573
Received: from eusync3.samsung.com ( [203.254.199.213]) by
eusmgms2.samsung.com (EUCPMTA) with SMTP id CC.B0.20118.1F8712A5;
Fri, 1 Dec 2017 15:44:49 +0000 (GMT)
Received: from imaximets.rnd.samsung.ru ([106.109.129.180]) by
eusync3.samsung.com (Oracle Communications Messaging Server
7.0.5.31.0 64bit (built May 5 2014)) with ESMTPA id
<0P0A00BWSH2B5A50@eusync3.samsung.com>;
Fri, 01 Dec 2017 15:44:49 +0000 (GMT)
From: Ilya Maximets
To: ovs-dev@openvswitch.org, Bhanuprakash Bodireddy
Date: Fri, 01 Dec 2017 18:44:29 +0300
Message-id: <1512143073-22347-4-git-send-email-i.maximets@samsung.com>
X-Mailer: git-send-email 2.7.4
In-reply-to: <1512143073-22347-1-git-send-email-i.maximets@samsung.com>
X-Brightmail-Tracker:
H4sIAAAAAAAAA+NgFjrDIsWRmVeSWpSXmKPExsWy7djP87ofKxSjDHZNV7VY/YvTYuczZYuW
/pnMFneu/GSzmPb5NrvFlfaf7BYbH55ltTjy/TSjxdpDH9gt5n56zujA5fHr61U2j8V7XjJ5
PLv5n9Hj/T4gt2/LKsYA1igum5TUnMyy1CJ9uwSujP/vXrMXrDWvODrvLmsD43aNLkZODgkB
E4kJv1vZIGwxiQv31gPZXBxCAksZJV403GeEcD4zSpze94ANpmPnpQWsEIlljBJ3n8xnh3Ca
mST27vvABFLFJqAjcWr1EUYQW0QgQuLB91lgRcwCp5kk3mxaxAySEBawkbi/5BuQzcHBIqAq
seNyDUiYV8BN4sGTI6wQ2+Qkbp7rBCvhFHCXOPJbHGSMhMASNom9R++AxSUEXCSenOODKBeW
eHV8CzuELSNxeXI3C0R9M6NEw6pLjBDOBEaJL83LmSCq7CVO3bwKZjML8ElM2jYdaiivREeb
EESJh8TLpd9ZIGxHicvz10HDaBajxMwXj1knMEovYGRYxSiSWlqcm55abKpXnJhbXJqXrpec
n7uJERjHp/8d/7qDcekxq0OMAhyMSjy8DOGKUUKsiWXFlbmHGCU4mJVEeLNKgEK8KYmVValF
+fFFpTmpxYcYpTlYlMR5baPaIoUE0hNLUrNTUwtSi2CyTBycUg2MR7rdXz9aZmu07vncTZc5
Q+9d3Px1EudaDq0za9sWvrhuNysgR//YE+mu7GjZdRVfe2dZlWxT/NjDy/rrkKaG2p0Z3B3R
y5wMjKYasi6Qjk7MNhL45WfnLOJ+rqPk45K7pyYdeCLgzsW1uShc8vaKlkNRYWwXPQ4nX1is
KC/99VSUwRcDzRUsSizFGYmGWsxFxYkAwK4AaN8CAAA=
X-Brightmail-Tracker:
H4sIAAAAAAAAA+NgFprPLMWRmVeSWpSXmKPExsVy+t/xq7ofKxSjDJ7M5rRY/YvTYuczZYuW
/pnMFneu/GSzmPb5NrvFlfaf7BYbH55ltTjy/TSjxdpDH9gt5n56zujA5fHr61U2j8V7XjJ5
PLv5n9Hj/T4gt2/LKsYA1igum5TUnMyy1CJ9uwSujP/vXrMXrDWvODrvLmsD43aNLkZODgkB
E4mdlxawQthiEhfurWfrYuTiEBJYwijx/tlUZpCEkEArk8Tv/fkgNpuAjsSp1UcYQWwRgQiJ
ljnrGUEamAXOMkm0nj7OBpIQFrCRuL/kG1AzBweLgKrEjss1IGFeATeJB0+OQC2Tk7h5rhOs
hFPAXeLIb3GIVW4S+3fvYJzAyLuAkWEVo0hqaXFuem6xkV5xYm5xaV66XnJ+7iZGYLBtO/Zz
yw7GrnfBhxgFOBiVeHgZwhWjhFgTy4orcw8xSnAwK4nwZpUAhXhTEiurUovy44tKc1KLDzFK
c7AoifP27lkdKSSQnliSmp2aWpBaBJNl4uCUamDUqY19xBt7M+RtT44Zr7x612lZX+u1/vvm
bfPgKE65JaopyX/cvUjqj5287bnlQa/achd7JnI43GeSjX4oxJa/t3l/yLdZkp9MSmzWLdHm
v244y7eDb7PiFY51tfzdl8JeFQdvKn1/W77rLfOLzyc0GSaGSx54fI9pR97lU+c2zluvp8C5
rEOJpTgj0VCLuag4EQCaZElZMgIAAA==
X-CMS-MailID: 20171201154449eucas1p162106056d97e8ed1d7dc0eeb859024d2
X-Msg-Generator: CA
CMS-TYPE: 201P
X-CMS-RootMailID: 20171201154449eucas1p162106056d97e8ed1d7dc0eeb859024d2
X-RootMTR: 20171201154449eucas1p162106056d97e8ed1d7dc0eeb859024d2
References: <1512143073-22347-1-git-send-email-i.maximets@samsung.com>
X-Spam-Status: No, score=-7.0 required=5.0 tests=BAYES_00,DKIM_SIGNED,
DKIM_VALID, DKIM_VALID_AU, RCVD_IN_DNSWL_HI,
T_RP_MATCHES_RCVD autolearn=ham version=3.3.1
X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on
smtp1.linux-foundation.org
Cc: Heetae Ahn ,
Ilya Maximets
Subject: [ovs-dev] [PATCH v6 3/7] dpif-netdev: Output packet batching.
X-BeenThere: ovs-dev@openvswitch.org
X-Mailman-Version: 2.1.12
Precedence: list
List-Id:
List-Unsubscribe: ,
List-Archive:
List-Post:
List-Help:
List-Subscribe: ,
MIME-Version: 1.0
Sender: ovs-dev-bounces@openvswitch.org
Errors-To: ovs-dev-bounces@openvswitch.org
While processing incoming batch of packets they are scattered
across many per-flow batches and sent separately.
This becomes an issue while using more than a few flows.
For example if we have balanced-tcp OvS bonding with 2 ports
there will be 256 datapath internal flows for each dp_hash
pattern. This will lead to scattering of a single recieved
batch across all of that 256 per-flow batches and invoking
send for each packet separately. This behaviour greatly degrades
overall performance of netdev_send because of inability to use
advantages of vectorized transmit functions.
But the half (if 2 ports in bonding) of datapath flows will
have the same output actions. This means that we can collect
them in a single place back and send at once using single call
to netdev_send. This patch introduces per-port packet batch
for output packets for that purpose.
'output_pkts' batch is thread local and located in send port cache.
Signed-off-by: Ilya Maximets
---
lib/dpif-netdev.c | 77 ++++++++++++++++++++++++++++++++++++++++++++++---------
1 file changed, 65 insertions(+), 12 deletions(-)
diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c
index 90beea4..f124bf8 100644
--- a/lib/dpif-netdev.c
+++ b/lib/dpif-netdev.c
@@ -526,6 +526,7 @@ struct tx_port {
int qid;
long long last_used;
struct hmap_node node;
+ struct dp_packet_batch output_pkts;
};
/* A set of properties for the current processing loop that is not directly
@@ -739,6 +740,9 @@ static void dp_netdev_add_rxq_to_pmd(struct dp_netdev_pmd_thread *pmd,
static void dp_netdev_del_rxq_from_pmd(struct dp_netdev_pmd_thread *pmd,
struct rxq_poll *poll)
OVS_REQUIRES(pmd->port_mutex);
+static void
+dp_netdev_pmd_flush_output_packets(struct dp_netdev_pmd_thread *pmd);
+
static void reconfigure_datapath(struct dp_netdev *dp)
OVS_REQUIRES(dp->port_mutex);
static bool dp_netdev_pmd_try_ref(struct dp_netdev_pmd_thread *pmd);
@@ -816,7 +820,7 @@ emc_cache_slow_sweep(struct emc_cache *flow_cache)
*
* 2. Before processing of the new packet batch:
* - dpif_netdev_execute()
- * - dp_netdev_input__()
+ * - dp_netdev_process_rxq_port()
*
* 3. At least once per polling iteration in main polling threads if no
* packets received on current iteration:
@@ -2995,6 +2999,7 @@ dpif_netdev_execute(struct dpif *dpif, struct dpif_execute *execute)
dp_packet_batch_init_packet(&pp, execute->packet);
dp_netdev_execute_actions(pmd, &pp, false, execute->flow,
execute->actions, execute->actions_len);
+ dp_netdev_pmd_flush_output_packets(pmd);
if (pmd->core_id == NON_PMD_CORE_ID) {
ovs_mutex_unlock(&dp->non_pmd_mutex);
@@ -3281,6 +3286,36 @@ dp_netdev_rxq_get_intrvl_cycles(struct dp_netdev_rxq *rx, unsigned idx)
return processing_cycles;
}
+static void
+dp_netdev_pmd_flush_output_on_port(struct dp_netdev_pmd_thread *pmd,
+ struct tx_port *p)
+{
+ int tx_qid;
+ bool dynamic_txqs;
+
+ dynamic_txqs = p->port->dynamic_txqs;
+ if (dynamic_txqs) {
+ tx_qid = dpif_netdev_xps_get_tx_qid(pmd, p);
+ } else {
+ tx_qid = pmd->static_tx_qid;
+ }
+
+ netdev_send(p->port->netdev, tx_qid, &p->output_pkts, true, dynamic_txqs);
+ dp_packet_batch_init(&p->output_pkts);
+}
+
+static void
+dp_netdev_pmd_flush_output_packets(struct dp_netdev_pmd_thread *pmd)
+{
+ struct tx_port *p;
+
+ HMAP_FOR_EACH (p, node, &pmd->send_port_cache) {
+ if (!dp_packet_batch_is_empty(&p->output_pkts)) {
+ dp_netdev_pmd_flush_output_on_port(pmd, p);
+ }
+ }
+}
+
static int
dp_netdev_process_rxq_port(struct dp_netdev_pmd_thread *pmd,
struct netdev_rxq *rx,
@@ -3294,9 +3329,11 @@ dp_netdev_process_rxq_port(struct dp_netdev_pmd_thread *pmd,
error = netdev_rxq_recv(rx, &batch);
if (!error) {
*recirc_depth_get() = 0;
+ pmd_thread_ctx_time_update(pmd);
batch_cnt = batch.count;
dp_netdev_input(pmd, &batch, port_no);
+ dp_netdev_pmd_flush_output_packets(pmd);
} else if (error != EAGAIN && error != EOPNOTSUPP) {
static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5);
@@ -4761,6 +4798,7 @@ dp_netdev_add_port_tx_to_pmd(struct dp_netdev_pmd_thread *pmd,
tx->port = port;
tx->qid = -1;
+ dp_packet_batch_init(&tx->output_pkts);
hmap_insert(&pmd->tx_ports, &tx->node, hash_port_no(tx->port->port_no));
pmd->need_reload = true;
@@ -5218,8 +5256,6 @@ dp_netdev_input__(struct dp_netdev_pmd_thread *pmd,
size_t n_batches;
odp_port_t in_port;
- pmd_thread_ctx_time_update(pmd);
-
n_batches = 0;
emc_processing(pmd, packets, keys, batches, &n_batches,
md_is_valid, port_no);
@@ -5433,18 +5469,35 @@ dp_execute_cb(void *aux_, struct dp_packet_batch *packets_,
case OVS_ACTION_ATTR_OUTPUT:
p = pmd_send_port_cache_lookup(pmd, nl_attr_get_odp_port(a));
if (OVS_LIKELY(p)) {
- int tx_qid;
- bool dynamic_txqs;
+ struct dp_packet *packet;
+ struct dp_packet_batch out;
- dynamic_txqs = p->port->dynamic_txqs;
- if (dynamic_txqs) {
- tx_qid = dpif_netdev_xps_get_tx_qid(pmd, p);
- } else {
- tx_qid = pmd->static_tx_qid;
+ if (!may_steal) {
+ dp_packet_batch_clone(&out, packets_);
+ dp_packet_batch_reset_cutlen(packets_);
+ packets_ = &out;
}
+ dp_packet_batch_apply_cutlen(packets_);
- netdev_send(p->port->netdev, tx_qid, packets_, may_steal,
- dynamic_txqs);
+#ifdef DPDK_NETDEV
+ if (OVS_UNLIKELY(!dp_packet_batch_is_empty(&p->output_pkts)
+ && packets_->packets[0]->source
+ != p->output_pkts.packets[0]->source)) {
+ /* XXX: netdev-dpdk assumes that all packets in a single
+ * output batch has the same source. Flush here to
+ * avoid memory access issues. */
+ dp_netdev_pmd_flush_output_on_port(pmd, p);
+ }
+#endif
+ if (OVS_UNLIKELY(dp_packet_batch_size(&p->output_pkts)
+ + dp_packet_batch_size(packets_) > NETDEV_MAX_BURST)) {
+ /* Some packets was generated while input batch processing.
+ * Flush here to avoid overflow. */
+ dp_netdev_pmd_flush_output_on_port(pmd, p);
+ }
+ DP_PACKET_BATCH_FOR_EACH (packet, packets_) {
+ dp_packet_batch_add(&p->output_pkts, packet);
+ }
return;
}
break;
From patchwork Fri Dec 1 15:44:30 2017
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
X-Patchwork-Submitter: Ilya Maximets
X-Patchwork-Id: 843555
X-Patchwork-Delegate: ian.stokes@intel.com
Return-Path:
X-Original-To: incoming@patchwork.ozlabs.org
Delivered-To: patchwork-incoming@bilbo.ozlabs.org
Authentication-Results: ozlabs.org;
spf=pass (mailfrom) smtp.mailfrom=openvswitch.org
(client-ip=140.211.169.12; helo=mail.linuxfoundation.org;
envelope-from=ovs-dev-bounces@openvswitch.org;
receiver=)
Authentication-Results: ozlabs.org;
dkim=fail reason="signature verification failed" (1024-bit key;
unprotected) header.d=samsung.com header.i=@samsung.com
header.b="Jmp34l+h"; dkim-atps=neutral
Received: from mail.linuxfoundation.org (mail.linuxfoundation.org
[140.211.169.12])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256
bits)) (No client certificate requested)
by ozlabs.org (Postfix) with ESMTPS id 3ypJZm34nDz9s03
for ;
Sat, 2 Dec 2017 02:48:16 +1100 (AEDT)
Received: from mail.linux-foundation.org (localhost [127.0.0.1])
by mail.linuxfoundation.org (Postfix) with ESMTP id 0CA47C87;
Fri, 1 Dec 2017 15:44:58 +0000 (UTC)
X-Original-To: ovs-dev@openvswitch.org
Delivered-To: ovs-dev@mail.linuxfoundation.org
Received: from smtp1.linuxfoundation.org (smtp1.linux-foundation.org
[172.17.192.35])
by mail.linuxfoundation.org (Postfix) with ESMTPS id CC233C49
for ; Fri, 1 Dec 2017 15:44:56 +0000 (UTC)
X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6
Received: from mailout1.w1.samsung.com (mailout1.w1.samsung.com
[210.118.77.11])
by smtp1.linuxfoundation.org (Postfix) with ESMTPS id 9AB6F496
for ; Fri, 1 Dec 2017 15:44:55 +0000 (UTC)
Received: from eucas1p2.samsung.com (unknown [182.198.249.207])
by mailout1.w1.samsung.com (KnoxPortal) with ESMTP id
20171201154453euoutp013faef9dd5a6e78781d7cded849a5fe35~8NiG782vj1298612986euoutp01f;
Fri, 1 Dec 2017 15:44:53 +0000 (GMT)
DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com
20171201154453euoutp013faef9dd5a6e78781d7cded849a5fe35~8NiG782vj1298612986euoutp01f
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com;
s=mail20170921; t=1512143093;
bh=gdhd1o375BtB3WW1udQk1VNM5h4wdvC3Im8iEn/r1Sk=;
h=From:To:Cc:Subject:Date:In-reply-to:References:From;
b=Jmp34l+hZmdeQw+/31PFzgfP2eymQgaiVCDXrmgiRnb/NXc848o/+g2suKuaXorQd
524f3jIPXqrU+l8P1O9qNSgraf/TU0ZK6uO2LikVBzGOoshCfTByi5eXO5eC4C/xxy
lNfbdE0JNJBRsqWpn59BzqzWX0YrGbhYt9LZUDxo=
Received: from eusmges2.samsung.com (unknown [203.254.199.241]) by
eucas1p1.samsung.com (KnoxPortal) with ESMTP id
20171201154452eucas1p12330e29ac74ab67fc74f185a6007cbb7~8NiGK6IUg2810828108eucas1p1Y;
Fri, 1 Dec 2017 15:44:52 +0000 (GMT)
Received: from eucas1p2.samsung.com ( [182.198.249.207]) by
eusmges2.samsung.com (EUCPMTA) with SMTP id 5D.77.12907.4F8712A5;
Fri, 1 Dec 2017 15:44:52 +0000 (GMT)
Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by
eucas1p2.samsung.com (KnoxPortal) with ESMTP id
20171201154451eucas1p2f67eece27a2051eac127cb836e22c9ab~8NiFgLP-T1819018190eucas1p2T;
Fri, 1 Dec 2017 15:44:51 +0000 (GMT)
X-AuditID: cbfec7f1-f793a6d00000326b-31-5a2178f42674
Received: from eusync3.samsung.com ( [203.254.199.213]) by
eusmgms1.samsung.com (EUCPMTA) with SMTP id EF.72.18832.3F8712A5;
Fri, 1 Dec 2017 15:44:51 +0000 (GMT)
Received: from imaximets.rnd.samsung.ru ([106.109.129.180]) by
eusync3.samsung.com (Oracle Communications Messaging Server
7.0.5.31.0 64bit (built May 5 2014)) with ESMTPA id
<0P0A00BWSH2B5A50@eusync3.samsung.com>;
Fri, 01 Dec 2017 15:44:51 +0000 (GMT)
From: Ilya Maximets
To: ovs-dev@openvswitch.org, Bhanuprakash Bodireddy
Date: Fri, 01 Dec 2017 18:44:30 +0300
Message-id: <1512143073-22347-5-git-send-email-i.maximets@samsung.com>
X-Mailer: git-send-email 2.7.4
In-reply-to: <1512143073-22347-1-git-send-email-i.maximets@samsung.com>
X-Brightmail-Tracker:
H4sIAAAAAAAAA+NgFjrDIsWRmVeSWpSXmKPExsWy7djP87pfKhSjDDauEbZY/YvTYuczZYuW
/pnMFneu/GSzmPb5NrvFlfaf7BYbH55ltTjy/TSjxdpDH9gt5n56zujA5fHr61U2j8V7XjJ5
PLv5n9Hj/T4gt2/LKsYA1igum5TUnMyy1CJ9uwSujMvN89kKzvhU9P8/z97A+Nyyi5GTQ0LA
ROLJ6iVMELaYxIV769m6GLk4hASWMkrs/toF5XxmlGjafJWxi5EDrKPxWAhEfBmjxLTXv1kg
nGYmia8/vzGCjGIT0JE4tfoImC0iECHx4PssdpAiZoHTTBJvNi1iBkkIC1hITJzzmhlkKouA
qkTzVbB6XgE3iVsfnrFAnCQncfNcJ1gJp4C7xJHf4iBjJASWsElMnXicHaLGRWLF+zNQLwhL
vDq+BSouI9HZcZAJoqGZUaJh1SVGCGcCo8SX5uVQHfYSp25eBbOZBfgkJm2bzgzxJq9ER5sQ
RImHxKy2BcwQtqPE43tzoMEyi1Hi68FNjBMYpRcwMqxiFEktLc5NTy020itOzC0uzUvXS87P
3cQIjOPT/45/3MH4/oTVIUYBDkYlHl6GcMUoIdbEsuLK3EOMEhzMSiK8WSVAId6UxMqq1KL8
+KLSnNTiQ4zSHCxK4ry2UW2RQgLpiSWp2ampBalFMFkmDk6pBsaLH1as1dqzoGTe73jpeQZT
mIzXx4lm9l7Rai+/+i84XzV60nXfJivjWu07+fvWTgk0ccgpPu+gMKFolfLZXT/c7eqtPE+4
7Nh88bbOwSZPh98hD0RDsxqZvb8elglRO33lZcGcm8es2YNkVf3Udh32XvnvrabUstSUHPPi
XaKLnwjYOiasuKnEUpyRaKjFXFScCAAd7gH43wIAAA==
X-Brightmail-Tracker:
H4sIAAAAAAAAA+NgFprPLMWRmVeSWpSXmKPExsVy+t/xq7qfKxSjDLrWG1us/sVpsfOZskVL
/0xmiztXfrJZTPt8m93iSvtPdouND8+yWhz5fprRYu2hD+wWcz89Z3Tg8vj19Sqbx+I9L5k8
nt38z+jxfh+Q27dlFWMAaxSXTUpqTmZZapG+XQJXxuXm+WwFZ3wq+v+fZ29gfG7ZxcjBISFg
ItF4LKSLkRPIFJO4cG89WxcjF4eQwBJGiYYvX9khnFYmib5jR9hBqtgEdCROrT7CCGKLCERI
tMxZzwhSxCxwlkmi9fRxNpCEsICFxMQ5r5lBNrAIqEo0XwWr5xVwk7j14RkLxDY5iZvnOsFK
OAXcJY78FgcJCwGV7N+9g3ECI+8CRoZVjCKppcW56bnFhnrFibnFpXnpesn5uZsYgcG27djP
zTsYL20MPsQowMGoxMO7IkQxSog1say4MvcQowQHs5IIb1YJUIg3JbGyKrUoP76oNCe1+BCj
NAeLkjhv757VkUIC6YklqdmpqQWpRTBZJg5OqQbGuLS6xdsimb6d3T3PbO/GDd1nRKpW/J50
8c+HU1t458wufTUzd6f88uLiFxN5ebpE11w71bIit9wsUN7EjDFLbn64dHnL+9/BW/yK9V9I
ux97F35WYW/d4fkyk8yPLei33cqr+NEsT9Hn3Cv5lX8K3NnnTEiMurlmocSx4s/TVf+s257y
lncFsxJLcUaioRZzUXEiAGelK+8yAgAA
X-CMS-MailID: 20171201154451eucas1p2f67eece27a2051eac127cb836e22c9ab
X-Msg-Generator: CA
CMS-TYPE: 201P
X-CMS-RootMailID: 20171201154451eucas1p2f67eece27a2051eac127cb836e22c9ab
X-RootMTR: 20171201154451eucas1p2f67eece27a2051eac127cb836e22c9ab
References: <1512143073-22347-1-git-send-email-i.maximets@samsung.com>
X-Spam-Status: No, score=-7.0 required=5.0 tests=BAYES_00,DKIM_SIGNED,
DKIM_VALID, DKIM_VALID_AU, RCVD_IN_DNSWL_HI,
T_RP_MATCHES_RCVD autolearn=ham version=3.3.1
X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on
smtp1.linux-foundation.org
Cc: Heetae Ahn ,
Ilya Maximets
Subject: [ovs-dev] [PATCH v6 4/7] netdev: Remove unused may_steal.
X-BeenThere: ovs-dev@openvswitch.org
X-Mailman-Version: 2.1.12
Precedence: list
List-Id:
List-Unsubscribe: ,
List-Archive:
List-Post:
List-Help:
List-Subscribe: ,
MIME-Version: 1.0
Sender: ovs-dev-bounces@openvswitch.org
Errors-To: ovs-dev-bounces@openvswitch.org
Not needed anymore because 'may_steal' already handled on
dpif-netdev layer and always true.
Signed-off-by: Ilya Maximets
---
lib/dpif-netdev.c | 2 +-
lib/netdev-bsd.c | 4 ++--
lib/netdev-dpdk.c | 25 +++++++++++--------------
lib/netdev-dummy.c | 4 ++--
lib/netdev-linux.c | 4 ++--
lib/netdev-provider.h | 7 +++----
lib/netdev.c | 12 ++++--------
lib/netdev.h | 2 +-
8 files changed, 26 insertions(+), 34 deletions(-)
diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c
index f124bf8..68c35fa 100644
--- a/lib/dpif-netdev.c
+++ b/lib/dpif-netdev.c
@@ -3300,7 +3300,7 @@ dp_netdev_pmd_flush_output_on_port(struct dp_netdev_pmd_thread *pmd,
tx_qid = pmd->static_tx_qid;
}
- netdev_send(p->port->netdev, tx_qid, &p->output_pkts, true, dynamic_txqs);
+ netdev_send(p->port->netdev, tx_qid, &p->output_pkts, dynamic_txqs);
dp_packet_batch_init(&p->output_pkts);
}
diff --git a/lib/netdev-bsd.c b/lib/netdev-bsd.c
index 65c5674..658a5bc 100644
--- a/lib/netdev-bsd.c
+++ b/lib/netdev-bsd.c
@@ -680,7 +680,7 @@ netdev_bsd_rxq_drain(struct netdev_rxq *rxq_)
*/
static int
netdev_bsd_send(struct netdev *netdev_, int qid OVS_UNUSED,
- struct dp_packet_batch *batch, bool may_steal,
+ struct dp_packet_batch *batch,
bool concurrent_txq OVS_UNUSED)
{
struct netdev_bsd *dev = netdev_bsd_cast(netdev_);
@@ -728,7 +728,7 @@ netdev_bsd_send(struct netdev *netdev_, int qid OVS_UNUSED,
}
ovs_mutex_unlock(&dev->mutex);
- dp_packet_delete_batch(batch, may_steal);
+ dp_packet_delete_batch(batch, true);
return error;
}
diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c
index faff842..47cf2dd 100644
--- a/lib/netdev-dpdk.c
+++ b/lib/netdev-dpdk.c
@@ -1874,12 +1874,12 @@ dpdk_do_tx_copy(struct netdev *netdev, int qid, struct dp_packet_batch *batch)
static int
netdev_dpdk_vhost_send(struct netdev *netdev, int qid,
struct dp_packet_batch *batch,
- bool may_steal, bool concurrent_txq OVS_UNUSED)
+ bool concurrent_txq OVS_UNUSED)
{
- if (OVS_UNLIKELY(!may_steal || batch->packets[0]->source != DPBUF_DPDK)) {
+ if (OVS_UNLIKELY(batch->packets[0]->source != DPBUF_DPDK)) {
dpdk_do_tx_copy(netdev, qid, batch);
- dp_packet_delete_batch(batch, may_steal);
+ dp_packet_delete_batch(batch, true);
} else {
dp_packet_batch_apply_cutlen(batch);
__netdev_dpdk_vhost_send(netdev, qid, batch->packets, batch->count);
@@ -1889,11 +1889,11 @@ netdev_dpdk_vhost_send(struct netdev *netdev, int qid,
static inline void
netdev_dpdk_send__(struct netdev_dpdk *dev, int qid,
- struct dp_packet_batch *batch, bool may_steal,
+ struct dp_packet_batch *batch,
bool concurrent_txq)
{
if (OVS_UNLIKELY(!(dev->flags & NETDEV_UP))) {
- dp_packet_delete_batch(batch, may_steal);
+ dp_packet_delete_batch(batch, true);
return;
}
@@ -1902,12 +1902,11 @@ netdev_dpdk_send__(struct netdev_dpdk *dev, int qid,
rte_spinlock_lock(&dev->tx_q[qid].tx_lock);
}
- if (OVS_UNLIKELY(!may_steal ||
- batch->packets[0]->source != DPBUF_DPDK)) {
+ if (OVS_UNLIKELY(batch->packets[0]->source != DPBUF_DPDK)) {
struct netdev *netdev = &dev->up;
dpdk_do_tx_copy(netdev, qid, batch);
- dp_packet_delete_batch(batch, may_steal);
+ dp_packet_delete_batch(batch, true);
} else {
int tx_cnt, dropped;
int batch_cnt = dp_packet_batch_size(batch);
@@ -1935,12 +1934,11 @@ netdev_dpdk_send__(struct netdev_dpdk *dev, int qid,
static int
netdev_dpdk_eth_send(struct netdev *netdev, int qid,
- struct dp_packet_batch *batch, bool may_steal,
- bool concurrent_txq)
+ struct dp_packet_batch *batch, bool concurrent_txq)
{
struct netdev_dpdk *dev = netdev_dpdk_cast(netdev);
- netdev_dpdk_send__(dev, qid, batch, may_steal, concurrent_txq);
+ netdev_dpdk_send__(dev, qid, batch, concurrent_txq);
return 0;
}
@@ -2907,8 +2905,7 @@ dpdk_ring_open(const char dev_name[], dpdk_port_t *eth_port_id)
static int
netdev_dpdk_ring_send(struct netdev *netdev, int qid,
- struct dp_packet_batch *batch, bool may_steal,
- bool concurrent_txq)
+ struct dp_packet_batch *batch, bool concurrent_txq)
{
struct netdev_dpdk *dev = netdev_dpdk_cast(netdev);
struct dp_packet *packet;
@@ -2921,7 +2918,7 @@ netdev_dpdk_ring_send(struct netdev *netdev, int qid,
dp_packet_mbuf_rss_flag_reset(packet);
}
- netdev_dpdk_send__(dev, qid, batch, may_steal, concurrent_txq);
+ netdev_dpdk_send__(dev, qid, batch, concurrent_txq);
return 0;
}
diff --git a/lib/netdev-dummy.c b/lib/netdev-dummy.c
index 246cdf1..140e08d 100644
--- a/lib/netdev-dummy.c
+++ b/lib/netdev-dummy.c
@@ -1062,7 +1062,7 @@ netdev_dummy_rxq_drain(struct netdev_rxq *rxq_)
static int
netdev_dummy_send(struct netdev *netdev, int qid OVS_UNUSED,
- struct dp_packet_batch *batch, bool may_steal,
+ struct dp_packet_batch *batch,
bool concurrent_txq OVS_UNUSED)
{
struct netdev_dummy *dev = netdev_dummy_cast(netdev);
@@ -1132,7 +1132,7 @@ netdev_dummy_send(struct netdev *netdev, int qid OVS_UNUSED,
ovs_mutex_unlock(&dev->mutex);
}
- dp_packet_delete_batch(batch, may_steal);
+ dp_packet_delete_batch(batch, true);
return error;
}
diff --git a/lib/netdev-linux.c b/lib/netdev-linux.c
index e809b88..634ff6f 100644
--- a/lib/netdev-linux.c
+++ b/lib/netdev-linux.c
@@ -1270,7 +1270,7 @@ netdev_linux_tap_batch_send(struct netdev *netdev_,
* expected to do additional queuing of packets. */
static int
netdev_linux_send(struct netdev *netdev_, int qid OVS_UNUSED,
- struct dp_packet_batch *batch, bool may_steal,
+ struct dp_packet_batch *batch,
bool concurrent_txq OVS_UNUSED)
{
int error = 0;
@@ -1306,7 +1306,7 @@ netdev_linux_send(struct netdev *netdev_, int qid OVS_UNUSED,
}
free_batch:
- dp_packet_delete_batch(batch, may_steal);
+ dp_packet_delete_batch(batch, true);
return error;
}
diff --git a/lib/netdev-provider.h b/lib/netdev-provider.h
index 1720deb..3d9f336 100644
--- a/lib/netdev-provider.h
+++ b/lib/netdev-provider.h
@@ -348,9 +348,8 @@ struct netdev_class {
* If the function returns a non-zero value, some of the packets might have
* been sent anyway.
*
- * If 'may_steal' is false, the caller retains ownership of all the
- * packets. If 'may_steal' is true, the caller transfers ownership of all
- * the packets to the network device, regardless of success.
+ * The caller transfers ownership of all the packets to the network
+ * device, regardless of success.
*
* If 'concurrent_txq' is true, the caller may perform concurrent calls
* to netdev_send() with the same 'qid'. The netdev provider is responsible
@@ -370,7 +369,7 @@ struct netdev_class {
* datapath". It will also prevent the OVS implementation of bonding from
* working properly over 'netdev'.) */
int (*send)(struct netdev *netdev, int qid, struct dp_packet_batch *batch,
- bool may_steal, bool concurrent_txq);
+ bool concurrent_txq);
/* Registers with the poll loop to wake up from the next call to
* poll_block() when the packet transmission queue for 'netdev' has
diff --git a/lib/netdev.c b/lib/netdev.c
index 2d69fe5..e6f7c95 100644
--- a/lib/netdev.c
+++ b/lib/netdev.c
@@ -771,9 +771,8 @@ netdev_get_pt_mode(const struct netdev *netdev)
* If the function returns a non-zero value, some of the packets might have
* been sent anyway.
*
- * If 'may_steal' is false, the caller retains ownership of all the packets.
- * If 'may_steal' is true, the caller transfers ownership of all the packets
- * to the network device, regardless of success.
+ * The caller transfers ownership of all the packets to the network device,
+ * regardless of success.
*
* If 'concurrent_txq' is true, the caller may perform concurrent calls
* to netdev_send() with the same 'qid'. The netdev provider is responsible
@@ -787,15 +786,12 @@ netdev_get_pt_mode(const struct netdev *netdev)
* queues. */
int
netdev_send(struct netdev *netdev, int qid, struct dp_packet_batch *batch,
- bool may_steal, bool concurrent_txq)
+ bool concurrent_txq)
{
- int error = netdev->netdev_class->send(netdev, qid, batch, may_steal,
+ int error = netdev->netdev_class->send(netdev, qid, batch,
concurrent_txq);
if (!error) {
COVERAGE_INC(netdev_sent);
- if (!may_steal) {
- dp_packet_batch_reset_cutlen(batch);
- }
}
return error;
}
diff --git a/lib/netdev.h b/lib/netdev.h
index 3a545fe..dc9d9a0f 100644
--- a/lib/netdev.h
+++ b/lib/netdev.h
@@ -181,7 +181,7 @@ int netdev_rxq_drain(struct netdev_rxq *);
/* Packet transmission. */
int netdev_send(struct netdev *, int qid, struct dp_packet_batch *,
- bool may_steal, bool concurrent_txq);
+ bool concurrent_txq);
void netdev_send_wait(struct netdev *, int qid);
/* Flow offloading. */
From patchwork Fri Dec 1 15:44:31 2017
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
X-Patchwork-Submitter: Ilya Maximets
X-Patchwork-Id: 843556
X-Patchwork-Delegate: ian.stokes@intel.com
Return-Path:
X-Original-To: incoming@patchwork.ozlabs.org
Delivered-To: patchwork-incoming@bilbo.ozlabs.org
Authentication-Results: ozlabs.org;
spf=pass (mailfrom) smtp.mailfrom=openvswitch.org
(client-ip=140.211.169.12; helo=mail.linuxfoundation.org;
envelope-from=ovs-dev-bounces@openvswitch.org;
receiver=)
Authentication-Results: ozlabs.org;
dkim=fail reason="signature verification failed" (1024-bit key;
unprotected) header.d=samsung.com header.i=@samsung.com
header.b="vbjo+7FJ"; dkim-atps=neutral
Received: from mail.linuxfoundation.org (mail.linuxfoundation.org
[140.211.169.12])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256
bits)) (No client certificate requested)
by ozlabs.org (Postfix) with ESMTPS id 3ypJbX20vrz9s9Y
for ;
Sat, 2 Dec 2017 02:48:56 +1100 (AEDT)
Received: from mail.linux-foundation.org (localhost [127.0.0.1])
by mail.linuxfoundation.org (Postfix) with ESMTP id 06736C88;
Fri, 1 Dec 2017 15:44:59 +0000 (UTC)
X-Original-To: ovs-dev@openvswitch.org
Delivered-To: ovs-dev@mail.linuxfoundation.org
Received: from smtp1.linuxfoundation.org (smtp1.linux-foundation.org
[172.17.192.35])
by mail.linuxfoundation.org (Postfix) with ESMTPS id 4F2D9C8D
for ; Fri, 1 Dec 2017 15:44:58 +0000 (UTC)
X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6
Received: from mailout1.w1.samsung.com (mailout1.w1.samsung.com
[210.118.77.11])
by smtp1.linuxfoundation.org (Postfix) with ESMTPS id C951E47E
for ; Fri, 1 Dec 2017 15:44:57 +0000 (UTC)
Received: from eucas1p1.samsung.com (unknown [182.198.249.206])
by mailout1.w1.samsung.com (KnoxPortal) with ESMTP id
20171201154455euoutp01104862e1e1b8d40366ea237c43762b96~8NiI-L2s91301513015euoutp01b;
Fri, 1 Dec 2017 15:44:55 +0000 (GMT)
DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com
20171201154455euoutp01104862e1e1b8d40366ea237c43762b96~8NiI-L2s91301513015euoutp01b
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com;
s=mail20170921; t=1512143095;
bh=aOL/BrIjYkEjUbqF3c9F/yRPzA2F4ZxKHlBnxhk/vkM=;
h=From:To:Cc:Subject:Date:In-reply-to:References:From;
b=vbjo+7FJKqrRQ/OhHK/8iA6dOT+9DaObpmqI4rSD1h+40DGTAWSTALHIvyuSixIHj
LFz6ntG/qIaLPQ4gr+b/d2rGlWUDpKrElZkxal6AHpZoR4x5kg4rekdDCpEUgQllfc
nDJsLxXsh7W3vbrm8T+wv7MAd3+cbWB5VhQVeTcc=
Received: from eusmges3.samsung.com (unknown [203.254.199.242]) by
eucas1p2.samsung.com (KnoxPortal) with ESMTP id
20171201154454eucas1p22dc34ecbaf64ff287abacf24f4fa568d~8NiIWxxVf1818618186eucas1p2S;
Fri, 1 Dec 2017 15:44:54 +0000 (GMT)
Received: from eucas1p2.samsung.com ( [182.198.249.207]) by
eusmges3.samsung.com (EUCPMTA) with SMTP id 03.58.12867.6F8712A5;
Fri, 1 Dec 2017 15:44:54 +0000 (GMT)
Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by
eucas1p2.samsung.com (KnoxPortal) with ESMTP id
20171201154454eucas1p221e2df9d695cc98ec267b262743c932d~8NiHu-x5Q1773517735eucas1p22;
Fri, 1 Dec 2017 15:44:54 +0000 (GMT)
X-AuditID: cbfec7f2-f793b6d000003243-c0-5a2178f60a69
Received: from eusync3.samsung.com ( [203.254.199.213]) by
eusmgms1.samsung.com (EUCPMTA) with SMTP id 71.82.18832.6F8712A5;
Fri, 1 Dec 2017 15:44:54 +0000 (GMT)
Received: from imaximets.rnd.samsung.ru ([106.109.129.180]) by
eusync3.samsung.com (Oracle Communications Messaging Server
7.0.5.31.0 64bit (built May 5 2014)) with ESMTPA id
<0P0A00BWSH2B5A50@eusync3.samsung.com>;
Fri, 01 Dec 2017 15:44:54 +0000 (GMT)
From: Ilya Maximets
To: ovs-dev@openvswitch.org, Bhanuprakash Bodireddy
Date: Fri, 01 Dec 2017 18:44:31 +0300
Message-id: <1512143073-22347-6-git-send-email-i.maximets@samsung.com>
X-Mailer: git-send-email 2.7.4
In-reply-to: <1512143073-22347-1-git-send-email-i.maximets@samsung.com>
X-Brightmail-Tracker:
H4sIAAAAAAAAA+NgFjrNIsWRmVeSWpSXmKPExsWy7djP87rfKhSjDFbd0bBY/YvTYuczZYuW
/pnMFneu/GSzmPb5NrvFlfaf7BYbH55ltTjy/TSjxdpDH9gt5n56zujA5fHr61U2j8V7XjJ5
PLv5n9Hj/T4gt2/LKsYA1igum5TUnMyy1CJ9uwSujJ5u2YKNMhUzvp5ib2A8J9rFyMkhIWAi
sabzMxOELSZx4d56ti5GLg4hgaWMEvu+XWGHcD4zSrTcO8IG0/Hh3WNGiMQyRomOibegnGYm
iYMrD7CAVLEJ6EicWn2EEcQWEYiQePB9FtgoZoHTTBJvNi1iBkkIC5hJ7F3/DWwsi4CqxNJZ
f8BsXgE3iZn9S6GOkpO4ea4TqJ6Dg1PAXeLIb3GQORICS9gkrs88zgISlxBwkbj7wwqiXFji
1fEt7BC2jERnx0EmiPpmRomGVZcYIZwJjBJfmpdDLbCXOHXzKpjNLMAnMWnbdGaIobwSHW1C
ECUeErM334B631Hix/UZYLaQwCxGiRMrtCcwSi9gZFjFKJJaWpybnlpsrFecmFtcmpeul5yf
u4kRGMWn/x3/tIPx6wmrQ4wCHIxKPLwM4YpRQqyJZcWVuYcYJTiYlUR4s0qAQrwpiZVVqUX5
8UWlOanFhxilOViUxHlto9oihQTSE0tSs1NTC1KLYLJMHJxSDYxK1jHFD5yNQ2dYHta+JnEm
N+HYk/d1SzffS5t0wM5O7rXU4rrGBSqf8+ovbn3yKa3kF3e3udPmFy7qm4z4ucW13+fvWW56
PMz+wRSLGaVWkUw/Er0kQ1UXfAt+8sfktlnPK+Xvrq5TCv1ivW1nrnh6rkxys9V57V0J/leO
3P6mpvaK5WpdWrESS3FGoqEWc1FxIgA/P5i+3gIAAA==
X-Brightmail-Tracker:
H4sIAAAAAAAAA+NgFlrALMWRmVeSWpSXmKPExsVy+t/xq7rfKhSjDBpv8lms/sVpsfOZskVL
/0xmiztXfrJZTPt8m93iSvtPdouND8+yWhz5fprRYu2hD+wWcz89Z3Tg8vj19Sqbx+I9L5k8
nt38z+jxfh+Q27dlFWMAaxSXTUpqTmZZapG+XQJXRk+3bMFGmYoZX0+xNzCeE+1i5OSQEDCR
+PDuMSOELSZx4d56ti5GLg4hgSWMEhNXXmWBcFqZJH69ecQOUsUmoCNxavURsA4RgQiJljnr
GUGKmAXOMkm0nj7OBpIQFjCT2Lv+G5jNIqAqsXTWHzCbV8BNYmb/UiaIdXISN891MncxcnBw
CrhLHPktDhIWAirZv3sH4wRG3gWMDKsYRVJLi3PTc4sN9YoTc4tL89L1kvNzNzECw23bsZ+b
dzBe2hh8iFGAg1GJh3dFiGKUEGtiWXFl7iFGCQ5mJRHerBKgEG9KYmVValF+fFFpTmrxIUZp
DhYlcd7ePasjhQTSE0tSs1NTC1KLYLJMHJxSDYz9b99+uXrF9VPebKE7UwsV5xmmPlLgOZp2
cmaogqO51f+vImsOZG60s2u7p+LA7eF+M8jf4+GKmY/S1ix+5jo1MSP3+eu6ReU/tj2tqDre
sb+mq37u4b2FlbGtpmzH+liKDToTl3asyF5aZRSWNk3faMf3CsO0CXtXhS6ZNCfgyhWJgLhr
mv+VWIozEg21mIuKEwGEfk3dMwIAAA==
X-CMS-MailID: 20171201154454eucas1p221e2df9d695cc98ec267b262743c932d
X-Msg-Generator: CA
CMS-TYPE: 201P
X-CMS-RootMailID: 20171201154454eucas1p221e2df9d695cc98ec267b262743c932d
X-RootMTR: 20171201154454eucas1p221e2df9d695cc98ec267b262743c932d
References: <1512143073-22347-1-git-send-email-i.maximets@samsung.com>
X-Spam-Status: No, score=-7.0 required=5.0 tests=BAYES_00,DKIM_SIGNED,
DKIM_VALID, DKIM_VALID_AU, RCVD_IN_DNSWL_HI,
T_RP_MATCHES_RCVD autolearn=ham version=3.3.1
X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on
smtp1.linux-foundation.org
Cc: Heetae Ahn ,
Ilya Maximets
Subject: [ovs-dev] [PATCH v6 5/7] netdev: Remove useless cutlen.
X-BeenThere: ovs-dev@openvswitch.org
X-Mailman-Version: 2.1.12
Precedence: list
List-Id:
List-Unsubscribe: ,
List-Archive:
List-Post:
List-Help:
List-Subscribe: ,
MIME-Version: 1.0
Sender: ovs-dev-bounces@openvswitch.org
Errors-To: ovs-dev-bounces@openvswitch.org
Cutlen already applied while processing OVS_ACTION_ATTR_OUTPUT.
Acked-by: Eelco Chaudron
Signed-off-by: Ilya Maximets
---
lib/netdev-bsd.c | 2 +-
lib/netdev-dpdk.c | 5 -----
lib/netdev-dummy.c | 2 +-
lib/netdev-linux.c | 4 ++--
4 files changed, 4 insertions(+), 9 deletions(-)
diff --git a/lib/netdev-bsd.c b/lib/netdev-bsd.c
index 658a5bc..05974c1 100644
--- a/lib/netdev-bsd.c
+++ b/lib/netdev-bsd.c
@@ -697,7 +697,7 @@ netdev_bsd_send(struct netdev *netdev_, int qid OVS_UNUSED,
for (i = 0; i < batch->count; i++) {
const void *data = dp_packet_data(batch->packets[i]);
- size_t size = dp_packet_get_send_len(batch->packets[i]);
+ size_t size = dp_packet_size(batch->packets[i]);
while (!error) {
ssize_t retval;
diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c
index 47cf2dd..7454451 100644
--- a/lib/netdev-dpdk.c
+++ b/lib/netdev-dpdk.c
@@ -1825,8 +1825,6 @@ dpdk_do_tx_copy(struct netdev *netdev, int qid, struct dp_packet_batch *batch)
dropped += batch_cnt - cnt;
}
- dp_packet_batch_apply_cutlen(batch);
-
uint32_t txcnt = 0;
for (uint32_t i = 0; i < cnt; i++) {
@@ -1881,7 +1879,6 @@ netdev_dpdk_vhost_send(struct netdev *netdev, int qid,
dpdk_do_tx_copy(netdev, qid, batch);
dp_packet_delete_batch(batch, true);
} else {
- dp_packet_batch_apply_cutlen(batch);
__netdev_dpdk_vhost_send(netdev, qid, batch->packets, batch->count);
}
return 0;
@@ -1912,8 +1909,6 @@ netdev_dpdk_send__(struct netdev_dpdk *dev, int qid,
int batch_cnt = dp_packet_batch_size(batch);
struct rte_mbuf **pkts = (struct rte_mbuf **) batch->packets;
- dp_packet_batch_apply_cutlen(batch);
-
tx_cnt = netdev_dpdk_filter_packet_len(dev, pkts, batch_cnt);
tx_cnt = netdev_dpdk_qos_run(dev, pkts, tx_cnt, true);
dropped = batch_cnt - tx_cnt;
diff --git a/lib/netdev-dummy.c b/lib/netdev-dummy.c
index 140e08d..40086a3 100644
--- a/lib/netdev-dummy.c
+++ b/lib/netdev-dummy.c
@@ -1071,7 +1071,7 @@ netdev_dummy_send(struct netdev *netdev, int qid OVS_UNUSED,
struct dp_packet *packet;
DP_PACKET_BATCH_FOR_EACH(packet, batch) {
const void *buffer = dp_packet_data(packet);
- size_t size = dp_packet_get_send_len(packet);
+ size_t size = dp_packet_size(packet);
if (batch->packets[i]->packet_type != htonl(PT_ETH)) {
error = EPFNOSUPPORT;
diff --git a/lib/netdev-linux.c b/lib/netdev-linux.c
index 634ff6f..e767567 100644
--- a/lib/netdev-linux.c
+++ b/lib/netdev-linux.c
@@ -1198,7 +1198,7 @@ netdev_linux_sock_batch_send(int sock, int ifindex,
struct dp_packet *packet;
DP_PACKET_BATCH_FOR_EACH (packet, batch) {
iov[i].iov_base = dp_packet_data(packet);
- iov[i].iov_len = dp_packet_get_send_len(packet);
+ iov[i].iov_len = dp_packet_size(packet);
mmsg[i].msg_hdr = (struct msghdr) { .msg_name = &sll,
.msg_namelen = sizeof sll,
.msg_iov = &iov[i],
@@ -1235,7 +1235,7 @@ netdev_linux_tap_batch_send(struct netdev *netdev_,
struct netdev_linux *netdev = netdev_linux_cast(netdev_);
struct dp_packet *packet;
DP_PACKET_BATCH_FOR_EACH (packet, batch) {
- size_t size = dp_packet_get_send_len(packet);
+ size_t size = dp_packet_size(packet);
ssize_t retval;
int error;
From patchwork Fri Dec 1 15:44:32 2017
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
X-Patchwork-Submitter: Ilya Maximets
X-Patchwork-Id: 843557
X-Patchwork-Delegate: ian.stokes@intel.com
Return-Path:
X-Original-To: incoming@patchwork.ozlabs.org
Delivered-To: patchwork-incoming@bilbo.ozlabs.org
Authentication-Results: ozlabs.org;
spf=pass (mailfrom) smtp.mailfrom=openvswitch.org
(client-ip=140.211.169.12; helo=mail.linuxfoundation.org;
envelope-from=ovs-dev-bounces@openvswitch.org;
receiver=)
Authentication-Results: ozlabs.org;
dkim=fail reason="signature verification failed" (1024-bit key;
unprotected) header.d=samsung.com header.i=@samsung.com
header.b="WYMaTEvd"; dkim-atps=neutral
Received: from mail.linuxfoundation.org (mail.linuxfoundation.org
[140.211.169.12])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256
bits)) (No client certificate requested)
by ozlabs.org (Postfix) with ESMTPS id 3ypJcb0ZNCz9s9Y
for ;
Sat, 2 Dec 2017 02:49:51 +1100 (AEDT)
Received: from mail.linux-foundation.org (localhost [127.0.0.1])
by mail.linuxfoundation.org (Postfix) with ESMTP id 47ECAC9B;
Fri, 1 Dec 2017 15:45:03 +0000 (UTC)
X-Original-To: ovs-dev@openvswitch.org
Delivered-To: ovs-dev@mail.linuxfoundation.org
Received: from smtp1.linuxfoundation.org (smtp1.linux-foundation.org
[172.17.192.35])
by mail.linuxfoundation.org (Postfix) with ESMTPS id 09489C96
for ; Fri, 1 Dec 2017 15:45:02 +0000 (UTC)
X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6
Received: from mailout2.w1.samsung.com (mailout2.w1.samsung.com
[210.118.77.12])
by smtp1.linuxfoundation.org (Postfix) with ESMTPS id C0B2447E
for ; Fri, 1 Dec 2017 15:45:00 +0000 (UTC)
Received: from eucas1p1.samsung.com (unknown [182.198.249.206])
by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id
20171201154458euoutp0284d6f7e5e906cc0a5ad7a78f357b95aa~8NiLxlujt3158431584euoutp02q;
Fri, 1 Dec 2017 15:44:58 +0000 (GMT)
DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com
20171201154458euoutp0284d6f7e5e906cc0a5ad7a78f357b95aa~8NiLxlujt3158431584euoutp02q
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com;
s=mail20170921; t=1512143098;
bh=FLSiE9ilikcjX1Z71ad2eC4vCxh+5NRJjx/VvWtaTkM=;
h=From:To:Cc:Subject:Date:In-reply-to:References:From;
b=WYMaTEvd1fsxzv0uAXY+F92Qd30h223aojONy2l8Yybrd0cBzBAf1q5iphD0KLu6D
R+pXGqRgRAXnHsiVDF1esAcoaSjnj44+4MUttrVTHCDk9FniIFENh975BSv3ne/u+F
VWOG9Nv9kVe2I7zBM+qw/A/G648gUZpzwoc/ywD4=
Received: from eusmges2.samsung.com (unknown [203.254.199.241]) by
eucas1p1.samsung.com (KnoxPortal) with ESMTP id
20171201154457eucas1p1d03544de24d70ace5087145a1996e545~8NiK4b2RP0124001240eucas1p1n;
Fri, 1 Dec 2017 15:44:57 +0000 (GMT)
Received: from eucas1p1.samsung.com ( [182.198.249.206]) by
eusmges2.samsung.com (EUCPMTA) with SMTP id 5E.77.12907.9F8712A5;
Fri, 1 Dec 2017 15:44:57 +0000 (GMT)
Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by
eucas1p2.samsung.com (KnoxPortal) with ESMTP id
20171201154456eucas1p2826604deb3abcce765fba5e74656d630~8NiKF_w8e0895008950eucas1p27;
Fri, 1 Dec 2017 15:44:56 +0000 (GMT)
X-AuditID: cbfec7f1-f793a6d00000326b-39-5a2178f9ac54
Received: from eusync3.samsung.com ( [203.254.199.213]) by
eusmgms1.samsung.com (EUCPMTA) with SMTP id A2.82.18832.8F8712A5;
Fri, 1 Dec 2017 15:44:56 +0000 (GMT)
Received: from imaximets.rnd.samsung.ru ([106.109.129.180]) by
eusync3.samsung.com (Oracle Communications Messaging Server
7.0.5.31.0 64bit (built May 5 2014)) with ESMTPA id
<0P0A00BWSH2B5A50@eusync3.samsung.com>;
Fri, 01 Dec 2017 15:44:56 +0000 (GMT)
From: Ilya Maximets
To: ovs-dev@openvswitch.org, Bhanuprakash Bodireddy
Date: Fri, 01 Dec 2017 18:44:32 +0300
Message-id: <1512143073-22347-7-git-send-email-i.maximets@samsung.com>
X-Mailer: git-send-email 2.7.4
In-reply-to: <1512143073-22347-1-git-send-email-i.maximets@samsung.com>
X-Brightmail-Tracker:
H4sIAAAAAAAAA+NgFjrHIsWRmVeSWpSXmKPExsWy7djPc7o/KxSjDOa2iVus/sVpsfOZskVL
/0xmiztXfrJZTPt8m93iSvtPdouND8+yWhz5fprRYu2hD+wWcz89Z3Tg8vj19Sqbx+I9L5k8
nt38z+jxfh+Q27dlFWMAaxSXTUpqTmZZapG+XQJXxu7L85kK3ncyVhzY0MDewLg7qYuRk0NC
wERi25tVzBC2mMSFe+vZuhi5OIQEljJKTL95lAnC+cwoMbdhCwtMR9uB84wQiWWMEr/6f0A5
zUwS887tBqtiE9CROLX6CCOILSIQIfHg+yx2kCJmgdNMEm82LQJbKCzgIHHn7RnWLkYODhYB
VYl72wVBwrwCbhK7ttyAuklO4ua5TmaQEk4Bd4kjv8VBxkgILGGTmPXlOBNEjYvEpBk3WCFs
YYlXx7ewQ9gyEp0dB5kgGpoZJRpWXWKEcCYwSnxpXg7VbS9x6uZVMJtZgE9i0rbpYNskBHgl
OtqEIEo8JDqPL4d631Hi+Z7/rBAfz2KUeL50LuMERukFjAyrGEVSS4tz01OLjfSKE3OLS/PS
9ZLzczcxAmP59L/jH3cwvj9hdYhRgINRiYeXIVwxSog1say4MvcQowQHs5IIb1YJUIg3JbGy
KrUoP76oNCe1+BCjNAeLkjivbVRbpJBAemJJanZqakFqEUyWiYNTqoFxRo83t8uTvrg9TzY/
/LmygOH23cn5cVrLNAJPSDbG+GsWzd2lZdngrXI6UafQZNZbk8tKDN0/r6kWuWpv9pjyWP5p
V4XG9hVTjppfCQiMP/Z6q8bVxisSq1iqb4jePPGpulf/d5r7xObdca3BK24LFk/+5fL7a5/m
zDmnUnfNTRSx3t61Y0aCEktxRqKhFnNRcSIA63rTN+ECAAA=
X-Brightmail-Tracker:
H4sIAAAAAAAAA+NgFlrILMWRmVeSWpSXmKPExsVy+t/xq7o/KhSjDDZ361us/sVpsfOZskVL
/0xmiztXfrJZTPt8m93iSvtPdouND8+yWhz5fprRYu2hD+wWcz89Z3Tg8vj19Sqbx+I9L5k8
nt38z+jxfh+Q27dlFWMAaxSXTUpqTmZZapG+XQJXxu7L85kK3ncyVhzY0MDewLg7qYuRk0NC
wESi7cB5RghbTOLCvfVsXYxcHEICSxglliw5zwThtDJJrDp2kQ2kik1AR+LU6iNgHSICERIt
c9YzghQxC5xlkmg9fRysSFjAQeLO2zOsXYwcHCwCqhL3tguChHkF3CR2bbnBDLFNTuLmuU5m
kBJOAXeJI7/FQcJCQCX7d+9gnMDIu4CRYRWjSGppcW56brGhXnFibnFpXrpecn7uJkZgwG07
9nPzDsZLG4MPMQpwMCrx8K4IUYwSYk0sK67MPcQowcGsJMKbVQIU4k1JrKxKLcqPLyrNSS0+
xCjNwaIkztu7Z3WkkEB6YklqdmpqQWoRTJaJg1OqgdFv1To/HcEvKctj+viXvjwi0Coov7zW
Jmuh1tPj+uu87H8KNK8q8uTLYO2fKaNgo39GIY5da+G1KO66Cd/ehW8X9jZSkI3LzTnvvmXx
tPR3zBGL95fM2jmXs8dzfbKwbWFKWpztBe1jZbcaA3R+8pq9+szSPP+m5YFfLG9jv39x6v26
S3/nMiWW4oxEQy3mouJEAEboUSs0AgAA
X-CMS-MailID: 20171201154456eucas1p2826604deb3abcce765fba5e74656d630
X-Msg-Generator: CA
CMS-TYPE: 201P
X-CMS-RootMailID: 20171201154456eucas1p2826604deb3abcce765fba5e74656d630
X-RootMTR: 20171201154456eucas1p2826604deb3abcce765fba5e74656d630
References: <1512143073-22347-1-git-send-email-i.maximets@samsung.com>
X-Spam-Status: No, score=-7.0 required=5.0 tests=BAYES_00,DKIM_SIGNED,
DKIM_VALID, DKIM_VALID_AU, RCVD_IN_DNSWL_HI,
T_RP_MATCHES_RCVD autolearn=ham version=3.3.1
X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on
smtp1.linux-foundation.org
Cc: Heetae Ahn ,
Ilya Maximets
Subject: [ovs-dev] [PATCH v6 6/7] dpif-netdev: Time based output batching.
X-BeenThere: ovs-dev@openvswitch.org
X-Mailman-Version: 2.1.12
Precedence: list
List-Id:
List-Unsubscribe: ,
List-Archive:
List-Post:
List-Help:
List-Subscribe: ,
MIME-Version: 1.0
Sender: ovs-dev-bounces@openvswitch.org
Errors-To: ovs-dev-bounces@openvswitch.org
This allows to collect packets from more than one RX burst
and send them together with a configurable intervals.
'other_config:tx-flush-interval' can be used to configure
time that a packet can wait in output batch for sending.
dpif-netdev turned to microsecond resolution for time
measuring to ensure desired resolution of 'tx-flush-interval'.
Signed-off-by: Ilya Maximets
---
lib/dpif-netdev.c | 151 +++++++++++++++++++++++++++++++++++++++------------
vswitchd/vswitch.xml | 16 ++++++
2 files changed, 132 insertions(+), 35 deletions(-)
diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c
index 68c35fa..da6b7b8 100644
--- a/lib/dpif-netdev.c
+++ b/lib/dpif-netdev.c
@@ -85,6 +85,9 @@ VLOG_DEFINE_THIS_MODULE(dpif_netdev);
#define MAX_RECIRC_DEPTH 6
DEFINE_STATIC_PER_THREAD_DATA(uint32_t, recirc_depth, 0)
+/* Use instant packet send by default. */
+#define DEFAULT_TX_FLUSH_INTERVAL 0
+
/* Configuration parameters. */
enum { MAX_FLOWS = 65536 }; /* Maximum number of flows in flow table. */
enum { MAX_METERS = 65536 }; /* Maximum number of meters. */
@@ -178,12 +181,13 @@ struct emc_cache {
/* Simple non-wildcarding single-priority classifier. */
-/* Time in ms between successive optimizations of the dpcls subtable vector */
-#define DPCLS_OPTIMIZATION_INTERVAL 1000
+/* Time in microseconds between successive optimizations of the dpcls
+ * subtable vector */
+#define DPCLS_OPTIMIZATION_INTERVAL 1000000LL
-/* Time in ms of the interval in which rxq processing cycles used in
- * rxq to pmd assignments is measured and stored. */
-#define PMD_RXQ_INTERVAL_LEN 10000
+/* Time in microseconds of the interval in which rxq processing cycles used
+ * in rxq to pmd assignments is measured and stored. */
+#define PMD_RXQ_INTERVAL_LEN 10000000LL
/* Number of intervals for which cycles are stored
* and used during rxq to pmd assignment. */
@@ -270,6 +274,9 @@ struct dp_netdev {
struct hmap ports;
struct seq *port_seq; /* Incremented whenever a port changes. */
+ /* The time that a packet can wait in output batch for sending. */
+ atomic_uint32_t tx_flush_interval;
+
/* Meters. */
struct ovs_mutex meter_locks[N_METER_LOCKS];
struct dp_meter *meters[MAX_METERS]; /* Meter bands. */
@@ -356,7 +363,7 @@ enum rxq_cycles_counter_type {
RXQ_N_CYCLES
};
-#define XPS_TIMEOUT_MS 500LL
+#define XPS_TIMEOUT 500000LL /* In microseconds. */
/* Contained by struct dp_netdev_port's 'rxqs' member. */
struct dp_netdev_rxq {
@@ -526,6 +533,7 @@ struct tx_port {
int qid;
long long last_used;
struct hmap_node node;
+ long long flush_time;
struct dp_packet_batch output_pkts;
};
@@ -627,10 +635,13 @@ struct dp_netdev_pmd_thread {
* less than 'cmap_count(dp->poll_threads)'. */
uint32_t static_tx_qid;
+ /* Number of filled output batches. */
+ int n_output_batches;
+
unsigned core_id; /* CPU core id of this pmd thread. */
int numa_id; /* numa node id of this pmd thread. */
- /* 20 pad bytes. */
+ /* 16 pad bytes. */
);
PADDED_MEMBERS(CACHE_LINE_SIZE,
@@ -740,8 +751,9 @@ static void dp_netdev_add_rxq_to_pmd(struct dp_netdev_pmd_thread *pmd,
static void dp_netdev_del_rxq_from_pmd(struct dp_netdev_pmd_thread *pmd,
struct rxq_poll *poll)
OVS_REQUIRES(pmd->port_mutex);
-static void
-dp_netdev_pmd_flush_output_packets(struct dp_netdev_pmd_thread *pmd);
+static int
+dp_netdev_pmd_flush_output_packets(struct dp_netdev_pmd_thread *pmd,
+ bool force);
static void reconfigure_datapath(struct dp_netdev *dp)
OVS_REQUIRES(dp->port_mutex);
@@ -832,7 +844,7 @@ emc_cache_slow_sweep(struct emc_cache *flow_cache)
static inline void
pmd_thread_ctx_time_update(struct dp_netdev_pmd_thread *pmd)
{
- pmd->ctx.now = time_msec();
+ pmd->ctx.now = time_usec();
}
/* Returns true if 'dpif' is a netdev or dummy dpif, false otherwise. */
@@ -1332,6 +1344,7 @@ create_dp_netdev(const char *name, const struct dpif_class *class,
conntrack_init(&dp->conntrack);
atomic_init(&dp->emc_insert_min, DEFAULT_EM_FLOW_INSERT_MIN);
+ atomic_init(&dp->tx_flush_interval, DEFAULT_TX_FLUSH_INTERVAL);
cmap_init(&dp->poll_threads);
@@ -2999,7 +3012,7 @@ dpif_netdev_execute(struct dpif *dpif, struct dpif_execute *execute)
dp_packet_batch_init_packet(&pp, execute->packet);
dp_netdev_execute_actions(pmd, &pp, false, execute->flow,
execute->actions, execute->actions_len);
- dp_netdev_pmd_flush_output_packets(pmd);
+ dp_netdev_pmd_flush_output_packets(pmd, true);
if (pmd->core_id == NON_PMD_CORE_ID) {
ovs_mutex_unlock(&dp->non_pmd_mutex);
@@ -3048,6 +3061,16 @@ dpif_netdev_set_config(struct dpif *dpif, const struct smap *other_config)
smap_get_ullong(other_config, "emc-insert-inv-prob",
DEFAULT_EM_FLOW_INSERT_INV_PROB);
uint32_t insert_min, cur_min;
+ uint32_t tx_flush_interval, cur_tx_flush_interval;
+
+ tx_flush_interval = smap_get_int(other_config, "tx-flush-interval",
+ DEFAULT_TX_FLUSH_INTERVAL);
+ atomic_read_relaxed(&dp->tx_flush_interval, &cur_tx_flush_interval);
+ if (tx_flush_interval != cur_tx_flush_interval) {
+ atomic_store_relaxed(&dp->tx_flush_interval, tx_flush_interval);
+ VLOG_INFO("Flushing interval for tx queues set to %"PRIu32" us",
+ tx_flush_interval);
+ }
if (!nullable_string_is_equal(dp->pmd_cmask, cmask)) {
free(dp->pmd_cmask);
@@ -3286,12 +3309,14 @@ dp_netdev_rxq_get_intrvl_cycles(struct dp_netdev_rxq *rx, unsigned idx)
return processing_cycles;
}
-static void
+static int
dp_netdev_pmd_flush_output_on_port(struct dp_netdev_pmd_thread *pmd,
struct tx_port *p)
{
int tx_qid;
+ int output_cnt;
bool dynamic_txqs;
+ uint32_t tx_flush_interval;
dynamic_txqs = p->port->dynamic_txqs;
if (dynamic_txqs) {
@@ -3300,20 +3325,40 @@ dp_netdev_pmd_flush_output_on_port(struct dp_netdev_pmd_thread *pmd,
tx_qid = pmd->static_tx_qid;
}
+ output_cnt = dp_packet_batch_size(&p->output_pkts);
+ ovs_assert(output_cnt > 0);
+
netdev_send(p->port->netdev, tx_qid, &p->output_pkts, dynamic_txqs);
dp_packet_batch_init(&p->output_pkts);
+
+ /* Update time of the next flush. */
+ atomic_read_relaxed(&pmd->dp->tx_flush_interval, &tx_flush_interval);
+ p->flush_time = pmd->ctx.now + tx_flush_interval;
+
+ ovs_assert(pmd->n_output_batches > 0);
+ pmd->n_output_batches--;
+
+ return output_cnt;
}
-static void
-dp_netdev_pmd_flush_output_packets(struct dp_netdev_pmd_thread *pmd)
+static int
+dp_netdev_pmd_flush_output_packets(struct dp_netdev_pmd_thread *pmd,
+ bool force)
{
struct tx_port *p;
+ int output_cnt = 0;
+
+ if (!pmd->n_output_batches) {
+ return 0;
+ }
HMAP_FOR_EACH (p, node, &pmd->send_port_cache) {
- if (!dp_packet_batch_is_empty(&p->output_pkts)) {
- dp_netdev_pmd_flush_output_on_port(pmd, p);
+ if (!dp_packet_batch_is_empty(&p->output_pkts)
+ && (force || pmd->ctx.now >= p->flush_time)) {
+ output_cnt += dp_netdev_pmd_flush_output_on_port(pmd, p);
}
}
+ return output_cnt;
}
static int
@@ -3323,7 +3368,7 @@ dp_netdev_process_rxq_port(struct dp_netdev_pmd_thread *pmd,
{
struct dp_packet_batch batch;
int error;
- int batch_cnt = 0;
+ int batch_cnt = 0, output_cnt = 0;
dp_packet_batch_init(&batch);
error = netdev_rxq_recv(rx, &batch);
@@ -3333,7 +3378,7 @@ dp_netdev_process_rxq_port(struct dp_netdev_pmd_thread *pmd,
batch_cnt = batch.count;
dp_netdev_input(pmd, &batch, port_no);
- dp_netdev_pmd_flush_output_packets(pmd);
+ output_cnt = dp_netdev_pmd_flush_output_packets(pmd, false);
} else if (error != EAGAIN && error != EOPNOTSUPP) {
static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5);
@@ -3341,7 +3386,7 @@ dp_netdev_process_rxq_port(struct dp_netdev_pmd_thread *pmd,
netdev_rxq_get_name(rx), ovs_strerror(error));
}
- return batch_cnt;
+ return batch_cnt + output_cnt;
}
static struct tx_port *
@@ -3951,7 +3996,8 @@ dpif_netdev_run(struct dpif *dpif)
struct dp_netdev *dp = get_dp_netdev(dpif);
struct dp_netdev_pmd_thread *non_pmd;
uint64_t new_tnl_seq;
- int process_packets = 0;
+ int process_packets;
+ bool need_to_flush = true;
ovs_mutex_lock(&dp->port_mutex);
non_pmd = dp_netdev_get_pmd(dp, NON_PMD_CORE_ID);
@@ -3971,11 +4017,25 @@ dpif_netdev_run(struct dpif *dpif)
process_packets
? PMD_CYCLES_PROCESSING
: PMD_CYCLES_IDLE);
+ if (process_packets) {
+ need_to_flush = false;
+ }
}
}
}
+ if (need_to_flush) {
+ /* We didn't receive anything in the process loop.
+ * Check if we need to send something.
+ * There was no time updates on current iteration. */
+ pmd_thread_ctx_time_update(non_pmd);
+ process_packets = dp_netdev_pmd_flush_output_packets(non_pmd,
+ false);
+ cycles_count_intermediate(non_pmd, NULL, process_packets
+ ? PMD_CYCLES_PROCESSING
+ : PMD_CYCLES_IDLE);
+ }
+
cycles_count_end(non_pmd, PMD_CYCLES_IDLE);
- pmd_thread_ctx_time_update(non_pmd);
dpif_netdev_xps_revalidate_pmd(non_pmd, false);
ovs_mutex_unlock(&dp->non_pmd_mutex);
@@ -4026,6 +4086,8 @@ pmd_free_cached_ports(struct dp_netdev_pmd_thread *pmd)
{
struct tx_port *tx_port_cached;
+ /* Flush all the queued packets. */
+ dp_netdev_pmd_flush_output_packets(pmd, true);
/* Free all used tx queue ids. */
dpif_netdev_xps_revalidate_pmd(pmd, true);
@@ -4124,7 +4186,6 @@ pmd_thread_main(void *f_)
bool exiting;
int poll_cnt;
int i;
- int process_packets = 0;
poll_list = NULL;
@@ -4154,6 +4215,9 @@ reload:
cycles_count_start(pmd);
for (;;) {
+ int process_packets;
+ bool need_to_flush = true;
+
for (i = 0; i < poll_cnt; i++) {
process_packets =
dp_netdev_process_rxq_port(pmd, poll_list[i].rxq->rx,
@@ -4161,6 +4225,20 @@ reload:
cycles_count_intermediate(pmd, poll_list[i].rxq,
process_packets ? PMD_CYCLES_PROCESSING
: PMD_CYCLES_IDLE);
+ if (process_packets) {
+ need_to_flush = false;
+ }
+ }
+
+ if (need_to_flush) {
+ /* We didn't receive anything in the process loop.
+ * Check if we need to send something.
+ * There was no time updates on current iteration. */
+ pmd_thread_ctx_time_update(pmd);
+ process_packets = dp_netdev_pmd_flush_output_packets(pmd, false);
+ cycles_count_intermediate(pmd, NULL,
+ process_packets ? PMD_CYCLES_PROCESSING
+ : PMD_CYCLES_IDLE);
}
if (lc++ > 1024) {
@@ -4169,9 +4247,6 @@ reload:
lc = 0;
coverage_try_clear();
- /* It's possible that the time was not updated on current
- * iteration, if there were no received packets. */
- pmd_thread_ctx_time_update(pmd);
dp_netdev_pmd_try_optimize(pmd, poll_list, poll_cnt);
if (!ovsrcu_try_quiesce()) {
emc_cache_slow_sweep(&pmd->flow_cache);
@@ -4257,7 +4332,7 @@ dp_netdev_run_meter(struct dp_netdev *dp, struct dp_packet_batch *packets_,
memset(exceeded_rate, 0, cnt * sizeof *exceeded_rate);
/* All packets will hit the meter at the same time. */
- long_delta_t = (now - meter->used); /* msec */
+ long_delta_t = (now - meter->used) / 1000; /* msec */
/* Make sure delta_t will not be too large, so that bucket will not
* wrap around below. */
@@ -4413,7 +4488,7 @@ dpif_netdev_meter_set(struct dpif *dpif, ofproto_meter_id *meter_id,
meter->flags = config->flags;
meter->n_bands = config->n_bands;
meter->max_delta_t = 0;
- meter->used = time_msec();
+ meter->used = time_usec();
/* set up bands */
for (i = 0; i < config->n_bands; ++i) {
@@ -4611,6 +4686,7 @@ dp_netdev_configure_pmd(struct dp_netdev_pmd_thread *pmd, struct dp_netdev *dp,
pmd->core_id = core_id;
pmd->numa_id = numa_id;
pmd->need_reload = false;
+ pmd->n_output_batches = 0;
ovs_refcount_init(&pmd->ref_cnt);
latch_init(&pmd->exit_latch);
@@ -4798,6 +4874,7 @@ dp_netdev_add_port_tx_to_pmd(struct dp_netdev_pmd_thread *pmd,
tx->port = port;
tx->qid = -1;
+ tx->flush_time = 0LL;
dp_packet_batch_init(&tx->output_pkts);
hmap_insert(&pmd->tx_ports, &tx->node, hash_port_no(tx->port->port_no));
@@ -4961,7 +5038,7 @@ packet_batch_per_flow_execute(struct packet_batch_per_flow *batch,
struct dp_netdev_flow *flow = batch->flow;
dp_netdev_flow_used(flow, batch->array.count, batch->byte_count,
- batch->tcp_flags, pmd->ctx.now);
+ batch->tcp_flags, pmd->ctx.now / 1000);
actions = dp_netdev_flow_get_actions(flow);
@@ -5336,7 +5413,7 @@ dpif_netdev_xps_revalidate_pmd(const struct dp_netdev_pmd_thread *pmd,
continue;
}
interval = pmd->ctx.now - tx->last_used;
- if (tx->qid >= 0 && (purge || interval >= XPS_TIMEOUT_MS)) {
+ if (tx->qid >= 0 && (purge || interval >= XPS_TIMEOUT)) {
port = tx->port;
ovs_mutex_lock(&port->txq_used_mutex);
port->txq_used[tx->qid]--;
@@ -5357,7 +5434,7 @@ dpif_netdev_xps_get_tx_qid(const struct dp_netdev_pmd_thread *pmd,
interval = pmd->ctx.now - tx->last_used;
tx->last_used = pmd->ctx.now;
- if (OVS_LIKELY(tx->qid >= 0 && interval < XPS_TIMEOUT_MS)) {
+ if (OVS_LIKELY(tx->qid >= 0 && interval < XPS_TIMEOUT)) {
return tx->qid;
}
@@ -5489,12 +5566,16 @@ dp_execute_cb(void *aux_, struct dp_packet_batch *packets_,
dp_netdev_pmd_flush_output_on_port(pmd, p);
}
#endif
- if (OVS_UNLIKELY(dp_packet_batch_size(&p->output_pkts)
- + dp_packet_batch_size(packets_) > NETDEV_MAX_BURST)) {
- /* Some packets was generated while input batch processing.
- * Flush here to avoid overflow. */
+ if (dp_packet_batch_size(&p->output_pkts)
+ + dp_packet_batch_size(packets_) > NETDEV_MAX_BURST) {
+ /* Flush here to avoid overflow. */
dp_netdev_pmd_flush_output_on_port(pmd, p);
}
+
+ if (dp_packet_batch_is_empty(&p->output_pkts)) {
+ pmd->n_output_batches++;
+ }
+
DP_PACKET_BATCH_FOR_EACH (packet, packets_) {
dp_packet_batch_add(&p->output_pkts, packet);
}
@@ -5735,7 +5816,7 @@ dp_execute_cb(void *aux_, struct dp_packet_batch *packets_,
conntrack_execute(&dp->conntrack, packets_, aux->flow->dl_type, force,
commit, zone, setmark, setlabel, helper,
- nat_action_info_ref, pmd->ctx.now);
+ nat_action_info_ref, pmd->ctx.now / 1000);
break;
}
diff --git a/vswitchd/vswitch.xml b/vswitchd/vswitch.xml
index c145e1a..ef34fe6 100644
--- a/vswitchd/vswitch.xml
+++ b/vswitchd/vswitch.xml
@@ -344,6 +344,22 @@
+
+
+ Specifies the time in microseconds that a packet can wait in output
+ batch for sending i.e. amount of time that packet can spend in an
+ intermediate output queue before sending to netdev.
+ This option can be used to configure balance between throughput
+ and latency. Lower values decreases latency while higher values
+ may be useful to achieve higher performance.
+
+
+ Defaults to 0 i.e. instant packet sending (latency optimized).
+
+
+
From patchwork Fri Dec 1 15:44:33 2017
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
X-Patchwork-Submitter: Ilya Maximets
X-Patchwork-Id: 843558
X-Patchwork-Delegate: ian.stokes@intel.com
Return-Path:
X-Original-To: incoming@patchwork.ozlabs.org
Delivered-To: patchwork-incoming@bilbo.ozlabs.org
Authentication-Results: ozlabs.org;
spf=pass (mailfrom) smtp.mailfrom=openvswitch.org
(client-ip=140.211.169.12; helo=mail.linuxfoundation.org;
envelope-from=ovs-dev-bounces@openvswitch.org;
receiver=)
Authentication-Results: ozlabs.org;
dkim=fail reason="signature verification failed" (1024-bit key;
unprotected) header.d=samsung.com header.i=@samsung.com
header.b="rf/sXbEC"; dkim-atps=neutral
Received: from mail.linuxfoundation.org (mail.linuxfoundation.org
[140.211.169.12])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256
bits)) (No client certificate requested)
by ozlabs.org (Postfix) with ESMTPS id 3ypJdN2WNFz9s9Y
for ;
Sat, 2 Dec 2017 02:50:32 +1100 (AEDT)
Received: from mail.linux-foundation.org (localhost [127.0.0.1])
by mail.linuxfoundation.org (Postfix) with ESMTP id 27D1FCA6;
Fri, 1 Dec 2017 15:45:05 +0000 (UTC)
X-Original-To: ovs-dev@openvswitch.org
Delivered-To: ovs-dev@mail.linuxfoundation.org
Received: from smtp1.linuxfoundation.org (smtp1.linux-foundation.org
[172.17.192.35])
by mail.linuxfoundation.org (Postfix) with ESMTPS id AF8FECA4
for ; Fri, 1 Dec 2017 15:45:03 +0000 (UTC)
X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6
Received: from mailout2.w1.samsung.com (mailout2.w1.samsung.com
[210.118.77.12])
by smtp1.linuxfoundation.org (Postfix) with ESMTPS id 412E547E
for ; Fri, 1 Dec 2017 15:45:03 +0000 (UTC)
Received: from eucas1p2.samsung.com (unknown [182.198.249.207])
by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id
20171201154501euoutp027caf46f1e744050e3d9d68c9ef60ed92~8NiOJaA--3160831608euoutp02p;
Fri, 1 Dec 2017 15:45:01 +0000 (GMT)
DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com
20171201154501euoutp027caf46f1e744050e3d9d68c9ef60ed92~8NiOJaA--3160831608euoutp02p
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com;
s=mail20170921; t=1512143101;
bh=HGu3gADjHT24MRaGblJDX9Q818hdpNEVioV3sgIV23o=;
h=From:To:Cc:Subject:Date:In-reply-to:References:From;
b=rf/sXbECYlo62d+JWHdEUqJzWV7/qFm32jUpsH9zQhQvsSjskaYzAGCqMstfiDfHd
T/9I+nL7TyN/SV5cZUq5fRunhtPdZB5ScnHLZz90qXyWXEQUgmQOKIi399pciXBM1k
3RprHUU1844hPN5aV+53xzM0GNhcSZq0ufdAsYtU=
Received: from eusmges2.samsung.com (unknown [203.254.199.241]) by
eucas1p1.samsung.com (KnoxPortal) with ESMTP id
20171201154500eucas1p18a07320b1a5e98393621267e112ec74a~8NiNa4uBn2809828098eucas1p1j;
Fri, 1 Dec 2017 15:45:00 +0000 (GMT)
Received: from eucas1p1.samsung.com ( [182.198.249.206]) by
eusmges2.samsung.com (EUCPMTA) with SMTP id 2F.77.12907.CF8712A5;
Fri, 1 Dec 2017 15:45:00 +0000 (GMT)
Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by
eucas1p2.samsung.com (KnoxPortal) with ESMTP id
20171201154459eucas1p25ea8dba3d672c6c93e971a3accfe1240~8NiMrpblf1819018190eucas1p2Y;
Fri, 1 Dec 2017 15:44:59 +0000 (GMT)
X-AuditID: cbfec7f1-f793a6d00000326b-3e-5a2178fc501a
Received: from eusync3.samsung.com ( [203.254.199.213]) by
eusmgms1.samsung.com (EUCPMTA) with SMTP id 64.82.18832.BF8712A5;
Fri, 1 Dec 2017 15:44:59 +0000 (GMT)
Received: from imaximets.rnd.samsung.ru ([106.109.129.180]) by
eusync3.samsung.com (Oracle Communications Messaging Server
7.0.5.31.0 64bit (built May 5 2014)) with ESMTPA id
<0P0A00BWSH2B5A50@eusync3.samsung.com>;
Fri, 01 Dec 2017 15:44:59 +0000 (GMT)
From: Ilya Maximets
To: ovs-dev@openvswitch.org, Bhanuprakash Bodireddy
Date: Fri, 01 Dec 2017 18:44:33 +0300
Message-id: <1512143073-22347-8-git-send-email-i.maximets@samsung.com>
X-Mailer: git-send-email 2.7.4
In-reply-to: <1512143073-22347-1-git-send-email-i.maximets@samsung.com>
X-Brightmail-Tracker:
H4sIAAAAAAAAA+NgFjrDIsWRmVeSWpSXmKPExsWy7djPc7p/KhSjDG7fZLNY/YvTYuczZYuW
/pnMFneu/GSzmPb5NrvFlfaf7BYbH55ltTjy/TSjxdpDH9gt5n56zujA5fHr61U2j8V7XjJ5
PLv5n9Hj/T4gt2/LKsYA1igum5TUnMyy1CJ9uwSujINHXzIVfBar2P/1HUsD40SBLkYODgkB
E4kPt+u6GDmBTDGJC/fWs4HYQgJLGSUOzsvrYuQCsj8zSuzb+JENoshE4sCPjUwQiWWMEj8m
XIRympkk5ryfyQ5SxSagI3Fq9RFGEFtEIELiwfdZ7CBFzAKnmSTebFrEDJIQFnCRmHHoJBOI
zSKgKvFyxU8wm1fATeLvwY3sEOvkJG6e62QGOZVTwF3iyG9xkDkSAkvYJK6dPMEIUeMi0Xl4
M5QtLPHq+BaoXhmJzo6DTBANzYwSDasuMUI4ExglvjQvZ4Kospc4dfMqmM0swCcxadt0ZkjA
8Ep0tAlBlHhIXDw6A+p/R4mJs88yQ7w8i1HixZezrBMYpRcwMqxiFEktLc5NTy020itOzC0u
zUvXS87P3cQIjOPT/45/3MH4/oTVIUYBDkYlHl6GcMUoIdbEsuLK3EOMEhzMSiK8WSVAId6U
xMqq1KL8+KLSnNTiQ4zSHCxK4ry2UW2RQgLpiSWp2ampBalFMFkmDk6pBkavaXZnmHbWCUTx
xbAvsrIOXMZ0JzKjcMPsXUy934VqLH64SuY5Oq9/pHSn+lPI0u1/I2pzagsCs747iwrunmRy
1O3jtOUZOhnfO/Z/10nX+3I+XtZt0sPUiY1zb/722jEhRaxTYuOVrhvLa5nWmno+CtDx2OLl
VCq6NoHtgMOteTVGF48W5CixFGckGmoxFxUnAgA4cVQL3wIAAA==
X-Brightmail-Tracker:
H4sIAAAAAAAAA+NgFlrILMWRmVeSWpSXmKPExsVy+t/xq7q/KxSjDE6dV7RY/YvTYuczZYuW
/pnMFneu/GSzmPb5NrvFlfaf7BYbH55ltTjy/TSjxdpDH9gt5n56zujA5fHr61U2j8V7XjJ5
PLv5n9Hj/T4gt2/LKsYA1igum5TUnMyy1CJ9uwSujINHXzIVfBar2P/1HUsD40SBLkZODgkB
E4kDPzYyQdhiEhfurWfrYuTiEBJYwihxqX0eK4TTyiRxqXcqWBWbgI7EqdVHGEFsEYEIiZY5
6xlBipgFzjJJtJ4+zgaSEBZwkZhx6CRYA4uAqsTLFT/BbF4BN4m/BzeyQ6yTk7h5rpO5i5GD
g1PAXeLIb3GQsBBQyf7dOxgnMPIuYGRYxSiSWlqcm55bbKhXnJhbXJqXrpecn7uJERhw2479
3LyD8dLG4EOMAhyMSjy8K0IUo4RYE8uKK3MPMUpwMCuJ8GaVAIV4UxIrq1KL8uOLSnNSiw8x
SnOwKInz9u5ZHSkkkJ5YkpqdmlqQWgSTZeLglGpgXLjiffqlvHTGb6WPZ99c8TFK/eb7Ss26
Q1qxd9axcPYc3jp33USWh36tZsX2e3w3yNjFpJfMW3rX7+OKNQcUrX1smF3L1NYLF/EaNSQz
u++7teF4y9qsqtYJWYKKOtekE7aY/71v+35q/HdN2dCZARLXa4t2skne7T72J8t4YcY9w5Zl
vdbVSizFGYmGWsxFxYkAoLgaJDQCAAA=
X-CMS-MailID: 20171201154459eucas1p25ea8dba3d672c6c93e971a3accfe1240
X-Msg-Generator: CA
CMS-TYPE: 201P
X-CMS-RootMailID: 20171201154459eucas1p25ea8dba3d672c6c93e971a3accfe1240
X-RootMTR: 20171201154459eucas1p25ea8dba3d672c6c93e971a3accfe1240
References: <1512143073-22347-1-git-send-email-i.maximets@samsung.com>
X-Spam-Status: No, score=-7.0 required=5.0 tests=BAYES_00,DKIM_SIGNED,
DKIM_VALID, DKIM_VALID_AU, RCVD_IN_DNSWL_HI,
T_RP_MATCHES_RCVD autolearn=ham version=3.3.1
X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on
smtp1.linux-foundation.org
Cc: Heetae Ahn ,
Ilya Maximets
Subject: [ovs-dev] [PATCH v6 7/7] dpif-netdev: Count sent packets and
batches.
X-BeenThere: ovs-dev@openvswitch.org
X-Mailman-Version: 2.1.12
Precedence: list
List-Id:
List-Unsubscribe: ,
List-Archive:
List-Post:
List-Help:
List-Subscribe: ,
MIME-Version: 1.0
Sender: ovs-dev-bounces@openvswitch.org
Errors-To: ovs-dev-bounces@openvswitch.org
Acked-by: Eelco Chaudron
Signed-off-by: Ilya Maximets
---
lib/dpif-netdev.c | 27 ++++++++++++++++++++++-----
1 file changed, 22 insertions(+), 5 deletions(-)
diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c
index da6b7b8..b2b651b 100644
--- a/lib/dpif-netdev.c
+++ b/lib/dpif-netdev.c
@@ -344,6 +344,8 @@ enum dp_stat_type {
DP_STAT_LOST, /* Packets not passed up to the client. */
DP_STAT_LOOKUP_HIT, /* Number of subtable lookups for flow table
hits */
+ DP_STAT_SENT_PKTS, /* Packets that has been sent. */
+ DP_STAT_SENT_BATCHES, /* Number of batches sent. */
DP_N_STATS
};
@@ -515,6 +517,9 @@ struct dp_netdev_pmd_cycles {
atomic_ullong n[PMD_N_CYCLES];
};
+static void dp_netdev_count_packet(struct dp_netdev_pmd_thread *,
+ enum dp_stat_type type, int cnt);
+
struct polled_queue {
struct dp_netdev_rxq *rxq;
odp_port_t port_no;
@@ -881,6 +886,7 @@ pmd_info_show_stats(struct ds *reply,
{
unsigned long long total_packets;
uint64_t total_cycles = 0;
+ double lookups_per_hit = 0, packets_per_batch = 0;
int i;
/* These loops subtracts reference values ('*_zero') from the counters.
@@ -922,15 +928,23 @@ pmd_info_show_stats(struct ds *reply,
}
ds_put_cstr(reply, ":\n");
+ if (stats[DP_STAT_MASKED_HIT] > 0) {
+ lookups_per_hit = stats[DP_STAT_LOOKUP_HIT]
+ / (double) stats[DP_STAT_MASKED_HIT];
+ }
+ if (stats[DP_STAT_SENT_BATCHES] > 0) {
+ packets_per_batch = stats[DP_STAT_SENT_PKTS]
+ / (double) stats[DP_STAT_SENT_BATCHES];
+ }
+
ds_put_format(reply,
"\temc hits:%llu\n\tmegaflow hits:%llu\n"
"\tavg. subtable lookups per hit:%.2f\n"
- "\tmiss:%llu\n\tlost:%llu\n",
+ "\tmiss:%llu\n\tlost:%llu\n"
+ "\tavg. packets per output batch: %.2f\n",
stats[DP_STAT_EXACT_HIT], stats[DP_STAT_MASKED_HIT],
- stats[DP_STAT_MASKED_HIT] > 0
- ? (1.0*stats[DP_STAT_LOOKUP_HIT])/stats[DP_STAT_MASKED_HIT]
- : 0,
- stats[DP_STAT_MISS], stats[DP_STAT_LOST]);
+ lookups_per_hit, stats[DP_STAT_MISS], stats[DP_STAT_LOST],
+ packets_per_batch);
if (total_cycles == 0) {
return;
@@ -3338,6 +3352,9 @@ dp_netdev_pmd_flush_output_on_port(struct dp_netdev_pmd_thread *pmd,
ovs_assert(pmd->n_output_batches > 0);
pmd->n_output_batches--;
+ dp_netdev_count_packet(pmd, DP_STAT_SENT_PKTS, output_cnt);
+ dp_netdev_count_packet(pmd, DP_STAT_SENT_BATCHES, 1);
+
return output_cnt;
}