Messages in this thread | | | Subject | Re: [PATCH 1/4] block: add scalable completion tracking of requests | From | Jens Axboe <> | Date | Thu, 3 Nov 2016 07:38:55 -0600 |
| |
On 11/03/2016 05:17 AM, Ming Lei wrote: >> diff --git a/block/blk-core.c b/block/blk-core.c >> index 0bfaa54d3e9f..ca77c725b4e5 100644 >> --- a/block/blk-core.c >> +++ b/block/blk-core.c >> @@ -2462,6 +2462,8 @@ void blk_start_request(struct request *req) >> { >> blk_dequeue_request(req); >> >> + blk_stat_set_issue_time(&req->issue_stat); >> + >> /* >> * We are now handing the request to the hardware, initialize >> * resid_len to full count and add the timeout handler. >> @@ -2529,6 +2531,8 @@ bool blk_update_request(struct request *req, int error, unsigned int nr_bytes) >> >> trace_block_rq_complete(req->q, req, nr_bytes); >> >> + blk_stat_add(&req->q->rq_stats[rq_data_dir(req)], req); > > blk_update_request() is often called lockless, so it isn't good to > do it here.
It's not really a concern, not for the legacy path here nor the mq one where it is per sw context. The collisions are rare enough that it'll skew the latencies a bit for that short window, but then go away again. I'd much rather take that, than adding locking for this part.
-- Jens Axboe
| |