|
Coly Li |
bebc68 |
From f793dfd3f39a3dc50468b06498606b3a906f42f1 Mon Sep 17 00:00:00 2001
|
|
Coly Li |
bebc68 |
From: Jens Axboe <axboe@kernel.dk>
|
|
Coly Li |
bebc68 |
Date: Mon, 26 Jun 2017 08:15:27 -0600
|
|
Coly Li |
bebc68 |
Subject: [PATCH] blk-mq: expose write hints through debugfs
|
|
Coly Li |
bebc68 |
Git-commit: f793dfd3f39a3dc50468b06498606b3a906f42f1
|
|
Coly Li |
bebc68 |
Patch-mainline: v4.13-rc1
|
|
Coly Li |
bebc68 |
References: fate#322738,fate#322919,fate#322950,fate#323773
|
|
Coly Li |
bebc68 |
|
|
Coly Li |
bebc68 |
Useful to verify that things are working the way they should.
|
|
Coly Li |
bebc68 |
Reading the file will return number of kb written with each
|
|
Coly Li |
bebc68 |
write hint. Writing the file will reset the statistics. No care
|
|
Coly Li |
bebc68 |
is taken to ensure that we don't race on updates.
|
|
Coly Li |
bebc68 |
|
|
Coly Li |
bebc68 |
Drivers will write to q->write_hints[] if they handle a given
|
|
Coly Li |
bebc68 |
write hint.
|
|
Coly Li |
bebc68 |
|
|
Coly Li |
bebc68 |
Reviewed-by: Andreas Dilger <adilger@dilger.ca>
|
|
Coly Li |
bebc68 |
Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com>
|
|
Coly Li |
bebc68 |
Reviewed-by: Christoph Hellwig <hch@lst.de>
|
|
Coly Li |
bebc68 |
Signed-off-by: Jens Axboe <axboe@kernel.dk>
|
|
Coly Li |
bebc68 |
Signed-off-by: Coly Li <colyli@suse.de>
|
|
Coly Li |
bebc68 |
|
|
Coly Li |
bebc68 |
---
|
|
Coly Li |
bebc68 |
block/blk-mq-debugfs.c | 24 ++++++++++++++++++++++++
|
|
Coly Li |
bebc68 |
include/linux/blkdev.h | 3 +++
|
|
Coly Li |
bebc68 |
2 files changed, 27 insertions(+)
|
|
Coly Li |
bebc68 |
|
|
Coly Li |
bebc68 |
diff --git a/block/blk-mq-debugfs.c b/block/blk-mq-debugfs.c
|
|
Coly Li |
bebc68 |
index 9edebbdce0bd..9ebc2945f991 100644
|
|
Coly Li |
bebc68 |
--- a/block/blk-mq-debugfs.c
|
|
Coly Li |
bebc68 |
+++ b/block/blk-mq-debugfs.c
|
|
Coly Li |
bebc68 |
@@ -135,6 +135,29 @@ static void print_stat(struct seq_file *m, struct blk_rq_stat *stat)
|
|
Coly Li |
bebc68 |
}
|
|
Coly Li |
bebc68 |
}
|
|
Coly Li |
bebc68 |
|
|
Coly Li |
bebc68 |
+static int queue_write_hint_show(void *data, struct seq_file *m)
|
|
Coly Li |
bebc68 |
+{
|
|
Coly Li |
bebc68 |
+ struct request_queue *q = data;
|
|
Coly Li |
bebc68 |
+ int i;
|
|
Coly Li |
bebc68 |
+
|
|
Coly Li |
bebc68 |
+ for (i = 0; i < BLK_MAX_WRITE_HINTS; i++)
|
|
Coly Li |
bebc68 |
+ seq_printf(m, "hint%d: %llu\n", i, q->write_hints[i]);
|
|
Coly Li |
bebc68 |
+
|
|
Coly Li |
bebc68 |
+ return 0;
|
|
Coly Li |
bebc68 |
+}
|
|
Coly Li |
bebc68 |
+
|
|
Coly Li |
bebc68 |
+static ssize_t queue_write_hint_store(void *data, const char __user *buf,
|
|
Coly Li |
bebc68 |
+ size_t count, loff_t *ppos)
|
|
Coly Li |
bebc68 |
+{
|
|
Coly Li |
bebc68 |
+ struct request_queue *q = data;
|
|
Coly Li |
bebc68 |
+ int i;
|
|
Coly Li |
bebc68 |
+
|
|
Coly Li |
bebc68 |
+ for (i = 0; i < BLK_MAX_WRITE_HINTS; i++)
|
|
Coly Li |
bebc68 |
+ q->write_hints[i] = 0;
|
|
Coly Li |
bebc68 |
+
|
|
Coly Li |
bebc68 |
+ return count;
|
|
Coly Li |
bebc68 |
+}
|
|
Coly Li |
bebc68 |
+
|
|
Coly Li |
bebc68 |
static int queue_poll_stat_show(void *data, struct seq_file *m)
|
|
Coly Li |
bebc68 |
{
|
|
Coly Li |
bebc68 |
struct request_queue *q = data;
|
|
Coly Li |
bebc68 |
@@ -730,6 +753,7 @@ static const struct blk_mq_debugfs_attr blk_mq_debugfs_queue_attrs[] = {
|
|
Coly Li |
bebc68 |
{"poll_stat", 0400, queue_poll_stat_show},
|
|
Coly Li |
bebc68 |
{"requeue_list", 0400, .seq_ops = &queue_requeue_list_seq_ops},
|
|
Coly Li |
bebc68 |
{"state", 0600, queue_state_show, queue_state_write},
|
|
Coly Li |
bebc68 |
+ {"write_hints", 0600, queue_write_hint_show, queue_write_hint_store},
|
|
Coly Li |
bebc68 |
{},
|
|
Coly Li |
bebc68 |
};
|
|
Coly Li |
bebc68 |
|
|
Coly Li |
bebc68 |
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
|
|
Coly Li |
bebc68 |
index 0eebd3bcfd85..e1e289ab66b9 100644
|
|
Coly Li |
bebc68 |
--- a/include/linux/blkdev.h
|
|
Coly Li |
bebc68 |
+++ b/include/linux/blkdev.h
|
|
Coly Li |
bebc68 |
@@ -596,6 +596,9 @@ struct request_queue {
|
|
Coly Li |
bebc68 |
void *rq_alloc_data;
|
|
Coly Li |
bebc68 |
|
|
Coly Li |
bebc68 |
struct work_struct release_work;
|
|
Coly Li |
bebc68 |
+
|
|
Coly Li |
bebc68 |
+#define BLK_MAX_WRITE_HINTS 5
|
|
Coly Li |
bebc68 |
+ u64 write_hints[BLK_MAX_WRITE_HINTS];
|
|
Coly Li |
bebc68 |
};
|
|
Coly Li |
bebc68 |
|
|
Coly Li |
bebc68 |
#define QUEUE_FLAG_QUEUED 1 /* uses generic tag queueing */
|
|
Coly Li |
bebc68 |
--
|
|
Coly Li |
bebc68 |
2.13.1
|
|
Coly Li |
bebc68 |
|