block: consolidate struct request timestamp fields
Get series with b4
b4 am [email protected]Versions newest first · linked by author and title
- v3 Latest7 patches 1 replyIn review
- v27 patches 0 repliesSuperseded
- v17 patches 0 repliesSuperseded
Patches in v3 No applies recorded yet
| # | Subject and files | Size | Replies | Applied |
|---|---|---|---|---|
| 1/7 | block: move some wbt helpers to blk-wbt.cblock/ block/ | +28 | 0 replies | |
| 2/7 | block: pass struct request instead of struct blk_issue_stat to wbtblock/ block/ block/ +1 more | +45 | 0 replies | |
| 3/7 | block: replace bio->bi_issue_stat with bio-specific typeblock/ include/ | +56 | 0 replies | |
| 4/7 | block: get rid of struct blk_issue_statblock/ block/ block/ +7 more | +41 | 0 replies | |
| 5/7 | block: use ktime_get_ns() instead of sched_clock() for cfq and bfqblock/ block/ block/ +1 more | +57 | 0 replies | |
| 6/7 | block: move blk_stat_add() to __blk_mq_end_request()block/ | +5 | 0 replies | |
| 7/7 | block: consolidate struct request timestamp fieldsblock/ block/ block/ +7 more | +30 | 0 replies |
Reviews trailers per patch
No Reviewed-by, Acked-by or Tested-by trailers for v3 yet.
Cover letter [PATCH v3 0/7] block: consolidate struct request timestamp fields
From: Omar Sandoval <[email protected]>
Here's the timestamp field rework rebased on for-4.18/block. The only conflict was the blk stat bits, which this series removes in favor of rq->wbt_flags. No other changes since v2.
Cover letter from v1:
Currently, struct request has four timestamp fields:
- start_time (jiffies), marked at get_request() time and used for iostats
- issue_stat (ktime nanoseconds, with some bits shared with wbt and io.low), marked at start_request() time and used for accounting the time spent in the device for blk-stats (i.e., wbt, kyber, hybrid polling)
- start_time_ns (sched_clock nanoseconds), also marked at get_request() time, used for CFQ and BFQ cgroups support
- io_start_time_ns (sched_clock nanoseconds), also marked at start_request() time and also used for CFQ and BFQ
Clearly, there's some redundancy here. This patch series consolidates these four timestamps into two, both of which are in ktime nanoseconds. This shaves off up to 16 bytes from struct request, gets rid of the usage of sched_clock(), and actually removes lines of code.
Patches 1 and 2 do some prep in wbt. Patch 3 does some prep in io.low. Patch 4 splits up issue_stat into just a timestamp and separate fields to fill a hole in struct request. Patch 5 does some prep in CFQ and BFQ. Patch 6 allows us to save a call to ktime_get(). Patch 7 does the final consolidation.
Please take a look. I added a blktest (block/018) to sanity check iostats, but other stuff is harder to test so it could use some eyes. Thanks!
Omar Sandoval (7):
block: move some wbt helpers to blk-wbt.c
block: pass struct request instead of struct blk_issue_stat to wbt
block: replace bio->bi_issue_stat with bio-specific type
block: get rid of struct blk_issue_stat
block: use ktime_get_ns() instead of sched_clock() for cfq and bfq
block: move blk_stat_add() to __blk_mq_end_request()
block: consolidate struct request timestamp fields
block/bfq-cgroup.c | 40 ++++++++++++------------ block/bfq-iosched.c | 4 +-- block/bfq-iosched.h | 10 +++--- block/blk-core.c | 32 +++++++++++--------- block/blk-merge.c | 11 +++---- block/blk-mq.c | 33 +++++++++++--------- block/blk-stat.c | 10 ++---- block/blk-stat.h | 45 +-------------------------- block/blk-throttle.c | 22 ++++++-------- block/blk-wbt.c | 59 +++++++++++++++++++++++------------- block/blk-wbt.h | 47 +++++++++------------------- block/blk.h | 2 +- block/cfq-iosched.c | 64 ++++++++++++++++++--------------------- block/kyber-iosched.c | 6 ++-- drivers/md/dm-rq.c | 2 +- include/linux/blk_types.h | 49 ++++++++++++++++++++++++++++-- include/linux/blkdev.h | 61 +++++++++---------------------------- 17 files changed, 228 insertions(+), 269 deletions(-)
Signature · 1 line
2.17.0