[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-id: <1518536892-2051-1-git-send-email-nj.shetty@samsung.com>
Date: Tue, 13 Feb 2018 21:18:12 +0530
From: Nitesh Shetty <nj.shetty@...sung.com>
To: linux-block@...r.kernel.org, linux-kernel@...r.kernel.org
Cc: axboe@...nel.dk, axboe@...com, linux-nvme@...ts.infradead.org,
nj.shetty@...sung.com, joshi.k@...sung.com
Subject: [PATCH v3] blk: optimization for classic polling
This removes the dependency on interrupts to wake up task. Set task
state as TASK_RUNNING, if need_resched() returns true,
while polling for IO completion.
Earlier, polling task used to sleep, relying on interrupt to wake it up.
This made some IO take very long when interrupt-coalescing is enabled in
NVMe.
Reference:
http://lists.infradead.org/pipermail/linux-nvme/2018-February/015435.html
Changes since v2->v3:
-using __set_current_state() instead of set_current_state()
Changes since v1->v2:
-setting task state once in blk_poll, instead of multiple
callers.
Signed-off-by: Nitesh Shetty <nj.shetty@...sung.com>
---
block/blk-mq.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/block/blk-mq.c b/block/blk-mq.c
index df93102..3574927 100644
--- a/block/blk-mq.c
+++ b/block/blk-mq.c
@@ -3164,6 +3164,7 @@ static bool __blk_mq_poll(struct blk_mq_hw_ctx *hctx, struct request *rq)
cpu_relax();
}
+ __set_current_state(TASK_RUNNING);
return false;
}
--
2.7.4
Powered by blists - more mailing lists