aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/odp/odp_packet.c
diff options
context:
space:
mode:
authorMichal Mazur <mkm@semihalf.com>2017-09-11 16:20:21 +0200
committerMichal Mazur <mkm@semihalf.com>2017-12-14 15:18:05 +0100
commit0c552959dc425c5f00499d6a587d16275a6399db (patch)
tree05fddc1ee2c881570bb80b2a365027297113d62e /src/plugins/odp/odp_packet.c
parentd830f80364a33f81c4b534eca902ac7600cbfc05 (diff)
Optimize Rx and Tx paths
1) Handle multiple ODP packets at once in receive loop 2) Wait to collect as many RX buffers as possible in single vector 3) Add prefetch of received and transmitted buffers 4) Disable parser, classifier and synchronization of RX queues Synchronization of Tx queues can also be disabled if 2 ports used. Change-Id: I65ed49ef2b60278022712e10a83f6ca24360694e Signed-off-by: Michal Mazur <mkm@semihalf.com>
Diffstat (limited to 'src/plugins/odp/odp_packet.c')
-rwxr-xr-xsrc/plugins/odp/odp_packet.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/plugins/odp/odp_packet.c b/src/plugins/odp/odp_packet.c
index 7fb7d4b9..70f74521 100755
--- a/src/plugins/odp/odp_packet.c
+++ b/src/plugins/odp/odp_packet.c
@@ -67,6 +67,8 @@ create_pktio (const char *dev, odp_pool_t pool, u32 mode)
int ret;
odp_pktio_param_t pktio_param;
odp_pktin_queue_param_t pktin_param;
+ odp_pktout_queue_param_t pktout_param;
+ odp_pktio_config_t pktio_config;
odp_pktio_param_init (&pktio_param);
@@ -93,7 +95,13 @@ create_pktio (const char *dev, odp_pool_t pool, u32 mode)
clib_warning ("Error: pktio create failed for %s", dev);
}
+ odp_pktio_config_init (&pktio_config);
+ pktio_config.parser.layer = ODP_PKTIO_PARSER_LAYER_NONE;
+ odp_pktio_config (pktio, &pktio_config);
+
odp_pktin_queue_param_init (&pktin_param);
+ pktin_param.classifier_enable = 0;
+ pktin_param.op_mode = ODP_PKTIO_OP_MT_UNSAFE;
if (mode == APPL_MODE_PKT_SCHED)
pktin_param.queue_param.sched.sync = ODP_SCHED_SYNC_ATOMIC;
@@ -103,7 +111,12 @@ create_pktio (const char *dev, odp_pool_t pool, u32 mode)
clib_warning ("Error: pktin config failed");
}
- if (odp_pktout_queue_config (pktio, NULL))
+ odp_pktout_queue_param_init (&pktout_param);
+ /* TODO use multiple output queue and no synchronization
+ pktout_param.op_mode = ODP_PKTIO_OP_MT_UNSAFE;
+ */
+
+ if (odp_pktout_queue_config (pktio, &pktout_param))
{
clib_warning ("Error: pktout config failed");
}