bdevperf: Add struct spdk_bdevperf and allocate its global instance
Add struct spdk_bdevperf and include header of io_target_group list in it, and then allocate its global instance g_bdevperf statically. Rename g_head by groups for clarification. The next patch will register g_bdevperf as SPDK IO device and allocate io_target_group as context of the corresponding IO channel. Signed-off-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Change-Id: I6755ce8cc05b00cbc0d5dc7983ec01fe3483f4cf Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/478779 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Community-CI: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Paul Luse <paul.e.luse@intel.com> Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
This commit is contained in:
parent
679f6d6e3c
commit
71600c57b3
@ -120,7 +120,14 @@ struct io_target_group {
|
|||||||
TAILQ_ENTRY(io_target_group) link;
|
TAILQ_ENTRY(io_target_group) link;
|
||||||
};
|
};
|
||||||
|
|
||||||
TAILQ_HEAD(, io_target_group) g_head = TAILQ_HEAD_INITIALIZER(g_head);
|
struct spdk_bdevperf {
|
||||||
|
TAILQ_HEAD(, io_target_group) groups;
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct spdk_bdevperf g_bdevperf = {
|
||||||
|
.groups = TAILQ_HEAD_INITIALIZER(g_bdevperf.groups),
|
||||||
|
};
|
||||||
|
|
||||||
struct io_target_group *g_next_tg;
|
struct io_target_group *g_next_tg;
|
||||||
static uint32_t g_target_count = 0;
|
static uint32_t g_target_count = 0;
|
||||||
|
|
||||||
@ -238,13 +245,13 @@ blockdev_heads_init(void)
|
|||||||
}
|
}
|
||||||
group->lcore = i;
|
group->lcore = i;
|
||||||
TAILQ_INIT(&group->targets);
|
TAILQ_INIT(&group->targets);
|
||||||
TAILQ_INSERT_TAIL(&g_head, group, link);
|
TAILQ_INSERT_TAIL(&g_bdevperf.groups, group, link);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
error:
|
error:
|
||||||
TAILQ_FOREACH_SAFE(group, &g_head, link, tmp) {
|
TAILQ_FOREACH_SAFE(group, &g_bdevperf.groups, link, tmp) {
|
||||||
TAILQ_REMOVE(&g_head, group, link);
|
TAILQ_REMOVE(&g_bdevperf.groups, group, link);
|
||||||
free(group);
|
free(group);
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
@ -272,8 +279,8 @@ bdevperf_free_targets(void)
|
|||||||
struct io_target_group *group, *tmp_group;
|
struct io_target_group *group, *tmp_group;
|
||||||
struct io_target *target, *tmp_target;
|
struct io_target *target, *tmp_target;
|
||||||
|
|
||||||
TAILQ_FOREACH_SAFE(group, &g_head, link, tmp_group) {
|
TAILQ_FOREACH_SAFE(group, &g_bdevperf.groups, link, tmp_group) {
|
||||||
TAILQ_REMOVE(&g_head, group, link);
|
TAILQ_REMOVE(&g_bdevperf.groups, group, link);
|
||||||
TAILQ_FOREACH_SAFE(target, &group->targets, link, tmp_target) {
|
TAILQ_FOREACH_SAFE(target, &group->targets, link, tmp_target) {
|
||||||
TAILQ_REMOVE(&group->targets, target, link);
|
TAILQ_REMOVE(&group->targets, target, link);
|
||||||
bdevperf_free_target(target);
|
bdevperf_free_target(target);
|
||||||
@ -384,7 +391,7 @@ bdevperf_construct_target(struct spdk_bdev *bdev)
|
|||||||
|
|
||||||
/* Mapping each created target to target group */
|
/* Mapping each created target to target group */
|
||||||
if (g_next_tg == NULL) {
|
if (g_next_tg == NULL) {
|
||||||
g_next_tg = TAILQ_FIRST(&g_head);
|
g_next_tg = TAILQ_FIRST(&g_bdevperf.groups);
|
||||||
assert(g_next_tg != NULL);
|
assert(g_next_tg != NULL);
|
||||||
}
|
}
|
||||||
group = g_next_tg;
|
group = g_next_tg;
|
||||||
@ -1015,7 +1022,7 @@ performance_dump(uint64_t io_time_in_usec, uint64_t ema_period)
|
|||||||
|
|
||||||
total_io_per_second = 0;
|
total_io_per_second = 0;
|
||||||
total_mb_per_second = 0;
|
total_mb_per_second = 0;
|
||||||
TAILQ_FOREACH(group, &g_head, link) {
|
TAILQ_FOREACH(group, &g_bdevperf.groups, link) {
|
||||||
if (!TAILQ_EMPTY(&group->targets)) {
|
if (!TAILQ_EMPTY(&group->targets)) {
|
||||||
lcore_id = group->lcore;
|
lcore_id = group->lcore;
|
||||||
printf("\r Logical core: %u\n", lcore_id);
|
printf("\r Logical core: %u\n", lcore_id);
|
||||||
@ -1103,7 +1110,7 @@ bdevperf_construct_targets_tasks(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Initialize task list for each target */
|
/* Initialize task list for each target */
|
||||||
TAILQ_FOREACH(group, &g_head, link) {
|
TAILQ_FOREACH(group, &g_bdevperf.groups, link) {
|
||||||
TAILQ_FOREACH(target, &group->targets, link) {
|
TAILQ_FOREACH(target, &group->targets, link) {
|
||||||
for (i = 0; i < task_num; i++) {
|
for (i = 0; i < task_num; i++) {
|
||||||
task = bdevperf_construct_task_on_target(target);
|
task = bdevperf_construct_task_on_target(target);
|
||||||
@ -1293,7 +1300,7 @@ bdevperf_test(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Send events to start all I/O */
|
/* Send events to start all I/O */
|
||||||
TAILQ_FOREACH(group, &g_head, link) {
|
TAILQ_FOREACH(group, &g_bdevperf.groups, link) {
|
||||||
if (!TAILQ_EMPTY(&group->targets)) {
|
if (!TAILQ_EMPTY(&group->targets)) {
|
||||||
event = spdk_event_allocate(group->lcore, bdevperf_submit_on_core,
|
event = spdk_event_allocate(group->lcore, bdevperf_submit_on_core,
|
||||||
group, NULL);
|
group, NULL);
|
||||||
@ -1351,7 +1358,7 @@ spdk_bdevperf_shutdown_cb(void)
|
|||||||
|
|
||||||
g_shutdown = true;
|
g_shutdown = true;
|
||||||
|
|
||||||
if (TAILQ_EMPTY(&g_head)) {
|
if (TAILQ_EMPTY(&g_bdevperf.groups)) {
|
||||||
spdk_app_stop(0);
|
spdk_app_stop(0);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -1364,7 +1371,7 @@ spdk_bdevperf_shutdown_cb(void)
|
|||||||
g_shutdown_tsc = spdk_get_ticks() - g_shutdown_tsc;
|
g_shutdown_tsc = spdk_get_ticks() - g_shutdown_tsc;
|
||||||
|
|
||||||
/* Send events to stop all I/O on each target group */
|
/* Send events to stop all I/O on each target group */
|
||||||
TAILQ_FOREACH(group, &g_head, link) {
|
TAILQ_FOREACH(group, &g_bdevperf.groups, link) {
|
||||||
if (!TAILQ_EMPTY(&group->targets)) {
|
if (!TAILQ_EMPTY(&group->targets)) {
|
||||||
event = spdk_event_allocate(group->lcore, bdevperf_stop_io_on_core,
|
event = spdk_event_allocate(group->lcore, bdevperf_stop_io_on_core,
|
||||||
group, NULL);
|
group, NULL);
|
||||||
|
Loading…
Reference in New Issue
Block a user