app/eventdev: add service core configuration

Add service core configuration for Rx adapter. The configuration picks
the least used service core to run the service on.

Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com>
This commit is contained in:
Pavan Nikhilesh 2017-12-11 20:43:45 +05:30 committed by Jerin Jacob
parent 3617aae53f
commit b0333c55df
4 changed files with 47 additions and 31 deletions

View File

@ -66,41 +66,36 @@ evt_has_all_types_queue(uint8_t dev_id)
}
static inline int
evt_service_setup(uint8_t dev_id)
evt_service_setup(uint32_t service_id)
{
uint32_t service_id;
int32_t core_cnt;
unsigned int lcore = 0;
uint32_t core_array[RTE_MAX_LCORE];
uint8_t cnt;
uint8_t min_cnt = UINT8_MAX;
if (evt_has_distributed_sched(dev_id))
return 0;
if (!rte_service_lcore_count())
return -ENOENT;
if (!rte_event_dev_service_id_get(dev_id, &service_id)) {
core_cnt = rte_service_lcore_list(core_array,
RTE_MAX_LCORE);
if (core_cnt < 0)
return -ENOENT;
/* Get the core which has least number of services running. */
while (core_cnt--) {
/* Reset default mapping */
rte_service_map_lcore_set(service_id,
core_array[core_cnt], 0);
cnt = rte_service_lcore_count_services(
core_array[core_cnt]);
if (cnt < min_cnt) {
lcore = core_array[core_cnt];
min_cnt = cnt;
}
core_cnt = rte_service_lcore_list(core_array,
RTE_MAX_LCORE);
if (core_cnt < 0)
return -ENOENT;
/* Get the core which has least number of services running. */
while (core_cnt--) {
/* Reset default mapping */
rte_service_map_lcore_set(service_id,
core_array[core_cnt], 0);
cnt = rte_service_lcore_count_services(
core_array[core_cnt]);
if (cnt < min_cnt) {
lcore = core_array[core_cnt];
min_cnt = cnt;
}
if (rte_service_map_lcore_set(service_id, lcore, 1))
return -ENOENT;
}
if (rte_service_map_lcore_set(service_id, lcore, 1))
return -ENOENT;
return 0;
}

View File

@ -211,10 +211,14 @@ perf_atq_eventdev_setup(struct evt_test *test, struct evt_options *opt)
if (ret)
return ret;
ret = evt_service_setup(opt->dev_id);
if (ret) {
evt_err("No service lcore found to run event dev.");
return ret;
if (!evt_has_distributed_sched(opt->dev_id)) {
uint32_t service_id;
rte_event_dev_service_id_get(opt->dev_id, &service_id);
ret = evt_service_setup(service_id);
if (ret) {
evt_err("No service lcore found to run event dev.");
return ret;
}
}
ret = rte_event_dev_start(opt->dev_id);

View File

@ -239,6 +239,19 @@ perf_event_rx_adapter_setup(struct evt_options *opt, uint8_t stride,
return ret;
}
if (!(cap & RTE_EVENT_ETH_RX_ADAPTER_CAP_INTERNAL_PORT)) {
uint32_t service_id;
rte_event_eth_rx_adapter_service_id_get(prod,
&service_id);
ret = evt_service_setup(service_id);
if (ret) {
evt_err("Failed to setup service core"
" for Rx adapter\n");
return ret;
}
}
ret = rte_eth_dev_start(prod);
if (ret) {
evt_err("Ethernet dev [%d] failed to start."

View File

@ -224,10 +224,14 @@ perf_queue_eventdev_setup(struct evt_test *test, struct evt_options *opt)
if (ret)
return ret;
ret = evt_service_setup(opt->dev_id);
if (ret) {
evt_err("No service lcore found to run event dev.");
return ret;
if (!evt_has_distributed_sched(opt->dev_id)) {
uint32_t service_id;
rte_event_dev_service_id_get(opt->dev_id, &service_id);
ret = evt_service_setup(service_id);
if (ret) {
evt_err("No service lcore found to run event dev.");
return ret;
}
}
ret = rte_event_dev_start(opt->dev_id);