lib/event: Add elapsed time of thread to output of framework_get_reactors RPC

Collect elapsed time of each SPDK thread and add it to output of
framework_get_reactors RPC.

Signed-off-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Change-Id: I9e2f0487de81720327428cda5738284a4ce2c557
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/1278
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Aleksey Marchuk <alexeymar@mellanox.com>
Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
Reviewed-by: Paul Luse <paul.e.luse@intel.com>
This commit is contained in:
Shuhei Matsumoto 2020-03-16 14:16:10 +09:00 committed by Tomasz Zawadzki
parent 80323e2066
commit f7e9e764be
4 changed files with 13 additions and 1 deletions

View File

@ -514,6 +514,7 @@ Example response:
"jsonrpc": "2.0",
"id": 1,
"result": {
"tick_rate": 2400000000,
"reactors": [
{
"lcore": 0,
@ -521,7 +522,8 @@ Example response:
{
"name": "app_thread",
"id", 1,
"cpumask": "1"
"cpumask": "1",
"elapsed": 44910853363
}
]
}

View File

@ -63,6 +63,7 @@ enum spdk_reactor_state {
struct spdk_lw_thread {
TAILQ_ENTRY(spdk_lw_thread) link;
bool resched;
uint64_t tsc_start;
};
struct spdk_reactor {

View File

@ -534,6 +534,8 @@ _reactor_schedule_thread(struct spdk_thread *thread)
return -1;
}
lw_thread->tsc_start = spdk_get_ticks();
spdk_event_call(evt);
return 0;

View File

@ -157,6 +157,7 @@ SPDK_RPC_REGISTER_ALIAS_DEPRECATED(framework_monitor_context_switch, context_swi
struct rpc_get_stats_ctx {
struct spdk_jsonrpc_request *request;
struct spdk_json_write_ctx *w;
uint64_t now;
};
static void
@ -357,6 +358,8 @@ rpc_framework_get_reactors_done(void *arg1, void *arg2)
free(ctx);
}
#define GET_DELTA(end, start) (end >= start ? end - start : 0)
static void
rpc_framework_get_reactors(void *arg1, void *arg2)
{
@ -381,6 +384,8 @@ rpc_framework_get_reactors(void *arg1, void *arg2)
spdk_json_write_named_uint64(ctx->w, "id", spdk_thread_get_id(thread));
spdk_json_write_named_string(ctx->w, "cpumask",
spdk_cpuset_fmt(spdk_thread_get_cpumask(thread)));
spdk_json_write_named_uint64(ctx->w, "elapsed",
GET_DELTA(ctx->now, lw_thread->tsc_start));
spdk_json_write_object_end(ctx->w);
}
spdk_json_write_array_end(ctx->w);
@ -407,10 +412,12 @@ spdk_rpc_framework_get_reactors(struct spdk_jsonrpc_request *request,
return;
}
ctx->now = spdk_get_ticks();
ctx->request = request;
ctx->w = spdk_jsonrpc_begin_result(ctx->request);
spdk_json_write_object_begin(ctx->w);
spdk_json_write_named_uint64(ctx->w, "tick_rate", spdk_get_ticks_hz());
spdk_json_write_named_array_begin(ctx->w, "reactors");
spdk_for_each_reactor(rpc_framework_get_reactors, ctx, NULL,