From 6fcd7a79e9c2e2c231772fecdb6b82917aef978b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E4=BA=9A=E9=A3=9E/Yafei=20WANG?= Date: Wed, 29 Jun 2022 14:27:11 +0800 Subject: [PATCH] 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 Change-Id: I2103cea6d28e8b355dad4ddd603d917f10e44c08 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/13486 Reviewed-by: Tomasz Zawadzki Reviewed-by: Changpeng Liu Reviewed-by: GangCao Tested-by: SPDK CI Jenkins --- lib/vhost/vhost_blk.c | 18 +++++++++++------- lib/vhost/vhost_scsi.c | 14 ++++++++------ 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/lib/vhost/vhost_blk.c b/lib/vhost/vhost_blk.c index 82a2e5a98..75c73df81 100644 --- a/lib/vhost/vhost_blk.c +++ b/lib/vhost/vhost_blk.c @@ -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 diff --git a/lib/vhost/vhost_scsi.c b/lib/vhost/vhost_scsi.c index fd601c742..24b6cde1b 100644 --- a/lib/vhost/vhost_scsi.c +++ b/lib/vhost/vhost_scsi.c @@ -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