diff options
author | Divyesh Shah <dpshah@google.com> | 2010-04-08 21:14:23 -0700 |
---|---|---|
committer | Jens Axboe <jens.axboe@oracle.com> | 2010-04-09 08:36:07 +0200 |
commit | 812d402648f4fc1ab1091b2172a46fc1b367c724 (patch) | |
tree | 9dc52d5bfdbc170559169a0157ed3295d551e9cf /block/blk-core.c | |
parent | 84c124da9ff50bd71fab9c939ee5b7cd8bef2bd9 (diff) | |
download | linux-rpi-812d402648f4fc1ab1091b2172a46fc1b367c724.tar.gz linux-rpi-812d402648f4fc1ab1091b2172a46fc1b367c724.tar.bz2 linux-rpi-812d402648f4fc1ab1091b2172a46fc1b367c724.zip |
blkio: Add io_merged stat
This includes both the number of bios merged into requests belonging to this
cgroup as well as the number of requests merged together.
In the past, we've observed different merging behavior across upstream kernels,
some by design some actual bugs. This stat helps a lot in debugging such
problems when applications report decreased throughput with a new kernel
version.
This needed adding an extra elevator function to capture bios being merged as I
did not want to pollute elevator code with blkiocg knowledge and hence needed
the accounting invocation to come from CFQ.
Signed-off-by: Divyesh Shah<dpshah@google.com>
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Diffstat (limited to 'block/blk-core.c')
-rw-r--r-- | block/blk-core.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/block/blk-core.c b/block/blk-core.c index 4b1b29ef2cb0..e9a5ae25db8c 100644 --- a/block/blk-core.c +++ b/block/blk-core.c @@ -1202,6 +1202,7 @@ static int __make_request(struct request_queue *q, struct bio *bio) if (!blk_rq_cpu_valid(req)) req->cpu = bio->bi_comp_cpu; drive_stat_acct(req, 0); + elv_bio_merged(q, req, bio); if (!attempt_back_merge(q, req)) elv_merged_request(q, req, el_ret); goto out; @@ -1235,6 +1236,7 @@ static int __make_request(struct request_queue *q, struct bio *bio) if (!blk_rq_cpu_valid(req)) req->cpu = bio->bi_comp_cpu; drive_stat_acct(req, 0); + elv_bio_merged(q, req, bio); if (!attempt_front_merge(q, req)) elv_merged_request(q, req, el_ret); goto out; |