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: YafeiWangAlice <yafei.wang@samsung.com> Change-Id: I2103cea6d28e8b355dad4ddd603d917f10e44c08 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/13486 Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com> Reviewed-by: Changpeng Liu <changpeng.liu@intel.com> Reviewed-by: GangCao <gang.cao@intel.com> Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
This commit is contained in:
parent
bf93cbdfc5
commit
6fcd7a79e9
@ -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,
|
submit_inflight_desc(struct spdk_vhost_blk_session *bvsession,
|
||||||
struct spdk_vhost_virtqueue *vq)
|
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_info *resubmit;
|
||||||
spdk_vhost_resubmit_desc *resubmit_list;
|
spdk_vhost_resubmit_desc *resubmit_list;
|
||||||
uint16_t req_idx;
|
uint16_t req_idx;
|
||||||
int i;
|
int i, resubmit_cnt;
|
||||||
|
|
||||||
resubmit = vq->vring_inflight.resubmit_inflight;
|
resubmit = vq->vring_inflight.resubmit_inflight;
|
||||||
if (spdk_likely(resubmit == NULL || resubmit->resubmit_list == NULL ||
|
if (spdk_likely(resubmit == NULL || resubmit->resubmit_list == NULL ||
|
||||||
resubmit->resubmit_num == 0)) {
|
resubmit->resubmit_num == 0)) {
|
||||||
return;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
resubmit_list = resubmit->resubmit_list;
|
resubmit_list = resubmit->resubmit_list;
|
||||||
@ -836,7 +836,9 @@ submit_inflight_desc(struct spdk_vhost_blk_session *bvsession,
|
|||||||
process_blk_task(vq, req_idx);
|
process_blk_task(vq, req_idx);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
resubmit_cnt = resubmit->resubmit_num;
|
||||||
resubmit->resubmit_num = 0;
|
resubmit->resubmit_num = 0;
|
||||||
|
return resubmit_cnt;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
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;
|
struct spdk_vhost_session *vsession = &bvsession->vsession;
|
||||||
uint16_t reqs[SPDK_VHOST_VQ_MAX_SUBMISSIONS];
|
uint16_t reqs[SPDK_VHOST_VQ_MAX_SUBMISSIONS];
|
||||||
uint16_t reqs_cnt, i;
|
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));
|
reqs_cnt = vhost_vq_avail_ring_get(vq, reqs, SPDK_COUNTOF(reqs));
|
||||||
if (!reqs_cnt) {
|
if (!reqs_cnt) {
|
||||||
return 0;
|
return resubmit_cnt;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < reqs_cnt; i++) {
|
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 i = 0;
|
||||||
uint16_t count = 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 &&
|
while (i++ < SPDK_VHOST_VQ_MAX_SUBMISSIONS &&
|
||||||
vhost_vq_packed_ring_is_avail(vq)) {
|
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);
|
process_packed_blk_task(vq, vq->last_avail_idx);
|
||||||
}
|
}
|
||||||
|
|
||||||
return count;
|
return count > 0 ? count : resubmit_cnt;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -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,
|
submit_inflight_desc(struct spdk_vhost_scsi_session *svsession,
|
||||||
struct spdk_vhost_virtqueue *vq)
|
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_info *resubmit;
|
||||||
spdk_vhost_resubmit_desc *resubmit_list;
|
spdk_vhost_resubmit_desc *resubmit_list;
|
||||||
uint16_t req_idx;
|
uint16_t req_idx;
|
||||||
int i;
|
int i, resubmit_cnt;
|
||||||
|
|
||||||
resubmit = vq->vring_inflight.resubmit_inflight;
|
resubmit = vq->vring_inflight.resubmit_inflight;
|
||||||
if (spdk_likely(resubmit == NULL || resubmit->resubmit_list == NULL ||
|
if (spdk_likely(resubmit == NULL || resubmit->resubmit_list == NULL ||
|
||||||
resubmit->resubmit_num == 0)) {
|
resubmit->resubmit_num == 0)) {
|
||||||
return;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
resubmit_list = resubmit->resubmit_list;
|
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);
|
process_scsi_task(vsession, vq, req_idx);
|
||||||
}
|
}
|
||||||
|
resubmit_cnt = resubmit->resubmit_num;
|
||||||
resubmit->resubmit_num = 0;
|
resubmit->resubmit_num = 0;
|
||||||
|
return resubmit_cnt;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
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;
|
struct spdk_vhost_session *vsession = &svsession->vsession;
|
||||||
uint16_t reqs[32];
|
uint16_t reqs[32];
|
||||||
uint16_t reqs_cnt, i;
|
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));
|
reqs_cnt = vhost_vq_avail_ring_get(vq, reqs, SPDK_COUNTOF(reqs));
|
||||||
assert(reqs_cnt <= 32);
|
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]);
|
process_scsi_task(vsession, vq, reqs[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
return reqs_cnt;
|
return reqs_cnt > 0 ? reqs_cnt : resubmit_cnt;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
Loading…
Reference in New Issue
Block a user