app/eventdev: add ethernet device producer option
Add command line option --prod_type_ethdev to specify that the events are generated by ethernet device. Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com> Acked-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
This commit is contained in:
parent
3c1984b564
commit
b01974da9f
@ -27,6 +27,7 @@ evt_options_default(struct evt_options *opt)
|
||||
opt->pool_sz = 16 * 1024;
|
||||
opt->wkr_deq_dep = 16;
|
||||
opt->nb_pkts = (1ULL << 26); /* do ~64M packets */
|
||||
opt->prod_type = EVT_PROD_TYPE_SYNT;
|
||||
}
|
||||
|
||||
typedef int (*option_parser_t)(struct evt_options *opt,
|
||||
@ -78,6 +79,13 @@ evt_parse_queue_priority(struct evt_options *opt, const char *arg __rte_unused)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
evt_parse_eth_prod_type(struct evt_options *opt, const char *arg __rte_unused)
|
||||
{
|
||||
opt->prod_type = EVT_PROD_TYPE_ETH_RX_ADPTR;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
evt_parse_test_name(struct evt_options *opt, const char *arg)
|
||||
{
|
||||
@ -161,6 +169,7 @@ usage(char *program)
|
||||
"\t--worker_deq_depth : dequeue depth of the worker\n"
|
||||
"\t--fwd_latency : perform fwd_latency measurement\n"
|
||||
"\t--queue_priority : enable queue priority\n"
|
||||
"\t--prod_type_ethdev : use ethernet device as producer\n."
|
||||
);
|
||||
printf("available tests:\n");
|
||||
evt_test_dump_names();
|
||||
@ -221,6 +230,7 @@ static struct option lgopts[] = {
|
||||
{ EVT_SCHED_TYPE_LIST, 1, 0, 0 },
|
||||
{ EVT_FWD_LATENCY, 0, 0, 0 },
|
||||
{ EVT_QUEUE_PRIORITY, 0, 0, 0 },
|
||||
{ EVT_PROD_ETHDEV, 0, 0, 0 },
|
||||
{ EVT_HELP, 0, 0, 0 },
|
||||
{ NULL, 0, 0, 0 }
|
||||
};
|
||||
@ -244,6 +254,7 @@ evt_opts_parse_long(int opt_idx, struct evt_options *opt)
|
||||
{ EVT_SCHED_TYPE_LIST, evt_parse_sched_type_list},
|
||||
{ EVT_FWD_LATENCY, evt_parse_fwd_latency},
|
||||
{ EVT_QUEUE_PRIORITY, evt_parse_queue_priority},
|
||||
{ EVT_PROD_ETHDEV, evt_parse_eth_prod_type},
|
||||
};
|
||||
|
||||
for (i = 0; i < RTE_DIM(parsermap); i++) {
|
||||
|
@ -30,8 +30,16 @@
|
||||
#define EVT_SCHED_TYPE_LIST ("stlist")
|
||||
#define EVT_FWD_LATENCY ("fwd_latency")
|
||||
#define EVT_QUEUE_PRIORITY ("queue_priority")
|
||||
#define EVT_PROD_ETHDEV ("prod_type_ethdev")
|
||||
#define EVT_HELP ("help")
|
||||
|
||||
enum evt_prod_type {
|
||||
EVT_PROD_TYPE_NONE,
|
||||
EVT_PROD_TYPE_SYNT, /* Producer type Synthetic i.e. CPU. */
|
||||
EVT_PROD_TYPE_ETH_RX_ADPTR, /* Producer type Eth Rx Adapter. */
|
||||
EVT_PROD_TYPE_MAX,
|
||||
};
|
||||
|
||||
struct evt_options {
|
||||
#define EVT_TEST_NAME_MAX_LEN 32
|
||||
char test_name[EVT_TEST_NAME_MAX_LEN];
|
||||
@ -48,6 +56,7 @@ struct evt_options {
|
||||
uint8_t dev_id;
|
||||
uint32_t fwd_latency:1;
|
||||
uint32_t q_priority:1;
|
||||
enum evt_prod_type prod_type;
|
||||
};
|
||||
|
||||
void evt_options_default(struct evt_options *opt);
|
||||
@ -238,4 +247,24 @@ evt_dump_sched_type_list(struct evt_options *opt)
|
||||
evt_dump_end;
|
||||
}
|
||||
|
||||
#define EVT_PROD_MAX_NAME_LEN 50
|
||||
static inline void
|
||||
evt_dump_producer_type(struct evt_options *opt)
|
||||
{
|
||||
char name[EVT_PROD_MAX_NAME_LEN];
|
||||
|
||||
switch (opt->prod_type) {
|
||||
default:
|
||||
case EVT_PROD_TYPE_SYNT:
|
||||
snprintf(name, EVT_PROD_MAX_NAME_LEN,
|
||||
"Synthetic producer lcores");
|
||||
break;
|
||||
case EVT_PROD_TYPE_ETH_RX_ADPTR:
|
||||
snprintf(name, EVT_PROD_MAX_NAME_LEN,
|
||||
"Ethdev Rx Adapter producers");
|
||||
break;
|
||||
}
|
||||
evt_dump("prod_type", "%s", name);
|
||||
}
|
||||
|
||||
#endif /* _EVT_OPTIONS_ */
|
||||
|
@ -259,8 +259,10 @@ perf_opt_check(struct evt_options *opt, uint64_t nb_queues)
|
||||
{
|
||||
unsigned int lcores;
|
||||
|
||||
/* N producer + N worker + 1 master */
|
||||
lcores = 3;
|
||||
/* N producer + N worker + 1 master when producer cores are used
|
||||
* Else N worker + 1 master when Rx adapter is used
|
||||
*/
|
||||
lcores = opt->prod_type == EVT_PROD_TYPE_SYNT ? 3 : 2;
|
||||
|
||||
if (rte_lcore_count() < lcores) {
|
||||
evt_err("test need minimum %d lcores", lcores);
|
||||
@ -285,18 +287,21 @@ perf_opt_check(struct evt_options *opt, uint64_t nb_queues)
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Validate producer lcores */
|
||||
if (evt_lcores_has_overlap(opt->plcores, rte_get_master_lcore())) {
|
||||
evt_err("producer lcores overlaps with master lcore");
|
||||
return -1;
|
||||
}
|
||||
if (evt_has_disabled_lcore(opt->plcores)) {
|
||||
evt_err("one or more producer lcores are not enabled");
|
||||
return -1;
|
||||
}
|
||||
if (!evt_has_active_lcore(opt->plcores)) {
|
||||
evt_err("minimum one producer is required");
|
||||
return -1;
|
||||
if (opt->prod_type == EVT_PROD_TYPE_SYNT) {
|
||||
/* Validate producer lcores */
|
||||
if (evt_lcores_has_overlap(opt->plcores,
|
||||
rte_get_master_lcore())) {
|
||||
evt_err("producer lcores overlaps with master lcore");
|
||||
return -1;
|
||||
}
|
||||
if (evt_has_disabled_lcore(opt->plcores)) {
|
||||
evt_err("one or more producer lcores are not enabled");
|
||||
return -1;
|
||||
}
|
||||
if (!evt_has_active_lcore(opt->plcores)) {
|
||||
evt_err("minimum one producer is required");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
if (evt_has_invalid_stage(opt))
|
||||
@ -341,6 +346,7 @@ perf_opt_dump(struct evt_options *opt, uint8_t nb_queues)
|
||||
evt_dump("nb_evdev_queues", "%d", nb_queues);
|
||||
evt_dump_queue_priority(opt);
|
||||
evt_dump_sched_type_list(opt);
|
||||
evt_dump_producer_type(opt);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -119,6 +119,9 @@ The following are the application command-line options:
|
||||
|
||||
Enable queue priority.
|
||||
|
||||
* ``--prod_type_ethdev``
|
||||
|
||||
Use ethernet device as producer.
|
||||
|
||||
Eventdev Tests
|
||||
--------------
|
||||
@ -321,6 +324,10 @@ the timestamp in the event on the first stage and then on termination, it
|
||||
updates the number of cycles to forward a packet. The application uses this
|
||||
value to compute the average latency to a forward packet.
|
||||
|
||||
When ``--prod_type_ethdev`` command line option is selected, the application
|
||||
uses the probed ethernet devices as producers by configuring them as Rx
|
||||
adapters instead of using synthetic producers.
|
||||
|
||||
Application options
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
@ -339,6 +346,7 @@ Supported application command line options are following::
|
||||
--worker_deq_depth
|
||||
--fwd_latency
|
||||
--queue_priority
|
||||
--prod_type_ethdev
|
||||
|
||||
Example
|
||||
^^^^^^^
|
||||
@ -350,6 +358,12 @@ Example command to run perf queue test:
|
||||
sudo build/app/dpdk-test-eventdev -c 0xf -s 0x1 --vdev=event_sw0 -- \
|
||||
--test=perf_queue --plcores=2 --wlcore=3 --stlist=p --nb_pkts=0
|
||||
|
||||
Example command to run perf queue test with ethernet ports:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
sudo build/app/dpdk-test-eventdev --vdev=event_sw0 -- \
|
||||
--test=perf_queue --plcores=2 --wlcore=3 --stlist=p --prod_type_ethdev
|
||||
|
||||
PERF_ATQ Test
|
||||
~~~~~~~~~~~~~~~
|
||||
@ -416,6 +430,7 @@ Supported application command line options are following::
|
||||
--nb_pkts
|
||||
--worker_deq_depth
|
||||
--fwd_latency
|
||||
--prod_type_ethdev
|
||||
|
||||
Example
|
||||
^^^^^^^
|
||||
|
Loading…
Reference in New Issue
Block a user