examples/ioat/verify: remove DPDK dependency
Use the env.h abstractions instead. Change-Id: Ib8a34b28d86a057cc37812568f4c6cce3e8301c3 Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com> Reviewed-on: https://review.gerrithub.io/389402 Reviewed-by: Jim Harris <james.r.harris@intel.com> Tested-by: SPDK Automated Test System <sys_sgsw@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
parent
161a300275
commit
921a1dc311
@ -39,8 +39,6 @@ APP = verify
|
|||||||
|
|
||||||
C_SRCS := verify.c
|
C_SRCS := verify.c
|
||||||
|
|
||||||
CFLAGS += -I. $(ENV_CFLAGS)
|
|
||||||
|
|
||||||
SPDK_LIB_LIST = ioat util log
|
SPDK_LIB_LIST = ioat util log
|
||||||
|
|
||||||
LIBS += $(SPDK_LIB_LINKER_ARGS) $(ENV_LINKER_ARGS)
|
LIBS += $(SPDK_LIB_LINKER_ARGS) $(ENV_LINKER_ARGS)
|
||||||
|
@ -33,9 +33,6 @@
|
|||||||
|
|
||||||
#include "spdk/stdinc.h"
|
#include "spdk/stdinc.h"
|
||||||
|
|
||||||
#include <rte_config.h>
|
|
||||||
#include <rte_lcore.h>
|
|
||||||
|
|
||||||
#include "spdk/ioat.h"
|
#include "spdk/ioat.h"
|
||||||
#include "spdk/env.h"
|
#include "spdk/env.h"
|
||||||
#include "spdk/queue.h"
|
#include "spdk/queue.h"
|
||||||
@ -73,6 +70,7 @@ struct thread_entry {
|
|||||||
uint64_t current_queue_depth;
|
uint64_t current_queue_depth;
|
||||||
unsigned lcore_id;
|
unsigned lcore_id;
|
||||||
bool is_draining;
|
bool is_draining;
|
||||||
|
bool init_failed;
|
||||||
struct spdk_mempool *data_pool;
|
struct spdk_mempool *data_pool;
|
||||||
struct spdk_mempool *task_pool;
|
struct spdk_mempool *task_pool;
|
||||||
};
|
};
|
||||||
@ -328,10 +326,10 @@ work_fn(void *arg)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
t->lcore_id = rte_lcore_id();
|
t->lcore_id = spdk_env_get_current_core();
|
||||||
|
|
||||||
snprintf(buf_pool_name, sizeof(buf_pool_name), "buf_pool_%d", rte_lcore_id());
|
snprintf(buf_pool_name, sizeof(buf_pool_name), "buf_pool_%u", t->lcore_id);
|
||||||
snprintf(task_pool_name, sizeof(task_pool_name), "task_pool_%d", rte_lcore_id());
|
snprintf(task_pool_name, sizeof(task_pool_name), "task_pool_%u", t->lcore_id);
|
||||||
t->data_pool = spdk_mempool_create(buf_pool_name, g_user_config.queue_depth, SRC_BUFFER_SIZE,
|
t->data_pool = spdk_mempool_create(buf_pool_name, g_user_config.queue_depth, SRC_BUFFER_SIZE,
|
||||||
SPDK_MEMPOOL_DEFAULT_CACHE_SIZE,
|
SPDK_MEMPOOL_DEFAULT_CACHE_SIZE,
|
||||||
SPDK_ENV_SOCKET_ID_ANY);
|
SPDK_ENV_SOCKET_ID_ANY);
|
||||||
@ -341,6 +339,7 @@ work_fn(void *arg)
|
|||||||
SPDK_ENV_SOCKET_ID_ANY);
|
SPDK_ENV_SOCKET_ID_ANY);
|
||||||
if (!t->data_pool || !t->task_pool) {
|
if (!t->data_pool || !t->task_pool) {
|
||||||
fprintf(stderr, "Could not allocate buffer pool.\n");
|
fprintf(stderr, "Could not allocate buffer pool.\n");
|
||||||
|
t->init_failed = true;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -398,14 +397,24 @@ init(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
dump_result(struct thread_entry *threads, int len)
|
dump_result(struct thread_entry *threads, uint32_t num_threads)
|
||||||
{
|
{
|
||||||
int i;
|
uint32_t i;
|
||||||
uint64_t total_completed = 0;
|
uint64_t total_completed = 0;
|
||||||
uint64_t total_failed = 0;
|
uint64_t total_failed = 0;
|
||||||
|
|
||||||
for (i = 0; i < len; i++) {
|
for (i = 0; i < num_threads; i++) {
|
||||||
struct thread_entry *t = &threads[i];
|
struct thread_entry *t = &threads[i];
|
||||||
|
|
||||||
|
if (!t->chan) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (t->init_failed) {
|
||||||
|
total_failed++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
total_completed += t->xfer_completed;
|
total_completed += t->xfer_completed;
|
||||||
total_completed += t->fill_completed;
|
total_completed += t->fill_completed;
|
||||||
total_failed += t->xfer_failed;
|
total_failed += t->xfer_failed;
|
||||||
@ -434,11 +443,27 @@ get_next_chan(void)
|
|||||||
return chan;
|
return chan;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static uint32_t
|
||||||
|
get_max_core(void)
|
||||||
|
{
|
||||||
|
uint32_t i;
|
||||||
|
uint32_t max_core = 0;
|
||||||
|
|
||||||
|
SPDK_ENV_FOREACH_CORE(i) {
|
||||||
|
if (i > max_core) {
|
||||||
|
max_core = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return max_core;
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
main(int argc, char **argv)
|
main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
uint32_t i, current_core;
|
uint32_t i, current_core;
|
||||||
struct thread_entry threads[RTE_MAX_LCORE] = {};
|
struct thread_entry *threads;
|
||||||
|
uint32_t num_threads;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
if (parse_args(argc, argv) != 0) {
|
if (parse_args(argc, argv) != 0) {
|
||||||
@ -453,34 +478,32 @@ main(int argc, char **argv)
|
|||||||
|
|
||||||
g_next_device = TAILQ_FIRST(&g_devices);
|
g_next_device = TAILQ_FIRST(&g_devices);
|
||||||
|
|
||||||
|
num_threads = get_max_core() + 1;
|
||||||
|
threads = calloc(num_threads, sizeof(*threads));
|
||||||
|
if (!threads) {
|
||||||
|
fprintf(stderr, "Thread memory allocation failed\n");
|
||||||
|
rc = 1;
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
current_core = spdk_env_get_current_core();
|
current_core = spdk_env_get_current_core();
|
||||||
SPDK_ENV_FOREACH_CORE(i) {
|
SPDK_ENV_FOREACH_CORE(i) {
|
||||||
if (i != current_core) {
|
if (i != current_core) {
|
||||||
threads[i].chan = get_next_chan();
|
threads[i].chan = get_next_chan();
|
||||||
rte_eal_remote_launch(work_fn, &threads[i], i);
|
spdk_env_thread_launch_pinned(i, work_fn, &threads[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
threads[current_core].chan = get_next_chan();
|
threads[current_core].chan = get_next_chan();
|
||||||
if (work_fn(&threads[current_core]) != 0) {
|
work_fn(&threads[current_core]);
|
||||||
rc = 1;
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
SPDK_ENV_FOREACH_CORE(i) {
|
spdk_env_thread_wait_all();
|
||||||
if (i != current_core) {
|
rc = dump_result(threads, num_threads);
|
||||||
if (rte_eal_wait_lcore(i) != 0) {
|
|
||||||
rc = 1;
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
rc = dump_result(threads, RTE_MAX_LCORE);
|
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
spdk_dma_free(g_src);
|
spdk_dma_free(g_src);
|
||||||
ioat_exit();
|
ioat_exit();
|
||||||
|
free(threads);
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user