env: Remove all use of RTE_LCORE_FOREACH
Replace with an env abstraction. Change-Id: I706374d265a270890e1f3ca920a10a0dc09624b0 Signed-off-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
parent
c80454a283
commit
7f7c03a935
@ -160,20 +160,20 @@ ioat_done(void *cb_arg)
|
|||||||
static int
|
static int
|
||||||
register_workers(void)
|
register_workers(void)
|
||||||
{
|
{
|
||||||
unsigned lcore;
|
uint32_t i;
|
||||||
struct worker_thread *worker;
|
struct worker_thread *worker;
|
||||||
|
|
||||||
g_workers = NULL;
|
g_workers = NULL;
|
||||||
g_num_workers = 0;
|
g_num_workers = 0;
|
||||||
|
|
||||||
RTE_LCORE_FOREACH(lcore) {
|
SPDK_ENV_FOREACH_CORE(i) {
|
||||||
worker = calloc(1, sizeof(*worker));
|
worker = calloc(1, sizeof(*worker));
|
||||||
if (worker == NULL) {
|
if (worker == NULL) {
|
||||||
fprintf(stderr, "Unable to allocate worker\n");
|
fprintf(stderr, "Unable to allocate worker\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
worker->lcore = lcore;
|
worker->lcore = i;
|
||||||
worker->next = g_workers;
|
worker->next = g_workers;
|
||||||
g_workers = worker;
|
g_workers = worker;
|
||||||
g_num_workers++;
|
g_num_workers++;
|
||||||
|
@ -438,7 +438,7 @@ get_next_chan(void)
|
|||||||
int
|
int
|
||||||
main(int argc, char **argv)
|
main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
unsigned lcore_id;
|
uint32_t i, current_core;
|
||||||
struct thread_entry threads[RTE_MAX_LCORE] = {};
|
struct thread_entry threads[RTE_MAX_LCORE] = {};
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
@ -453,21 +453,27 @@ main(int argc, char **argv)
|
|||||||
dump_user_config(&g_user_config);
|
dump_user_config(&g_user_config);
|
||||||
|
|
||||||
g_next_device = TAILQ_FIRST(&g_devices);
|
g_next_device = TAILQ_FIRST(&g_devices);
|
||||||
RTE_LCORE_FOREACH_SLAVE(lcore_id) {
|
|
||||||
threads[lcore_id].chan = get_next_chan();
|
current_core = spdk_env_get_current_core();
|
||||||
rte_eal_remote_launch(work_fn, &threads[lcore_id], lcore_id);
|
SPDK_ENV_FOREACH_CORE(i) {
|
||||||
|
if (i != current_core) {
|
||||||
|
threads[i].chan = get_next_chan();
|
||||||
|
rte_eal_remote_launch(work_fn, &threads[i], i);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
threads[rte_get_master_lcore()].chan = get_next_chan();
|
threads[current_core].chan = get_next_chan();
|
||||||
if (work_fn(&threads[rte_get_master_lcore()]) != 0) {
|
if (work_fn(&threads[current_core]) != 0) {
|
||||||
rc = 1;
|
rc = 1;
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
RTE_LCORE_FOREACH_SLAVE(lcore_id) {
|
SPDK_ENV_FOREACH_CORE(i) {
|
||||||
if (rte_eal_wait_lcore(lcore_id) != 0) {
|
if (i != current_core) {
|
||||||
rc = 1;
|
if (rte_eal_wait_lcore(i) != 0) {
|
||||||
goto cleanup;
|
rc = 1;
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -825,21 +825,21 @@ parse_args(int argc, char **argv)
|
|||||||
static int
|
static int
|
||||||
register_workers(void)
|
register_workers(void)
|
||||||
{
|
{
|
||||||
unsigned lcore;
|
uint32_t i;
|
||||||
struct worker_thread *worker;
|
struct worker_thread *worker;
|
||||||
enum spdk_nvme_qprio qprio = SPDK_NVME_QPRIO_URGENT;
|
enum spdk_nvme_qprio qprio = SPDK_NVME_QPRIO_URGENT;
|
||||||
|
|
||||||
g_workers = NULL;
|
g_workers = NULL;
|
||||||
g_arbitration.num_workers = 0;
|
g_arbitration.num_workers = 0;
|
||||||
|
|
||||||
RTE_LCORE_FOREACH(lcore) {
|
SPDK_ENV_FOREACH_CORE(i) {
|
||||||
worker = calloc(1, sizeof(*worker));
|
worker = calloc(1, sizeof(*worker));
|
||||||
if (worker == NULL) {
|
if (worker == NULL) {
|
||||||
fprintf(stderr, "Unable to allocate worker\n");
|
fprintf(stderr, "Unable to allocate worker\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
worker->lcore = lcore;
|
worker->lcore = i;
|
||||||
worker->next = g_workers;
|
worker->next = g_workers;
|
||||||
g_workers = worker;
|
g_workers = worker;
|
||||||
g_arbitration.num_workers++;
|
g_arbitration.num_workers++;
|
||||||
|
@ -987,20 +987,20 @@ parse_args(int argc, char **argv)
|
|||||||
static int
|
static int
|
||||||
register_workers(void)
|
register_workers(void)
|
||||||
{
|
{
|
||||||
unsigned lcore;
|
uint32_t i;
|
||||||
struct worker_thread *worker;
|
struct worker_thread *worker;
|
||||||
|
|
||||||
g_workers = NULL;
|
g_workers = NULL;
|
||||||
g_num_workers = 0;
|
g_num_workers = 0;
|
||||||
|
|
||||||
RTE_LCORE_FOREACH(lcore) {
|
SPDK_ENV_FOREACH_CORE(i) {
|
||||||
worker = calloc(1, sizeof(*worker));
|
worker = calloc(1, sizeof(*worker));
|
||||||
if (worker == NULL) {
|
if (worker == NULL) {
|
||||||
fprintf(stderr, "Unable to allocate worker\n");
|
fprintf(stderr, "Unable to allocate worker\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
worker->lcore = lcore;
|
worker->lcore = i;
|
||||||
worker->next = g_workers;
|
worker->next = g_workers;
|
||||||
g_workers = worker;
|
g_workers = worker;
|
||||||
g_num_workers++;
|
g_num_workers++;
|
||||||
|
@ -182,6 +182,11 @@ uint32_t spdk_env_get_first_core(void);
|
|||||||
*/
|
*/
|
||||||
uint32_t spdk_env_get_next_core(uint32_t prev_core);
|
uint32_t spdk_env_get_next_core(uint32_t prev_core);
|
||||||
|
|
||||||
|
#define SPDK_ENV_FOREACH_CORE(i) \
|
||||||
|
for (i = spdk_env_get_first_core(); \
|
||||||
|
i < UINT32_MAX; \
|
||||||
|
i = spdk_env_get_next_core(i))
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Return the socket ID for the given core.
|
* \brief Return the socket ID for the given core.
|
||||||
*/
|
*/
|
||||||
|
@ -485,11 +485,11 @@ spdk_app_parse_core_mask(const char *mask, uint64_t *cpumask)
|
|||||||
uint64_t
|
uint64_t
|
||||||
spdk_app_get_core_mask(void)
|
spdk_app_get_core_mask(void)
|
||||||
{
|
{
|
||||||
unsigned lcore;
|
uint32_t i;
|
||||||
uint64_t mask = 0;
|
uint64_t mask = 0;
|
||||||
|
|
||||||
RTE_LCORE_FOREACH(lcore) {
|
SPDK_ENV_FOREACH_CORE(i) {
|
||||||
mask |= 1ULL << lcore;
|
mask |= 1ULL << i;
|
||||||
}
|
}
|
||||||
|
|
||||||
return mask;
|
return mask;
|
||||||
@ -499,11 +499,11 @@ spdk_app_get_core_mask(void)
|
|||||||
static uint64_t
|
static uint64_t
|
||||||
spdk_reactor_get_socket_mask(void)
|
spdk_reactor_get_socket_mask(void)
|
||||||
{
|
{
|
||||||
int i;
|
uint32_t i;
|
||||||
uint32_t socket_id;
|
uint32_t socket_id;
|
||||||
uint64_t socket_info = 0;
|
uint64_t socket_info = 0;
|
||||||
|
|
||||||
RTE_LCORE_FOREACH(i) {
|
SPDK_ENV_FOREACH_CORE(i) {
|
||||||
socket_id = spdk_env_get_socket_id(i);
|
socket_id = spdk_env_get_socket_id(i);
|
||||||
socket_info |= (1ULL << socket_id);
|
socket_info |= (1ULL << socket_id);
|
||||||
}
|
}
|
||||||
@ -515,19 +515,22 @@ void
|
|||||||
spdk_reactors_start(void)
|
spdk_reactors_start(void)
|
||||||
{
|
{
|
||||||
struct spdk_reactor *reactor;
|
struct spdk_reactor *reactor;
|
||||||
uint32_t i;
|
uint32_t i, current_core;
|
||||||
|
|
||||||
assert(rte_get_master_lcore() == rte_lcore_id());
|
assert(rte_get_master_lcore() == rte_lcore_id());
|
||||||
|
|
||||||
g_reactor_state = SPDK_REACTOR_STATE_RUNNING;
|
g_reactor_state = SPDK_REACTOR_STATE_RUNNING;
|
||||||
|
|
||||||
RTE_LCORE_FOREACH_SLAVE(i) {
|
current_core = spdk_env_get_current_core();
|
||||||
reactor = spdk_reactor_get(i);
|
SPDK_ENV_FOREACH_CORE(i) {
|
||||||
spdk_reactor_start(reactor);
|
if (i != current_core) {
|
||||||
|
reactor = spdk_reactor_get(i);
|
||||||
|
spdk_reactor_start(reactor);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Start the master reactor */
|
/* Start the master reactor */
|
||||||
reactor = spdk_reactor_get(rte_get_master_lcore());
|
reactor = spdk_reactor_get(current_core);
|
||||||
spdk_reactor_start(reactor);
|
spdk_reactor_start(reactor);
|
||||||
|
|
||||||
rte_eal_mp_wait_lcore();
|
rte_eal_mp_wait_lcore();
|
||||||
@ -597,7 +600,7 @@ spdk_reactors_init(unsigned int max_delay_us)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
RTE_LCORE_FOREACH(i) {
|
SPDK_ENV_FOREACH_CORE(i) {
|
||||||
reactor = spdk_reactor_get(i);
|
reactor = spdk_reactor_get(i);
|
||||||
spdk_reactor_construct(reactor, i, max_delay_us);
|
spdk_reactor_construct(reactor, i, max_delay_us);
|
||||||
}
|
}
|
||||||
@ -614,7 +617,7 @@ spdk_reactors_fini(void)
|
|||||||
uint64_t socket_mask;
|
uint64_t socket_mask;
|
||||||
struct spdk_reactor *reactor;
|
struct spdk_reactor *reactor;
|
||||||
|
|
||||||
RTE_LCORE_FOREACH(i) {
|
SPDK_ENV_FOREACH_CORE(i) {
|
||||||
reactor = spdk_reactor_get(i);
|
reactor = spdk_reactor_get(i);
|
||||||
if (reactor->events != NULL) {
|
if (reactor->events != NULL) {
|
||||||
rte_ring_free(reactor->events);
|
rte_ring_free(reactor->events);
|
||||||
|
@ -476,7 +476,7 @@ performance_statistics_thread(void *arg)
|
|||||||
static void
|
static void
|
||||||
bdevperf_run(void *arg1, void *arg2)
|
bdevperf_run(void *arg1, void *arg2)
|
||||||
{
|
{
|
||||||
int i;
|
uint32_t i;
|
||||||
struct io_target *target;
|
struct io_target *target;
|
||||||
struct spdk_event *event;
|
struct spdk_event *event;
|
||||||
|
|
||||||
@ -490,14 +490,12 @@ bdevperf_run(void *arg1, void *arg2)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Send events to start all I/O */
|
/* Send events to start all I/O */
|
||||||
RTE_LCORE_FOREACH(i) {
|
SPDK_ENV_FOREACH_CORE(i) {
|
||||||
if (spdk_app_get_core_mask() & (1ULL << i)) {
|
target = head[i];
|
||||||
target = head[i];
|
if (target != NULL) {
|
||||||
if (target != NULL) {
|
event = spdk_event_allocate(target->lcore, bdevperf_submit_on_core,
|
||||||
event = spdk_event_allocate(target->lcore, bdevperf_submit_on_core,
|
target, NULL);
|
||||||
target, NULL);
|
spdk_event_call(event);
|
||||||
spdk_event_call(event);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -110,7 +110,7 @@ performance_dump(int io_time)
|
|||||||
uint32_t i;
|
uint32_t i;
|
||||||
|
|
||||||
printf("\n");
|
printf("\n");
|
||||||
RTE_LCORE_FOREACH(i) {
|
SPDK_ENV_FOREACH_CORE(i) {
|
||||||
printf("lcore %2d: %8ju\n", i, call_count[i] / g_time_in_sec);
|
printf("lcore %2d: %8ju\n", i, call_count[i] / g_time_in_sec);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -122,7 +122,7 @@ main(int argc, char **argv)
|
|||||||
{
|
{
|
||||||
struct spdk_app_opts opts;
|
struct spdk_app_opts opts;
|
||||||
int op;
|
int op;
|
||||||
int i;
|
uint32_t i, current_core;
|
||||||
|
|
||||||
spdk_app_opts_init(&opts);
|
spdk_app_opts_init(&opts);
|
||||||
opts.name = "event_perf";
|
opts.name = "event_perf";
|
||||||
@ -159,8 +159,11 @@ main(int argc, char **argv)
|
|||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
|
|
||||||
/* call event_work_fn on each slave lcore */
|
/* call event_work_fn on each slave lcore */
|
||||||
RTE_LCORE_FOREACH_SLAVE(i) {
|
current_core = spdk_env_get_current_core();
|
||||||
rte_eal_remote_launch(event_work_fn, NULL, i);
|
SPDK_ENV_FOREACH_CORE(i) {
|
||||||
|
if (i != current_core) {
|
||||||
|
rte_eal_remote_launch(event_work_fn, NULL, i);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* call event_work_fn on lcore0 */
|
/* call event_work_fn on lcore0 */
|
||||||
|
Loading…
Reference in New Issue
Block a user