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:
parent
80323e2066
commit
f7e9e764be
@ -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
|
||||
}
|
||||
]
|
||||
}
|
||||
|
@ -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 {
|
||||
|
@ -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;
|
||||
|
@ -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,
|
||||
|
Loading…
Reference in New Issue
Block a user