Commit 6fcd7a79 authored by 王亚飞/Yafei WANG's avatar 王亚飞/Yafei WANG Committed by Tomasz Zawadzki
Browse files

lib/vhost: Add submit_inflight_desc() to cpu usage statistic



submit_inflight_desc() actually do some meaningful work, so when it really process tasks, the poller should return BUSY status.

Signed-off-by: default avatarYafeiWangAlice <yafei.wang@samsung.com>
Change-Id: I2103cea6d28e8b355dad4ddd603d917f10e44c08
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/13486


Reviewed-by: default avatarTomasz Zawadzki <tomasz.zawadzki@intel.com>
Reviewed-by: default avatarChangpeng Liu <changpeng.liu@intel.com>
Reviewed-by: default avatarGangCao <gang.cao@intel.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
parent bf93cbdf
Loading
Loading
Loading
Loading
+11 −7
Original line number Diff line number Diff line
@@ -799,7 +799,7 @@ process_packed_inflight_blk_task(struct spdk_vhost_virtqueue *vq,
	}
}

static void
static int
submit_inflight_desc(struct spdk_vhost_blk_session *bvsession,
		     struct spdk_vhost_virtqueue *vq)
{
@@ -807,12 +807,12 @@ submit_inflight_desc(struct spdk_vhost_blk_session *bvsession,
	spdk_vhost_resubmit_info *resubmit;
	spdk_vhost_resubmit_desc *resubmit_list;
	uint16_t req_idx;
	int i;
	int i, resubmit_cnt;

	resubmit = vq->vring_inflight.resubmit_inflight;
	if (spdk_likely(resubmit == NULL || resubmit->resubmit_list == NULL ||
			resubmit->resubmit_num == 0)) {
		return;
		return 0;
	}

	resubmit_list = resubmit->resubmit_list;
@@ -836,7 +836,9 @@ submit_inflight_desc(struct spdk_vhost_blk_session *bvsession,
			process_blk_task(vq, req_idx);
		}
	}
	resubmit_cnt = resubmit->resubmit_num;
	resubmit->resubmit_num = 0;
	return resubmit_cnt;
}

static int
@@ -845,12 +847,13 @@ process_vq(struct spdk_vhost_blk_session *bvsession, struct spdk_vhost_virtqueue
	struct spdk_vhost_session *vsession = &bvsession->vsession;
	uint16_t reqs[SPDK_VHOST_VQ_MAX_SUBMISSIONS];
	uint16_t reqs_cnt, i;
	int resubmit_cnt = 0;

	submit_inflight_desc(bvsession, vq);
	resubmit_cnt = submit_inflight_desc(bvsession, vq);

	reqs_cnt = vhost_vq_avail_ring_get(vq, reqs, SPDK_COUNTOF(reqs));
	if (!reqs_cnt) {
		return 0;
		return resubmit_cnt;
	}

	for (i = 0; i < reqs_cnt; i++) {
@@ -877,8 +880,9 @@ process_packed_vq(struct spdk_vhost_blk_session *bvsession, struct spdk_vhost_vi
{
	uint16_t i = 0;
	uint16_t count = 0;
	int resubmit_cnt = 0;

	submit_inflight_desc(bvsession, vq);
	resubmit_cnt = submit_inflight_desc(bvsession, vq);

	while (i++ < SPDK_VHOST_VQ_MAX_SUBMISSIONS &&
	       vhost_vq_packed_ring_is_avail(vq)) {
@@ -888,7 +892,7 @@ process_packed_vq(struct spdk_vhost_blk_session *bvsession, struct spdk_vhost_vi
		process_packed_blk_task(vq, vq->last_avail_idx);
	}

	return count;
	return count > 0 ? count : resubmit_cnt;
}

static int
+8 −6
Original line number Diff line number Diff line
@@ -711,7 +711,7 @@ process_scsi_task(struct spdk_vhost_session *vsession,
	}
}

static void
static int
submit_inflight_desc(struct spdk_vhost_scsi_session *svsession,
		     struct spdk_vhost_virtqueue *vq)
{
@@ -719,12 +719,12 @@ submit_inflight_desc(struct spdk_vhost_scsi_session *svsession,
	spdk_vhost_resubmit_info *resubmit;
	spdk_vhost_resubmit_desc *resubmit_list;
	uint16_t req_idx;
	int i;
	int i, resubmit_cnt;

	resubmit = vq->vring_inflight.resubmit_inflight;
	if (spdk_likely(resubmit == NULL || resubmit->resubmit_list == NULL ||
			resubmit->resubmit_num == 0)) {
		return;
		return 0;
	}

	resubmit_list = resubmit->resubmit_list;
@@ -744,8 +744,9 @@ submit_inflight_desc(struct spdk_vhost_scsi_session *svsession,

		process_scsi_task(vsession, vq, req_idx);
	}

	resubmit_cnt = resubmit->resubmit_num;
	resubmit->resubmit_num = 0;
	return resubmit_cnt;
}

static int
@@ -754,8 +755,9 @@ process_vq(struct spdk_vhost_scsi_session *svsession, struct spdk_vhost_virtqueu
	struct spdk_vhost_session *vsession = &svsession->vsession;
	uint16_t reqs[32];
	uint16_t reqs_cnt, i;
	int resubmit_cnt;

	submit_inflight_desc(svsession, vq);
	resubmit_cnt = submit_inflight_desc(svsession, vq);

	reqs_cnt = vhost_vq_avail_ring_get(vq, reqs, SPDK_COUNTOF(reqs));
	assert(reqs_cnt <= 32);
@@ -776,7 +778,7 @@ process_vq(struct spdk_vhost_scsi_session *svsession, struct spdk_vhost_virtqueu
		process_scsi_task(vsession, vq, reqs[i]);
	}

	return reqs_cnt;
	return reqs_cnt > 0 ? reqs_cnt : resubmit_cnt;
}

static int