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:
parent
3617aae53f
commit
b0333c55df
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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."
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user