From: Akhil Goyal <akhil.goyal@nxp.com>
To: "dev@dpdk.org" <dev@dpdk.org>
Cc: "declan.doherty@intel.com" <declan.doherty@intel.com>,
Akhil Goyal <akhil.goyal@nxp.com>
Subject: [dpdk-dev] [PATCH] examples/l2fwd-crypto: support multiprocess
Date: Wed, 27 Mar 2019 11:45:43 +0000 [thread overview]
Message-ID: <20190327113622.13426-1-akhil.goyal@nxp.com> (raw)
additional parameters(mp_emask and mp_cmask) need to be added for
each application instance for ethernet and crypto portmasks which
are actually getting used in that instance. Primary instance of the
application will init all the ports/cdevs and will use only the
mp_emask and mp_cmask for I/O.
net port mask and cryptodev_mask will be same for all the instances
of the application only mp_emask and mp_cmask will be different.
Signed-off-by: Akhil Goyal <akhil.goyal@nxp.com>
---
.../sample_app_ug/l2_forward_crypto.rst | 6 ++
examples/l2fwd-crypto/main.c | 86 +++++++++++++++----
2 files changed, 75 insertions(+), 17 deletions(-)
diff --git a/doc/guides/sample_app_ug/l2_forward_crypto.rst b/doc/guides/sample_app_ug/l2_forward_crypto.rst
index e8d52dad2..c0bb63af2 100644
--- a/doc/guides/sample_app_ug/l2_forward_crypto.rst
+++ b/doc/guides/sample_app_ug/l2_forward_crypto.rst
@@ -152,6 +152,12 @@ where,
* [no-]mac-updating: Enable or disable MAC addresses updating (enabled by default).
+* mp-emask: mask applicable for multiprocess, defining the ethernet ports
+ which would be used by this instance. (Default is all ports).
+
+* mp-cmask: mask applicable for multiprocess, defining the crypto ports
+ which would be used by this instance. (Default is all ports).
+
The application requires that crypto devices capable of performing
the specified crypto operation are available on application initialization.
diff --git a/examples/l2fwd-crypto/main.c b/examples/l2fwd-crypto/main.c
index 9982f07e9..c3ea17ee8 100644
--- a/examples/l2fwd-crypto/main.c
+++ b/examples/l2fwd-crypto/main.c
@@ -168,6 +168,8 @@ struct l2fwd_crypto_options {
uint64_t cryptodev_mask;
unsigned int mac_updating;
+ uint64_t mp_emask;
+ uint64_t mp_cmask;
};
/** l2fwd crypto lcore params */
@@ -254,6 +256,9 @@ struct l2fwd_crypto_statistics crypto_statistics[RTE_CRYPTO_MAX_DEVS];
/* default period is 10 seconds */
static int64_t timer_period = 10 * TIMER_MILLISECOND * 1000;
+/* Process type*/
+static enum rte_proc_type_t proc_type = RTE_PROC_AUTO;
+
/* Print out statistics on packets dropped */
static void
print_stats(void)
@@ -994,7 +999,11 @@ l2fwd_crypto_usage(const char *prgname)
" --[no-]mac-updating: Enable or disable MAC addresses updating (enabled by default)\n"
" When enabled:\n"
" - The source MAC address is replaced by the TX port MAC address\n"
- " - The destination MAC address is replaced by 02:00:00:00:00:TX_PORT_ID\n",
+ " - The destination MAC address is replaced by 02:00:00:00:00:TX_PORT_ID\n"
+ " --mp-emask: mask applicable for multiprocess, defining the ethernet ports\n"
+ " which would be used by this instance. Default is all ports\n"
+ " --mp-cmask: mask applicable for multiprocess, defining the crypto ports\n"
+ " which would be used by this instance. Default is all ports\n",
prgname);
}
@@ -1169,8 +1178,7 @@ parse_aead_op(enum rte_crypto_aead_operation *op, char *optarg)
return -1;
}
static int
-parse_cryptodev_mask(struct l2fwd_crypto_options *options,
- const char *q_arg)
+parse_mask(uint64_t *mask, const char *q_arg, const char *type)
{
char *end = NULL;
uint64_t pm;
@@ -1180,11 +1188,11 @@ parse_cryptodev_mask(struct l2fwd_crypto_options *options,
if ((pm == '\0') || (end == NULL) || (*end != '\0'))
pm = 0;
- options->cryptodev_mask = pm;
- if (options->cryptodev_mask == 0) {
- printf("invalid cryptodev_mask specified\n");
+ if (pm == 0) {
+ printf("invalid %s mask specified\n", type);
return -1;
}
+ *mask = pm;
return 0;
}
@@ -1343,7 +1351,8 @@ l2fwd_crypto_parse_args_long_options(struct l2fwd_crypto_options *options,
}
else if (strcmp(lgopts[option_index].name, "cryptodev_mask") == 0)
- return parse_cryptodev_mask(options, optarg);
+ return parse_mask(&options->cryptodev_mask, optarg,
+ "cryptodev_mask");
else if (strcmp(lgopts[option_index].name, "mac-updating") == 0) {
options->mac_updating = 1;
@@ -1355,6 +1364,12 @@ l2fwd_crypto_parse_args_long_options(struct l2fwd_crypto_options *options,
return 0;
}
+ else if (strcmp(lgopts[option_index].name, "mp-emask") == 0)
+ return parse_mask(&options->mp_emask, optarg, "mp-emask");
+
+ else if (strcmp(lgopts[option_index].name, "mp-cmask") == 0)
+ return parse_mask(&options->mp_cmask, optarg, "mp-cmask");
+
return -1;
}
@@ -1488,6 +1503,8 @@ l2fwd_crypto_default_options(struct l2fwd_crypto_options *options)
options->type = CDEV_TYPE_ANY;
options->cryptodev_mask = UINT64_MAX;
+ options->mp_emask = UINT64_MAX;
+ options->mp_cmask = UINT64_MAX;
options->mac_updating = 1;
}
@@ -1654,6 +1671,9 @@ l2fwd_crypto_parse_args(struct l2fwd_crypto_options *options,
{ "mac-updating", no_argument, 0, 0},
{ "no-mac-updating", no_argument, 0, 0},
+ { "mp-emask", required_argument, 0, 0},
+ { "mp-cmask", required_argument, 0, 0},
+
{ NULL, 0, 0, 0 }
};
@@ -2282,6 +2302,8 @@ initialize_cryptodevs(struct l2fwd_crypto_options *options, unsigned nb_ports,
"priv_sess_mp_%u", socket_id);
session_pool_socket[socket_id].priv_mp =
+ (proc_type == RTE_PROC_SECONDARY) ?
+ rte_mempool_lookup(mp_name) :
rte_mempool_create(mp_name,
sessions_needed,
max_sess_sz,
@@ -2305,6 +2327,8 @@ initialize_cryptodevs(struct l2fwd_crypto_options *options, unsigned nb_ports,
"sess_mp_%u", socket_id);
session_pool_socket[socket_id].sess_mp =
+ (proc_type == RTE_PROC_SECONDARY) ?
+ rte_mempool_lookup(mp_name) :
rte_cryptodev_sym_session_pool_create(
mp_name,
sessions_needed,
@@ -2455,6 +2479,9 @@ initialize_cryptodevs(struct l2fwd_crypto_options *options, unsigned nb_ports,
cap->sym.auth.digest_size.min;
}
+ if (proc_type == RTE_PROC_SECONDARY)
+ goto skip_cdev_init;
+
retval = rte_cryptodev_configure(cdev_id, &conf);
if (retval < 0) {
printf("Failed to configure cryptodev %u", cdev_id);
@@ -2480,6 +2507,12 @@ initialize_cryptodevs(struct l2fwd_crypto_options *options, unsigned nb_ports,
cdev_id, retval);
return -1;
}
+skip_cdev_init:
+ if ((options->mp_cmask & (1 << cdev_id)) != 0) {
+ l2fwd_enabled_crypto_mask |= (((uint64_t)1) << cdev_id);
+ enabled_cdevs[cdev_id] = 1;
+ enabled_cdev_count++;
+ }
}
return enabled_cdev_count;
@@ -2512,6 +2545,9 @@ initialize_ports(struct l2fwd_crypto_options *options)
if ((options->portmask & (1 << portid)) == 0)
continue;
+ if (proc_type == RTE_PROC_SECONDARY)
+ goto skip_port_init;
+
/* init port */
printf("Initializing port %u... ", portid);
fflush(stdout);
@@ -2570,7 +2606,7 @@ initialize_ports(struct l2fwd_crypto_options *options)
}
rte_eth_promiscuous_enable(portid);
-
+skip_port_init:
rte_eth_macaddr_get(portid, &l2fwd_ports_eth_addr[portid]);
printf("Port %u, MAC address: %02X:%02X:%02X:%02X:%02X:%02X\n\n",
@@ -2593,8 +2629,10 @@ initialize_ports(struct l2fwd_crypto_options *options)
last_portid = portid;
}
- l2fwd_enabled_port_mask |= (1 << portid);
- enabled_portcount++;
+ if ((options->mp_emask & (1 << portid)) != 0) {
+ l2fwd_enabled_port_mask |= (1 << portid);
+ enabled_portcount++;
+ }
}
if (enabled_portcount == 1) {
@@ -2675,17 +2713,22 @@ main(int argc, char **argv)
printf("MAC updating %s\n",
options.mac_updating ? "enabled" : "disabled");
+ proc_type = rte_eal_process_type();
/* create the mbuf pool */
- l2fwd_pktmbuf_pool = rte_pktmbuf_pool_create("mbuf_pool", NB_MBUF, 512,
- sizeof(struct rte_crypto_op),
- RTE_MBUF_DEFAULT_BUF_SIZE, rte_socket_id());
+ l2fwd_pktmbuf_pool = (proc_type == RTE_PROC_SECONDARY) ?
+ rte_mempool_lookup("mbuf_pool") :
+ rte_pktmbuf_pool_create("mbuf_pool", NB_MBUF, 512,
+ sizeof(struct rte_crypto_op),
+ RTE_MBUF_DEFAULT_BUF_SIZE, rte_socket_id());
if (l2fwd_pktmbuf_pool == NULL)
rte_exit(EXIT_FAILURE, "Cannot create mbuf pool\n");
/* create crypto op pool */
- l2fwd_crypto_op_pool = rte_crypto_op_pool_create("crypto_op_pool",
- RTE_CRYPTO_OP_TYPE_SYMMETRIC, NB_MBUF, 128, MAXIMUM_IV_LENGTH,
- rte_socket_id());
+ l2fwd_crypto_op_pool = (proc_type == RTE_PROC_SECONDARY) ?
+ rte_mempool_lookup("crypto_op_pool") :
+ rte_crypto_op_pool_create("crypto_op_pool",
+ RTE_CRYPTO_OP_TYPE_SYMMETRIC, NB_MBUF, 128,
+ MAXIMUM_IV_LENGTH, rte_socket_id());
if (l2fwd_crypto_op_pool == NULL)
rte_exit(EXIT_FAILURE, "Cannot create crypto op pool\n");
@@ -2700,6 +2743,8 @@ main(int argc, char **argv)
/* skip ports that are not enabled */
if ((options.portmask & (1 << portid)) == 0)
continue;
+ if ((options.mp_emask & (1 << portid)) == 0)
+ continue;
if (options.single_lcore && qconf == NULL) {
while (rte_lcore_is_enabled(rx_lcore_id) == 0) {
@@ -2731,8 +2776,13 @@ main(int argc, char **argv)
}
/* Enable Crypto devices */
- enabled_cdevcount = initialize_cryptodevs(&options, enabled_portcount,
+ if (options.mp_cmask != UINT64_MAX)
+ enabled_cdevcount = initialize_cryptodevs(&options, nb_ports,
enabled_cdevs);
+ else
+ enabled_cdevcount = initialize_cryptodevs(&options,
+ enabled_portcount, enabled_cdevs);
+
if (enabled_cdevcount < 0)
rte_exit(EXIT_FAILURE, "Failed to initialize crypto devices\n");
@@ -2750,6 +2800,8 @@ main(int argc, char **argv)
/* Crypto op not supported by crypto device */
if (!enabled_cdevs[cdev_id])
continue;
+ if ((options.mp_cmask & (1 << cdev_id)) == 0)
+ continue;
if (options.single_lcore && qconf == NULL) {
while (rte_lcore_is_enabled(rx_lcore_id) == 0) {
--
2.17.1
next reply other threads:[~2019-03-27 11:45 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-03-27 11:45 Akhil Goyal [this message]
2019-03-27 11:45 ` Akhil Goyal
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190327113622.13426-1-akhil.goyal@nxp.com \
--to=akhil.goyal@nxp.com \
--cc=declan.doherty@intel.com \
--cc=dev@dpdk.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).