Commit f7e9e764 authored by Shuhei Matsumoto's avatar Shuhei Matsumoto Committed by Tomasz Zawadzki
Browse files

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: default avatarShuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Change-Id: I9e2f0487de81720327428cda5738284a4ce2c557
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/1278


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarAleksey Marchuk <alexeymar@mellanox.com>
Reviewed-by: default avatarChangpeng Liu <changpeng.liu@intel.com>
Reviewed-by: default avatarPaul Luse <paul.e.luse@intel.com>
parent 80323e20
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -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
          }
        ]
      }
+1 −0
Original line number Diff line number Diff line
@@ -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 {
+2 −0
Original line number Diff line number Diff line
@@ -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;
+7 −0
Original line number Diff line number Diff line
@@ -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,