Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6e219353 authored by Stephen Bates's avatar Stephen Bates Committed by Jens Axboe
Browse files

block: add poll_considered statistic



In order to help determine the effectiveness of polling in a running
system it is usful to determine the ratio of how often the poll
function is called vs how often the completion is checked. For this
reason we add a poll_considered variable and add it to the sysfs entry
for io_poll.

Signed-off-by: default avatarStephen Bates <sbates@raithlin.com>
Acked-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarJens Axboe <axboe@fb.com>
parent 0eadf37a
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -3307,19 +3307,23 @@ bool blk_poll(struct request_queue *q, blk_qc_t cookie)
{
	struct blk_plug *plug;
	long state;
	unsigned int queue_num;
	struct blk_mq_hw_ctx *hctx;

	if (!q->mq_ops || !q->mq_ops->poll || !blk_qc_t_valid(cookie) ||
	    !test_bit(QUEUE_FLAG_POLL, &q->queue_flags))
		return false;

	queue_num = blk_qc_t_to_queue_num(cookie);
	hctx = q->queue_hw_ctx[queue_num];
	hctx->poll_considered++;

	plug = current->plug;
	if (plug)
		blk_flush_plug_list(plug, false);

	state = current->state;
	while (!need_resched()) {
		unsigned int queue_num = blk_qc_t_to_queue_num(cookie);
		struct blk_mq_hw_ctx *hctx = q->queue_hw_ctx[queue_num];
		int ret;

		hctx->poll_invoked++;
+3 −1
Original line number Diff line number Diff line
@@ -176,7 +176,9 @@ static ssize_t blk_mq_sysfs_rq_list_show(struct blk_mq_ctx *ctx, char *page)

static ssize_t blk_mq_hw_sysfs_poll_show(struct blk_mq_hw_ctx *hctx, char *page)
{
	return sprintf(page, "invoked=%lu, success=%lu\n", hctx->poll_invoked, hctx->poll_success);
	return sprintf(page, "considered=%lu, invoked=%lu, success=%lu\n",
		       hctx->poll_considered, hctx->poll_invoked,
		       hctx->poll_success);
}

static ssize_t blk_mq_hw_sysfs_queued_show(struct blk_mq_hw_ctx *hctx,
+1 −0
Original line number Diff line number Diff line
@@ -61,6 +61,7 @@ struct blk_mq_hw_ctx {
	struct blk_mq_cpu_notifier	cpu_notifier;
	struct kobject		kobj;

	unsigned long		poll_considered;
	unsigned long		poll_invoked;
	unsigned long		poll_success;
};