eventdev: add interrupt driven queues to Rx adapter
Add support for interrupt driven queues when eth device is configured for rxq interrupts and servicing weight for the queue is configured to be zero. A interrupt driven packet received counter has been added to rte_event_eth_rx_adapter_stats. Signed-off-by: Nikhil Rao <nikhil.rao@intel.com>
This commit is contained in:
parent
6de3219c05
commit
3810ae4357
@ -575,6 +575,7 @@ CONFIG_RTE_LIBRTE_EVENTDEV_DEBUG=n
|
||||
CONFIG_RTE_EVENT_MAX_DEVS=16
|
||||
CONFIG_RTE_EVENT_MAX_QUEUES_PER_DEV=64
|
||||
CONFIG_RTE_EVENT_TIMER_ADAPTER_NUM_MAX=32
|
||||
CONFIG_RTE_EVENT_ETH_INTR_RING_SIZE=1024
|
||||
CONFIG_RTE_EVENT_CRYPTO_ADAPTER_MAX_INSTANCE=32
|
||||
|
||||
#
|
||||
|
@ -64,6 +64,7 @@
|
||||
#define RTE_EVENT_MAX_DEVS 16
|
||||
#define RTE_EVENT_MAX_QUEUES_PER_DEV 64
|
||||
#define RTE_EVENT_TIMER_ADAPTER_NUM_MAX 32
|
||||
#define RTE_EVENT_ETH_INTR_RING_SIZE 1024
|
||||
#define RTE_EVENT_CRYPTO_ADAPTER_MAX_INSTANCE 32
|
||||
|
||||
/* rawdev defines */
|
||||
|
@ -144,3 +144,27 @@ enqueued event counts are a sum of the counts from the eventdev PMD callbacks
|
||||
if the callback is supported, and the counts maintained by the service function,
|
||||
if one exists. The service function also maintains a count of cycles for which
|
||||
it was not able to enqueue to the event device.
|
||||
|
||||
Interrupt Based Rx Queues
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The service core function is typically set up to poll ethernet Rx queues for
|
||||
packets. Certain queues may have low packet rates and it would be more
|
||||
efficient to enable the Rx queue interrupt and read packets after receiving
|
||||
the interrupt.
|
||||
|
||||
The servicing_weight member of struct rte_event_eth_rx_adapter_queue_conf
|
||||
is applicable when the adapter uses a service core function. The application
|
||||
has to enable Rx queue interrupts when configuring the ethernet device
|
||||
using the ``rte_eth_dev_configure()`` function and then use a servicing_weight
|
||||
of zero when addding the Rx queue to the adapter.
|
||||
|
||||
The adapter creates a thread blocked on the interrupt, on an interrupt this
|
||||
thread enqueues the port id and the queue id to a ring buffer. The adapter
|
||||
service function dequeues the port id and queue id from the ring buffer,
|
||||
invokes the ``rte_eth_rx_burst()`` to receive packets on the queue and
|
||||
converts the received packets to events in the same manner as packets
|
||||
received on a polled Rx queue. The interrupt thread is affinitized to the same
|
||||
CPUs as the lcores of the Rx adapter service function, if the Rx adapter
|
||||
service function has not been mapped to any lcores, the interrupt thread
|
||||
is mapped to the master lcore.
|
||||
|
@ -8,14 +8,19 @@ include $(RTE_SDK)/mk/rte.vars.mk
|
||||
LIB = librte_eventdev.a
|
||||
|
||||
# library version
|
||||
LIBABIVER := 4
|
||||
LIBABIVER := 5
|
||||
|
||||
# build flags
|
||||
CFLAGS += -DALLOW_EXPERIMENTAL_API
|
||||
CFLAGS += -O3
|
||||
CFLAGS += $(WERROR_FLAGS)
|
||||
ifeq ($(CONFIG_RTE_EXEC_ENV_LINUXAPP),y)
|
||||
CFLAGS += -DLINUX
|
||||
else
|
||||
CFLAGS += -DBSD
|
||||
endif
|
||||
LDLIBS += -lrte_eal -lrte_ring -lrte_ethdev -lrte_hash -lrte_mempool -lrte_timer
|
||||
LDLIBS += -lrte_mbuf -lrte_cryptodev
|
||||
LDLIBS += -lrte_mbuf -lrte_cryptodev -lpthread
|
||||
|
||||
# library source files
|
||||
SRCS-y += rte_eventdev.c
|
||||
|
@ -1,8 +1,15 @@
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# Copyright(c) 2017 Intel Corporation
|
||||
|
||||
version = 4
|
||||
version = 5
|
||||
allow_experimental_apis = true
|
||||
|
||||
if host_machine.system() == 'linux'
|
||||
cflags += '-DLINUX'
|
||||
else
|
||||
cflags += '-DBSD'
|
||||
endif
|
||||
|
||||
sources = files('rte_eventdev.c',
|
||||
'rte_event_ring.c',
|
||||
'rte_event_eth_rx_adapter.c',
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -64,8 +64,7 @@
|
||||
* the service function ID of the adapter in this case.
|
||||
*
|
||||
* Note:
|
||||
* 1) Interrupt driven receive queues are currently unimplemented.
|
||||
* 2) Devices created after an instance of rte_event_eth_rx_adapter_create
|
||||
* 1) Devices created after an instance of rte_event_eth_rx_adapter_create
|
||||
* should be added to a new instance of the rx adapter.
|
||||
*/
|
||||
|
||||
@ -199,6 +198,8 @@ struct rte_event_eth_rx_adapter_stats {
|
||||
* block cycles can be used to compute the percentage of
|
||||
* cycles the service is blocked by the event device.
|
||||
*/
|
||||
uint64_t rx_intr_packets;
|
||||
/**< Received packet count for interrupt mode Rx queues */
|
||||
};
|
||||
|
||||
/**
|
||||
|
Loading…
Reference in New Issue
Block a user