Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1559155
| From | Shaohua Li <shli@fb.com> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | [PATCH V6 09/18] blk-throttle: choose a small throtl_slice for SSD |
| Date | 2017-01-15 04:50 +0100 |
| Message-ID | <sZJZo-60P-41@gated-at.bofh.it> (permalink) |
| References | <sZJZn-60P-3@gated-at.bofh.it> |
| Organization | linux.* mail to news gateway |
The throtl_slice is 100ms by default. This is a long time for SSD, a lot
of IO can run. To make cgroups have smoother throughput, we choose a
small value (20ms) for SSD.
Signed-off-by: Shaohua Li <shli@fb.com>
---
block/blk-sysfs.c | 2 ++
block/blk-throttle.c | 18 +++++++++++++++---
block/blk.h | 2 ++
3 files changed, 19 insertions(+), 3 deletions(-)
diff --git a/block/blk-sysfs.c b/block/blk-sysfs.c
index 0e3fb2a..7285f74 100644
--- a/block/blk-sysfs.c
+++ b/block/blk-sysfs.c
@@ -907,6 +907,8 @@ int blk_register_queue(struct gendisk *disk)
blk_wb_init(q);
+ blk_throtl_register_queue(q);
+
if (!q->request_fn)
return 0;
diff --git a/block/blk-throttle.c b/block/blk-throttle.c
index 49cad9a..2d05c91 100644
--- a/block/blk-throttle.c
+++ b/block/blk-throttle.c
@@ -18,8 +18,9 @@ static int throtl_grp_quantum = 8;
/* Total max dispatch from all groups in one round */
static int throtl_quantum = 32;
-/* Throttling is performed over 100ms slice and after that slice is renewed */
-#define DFL_THROTL_SLICE (HZ / 10)
+/* Throttling is performed over a slice and after that slice is renewed */
+#define DFL_THROTL_SLICE_HD (HZ / 10)
+#define DFL_THROTL_SLICE_SSD (HZ / 50)
#define MAX_THROTL_SLICE (HZ)
static struct blkcg_policy blkcg_policy_throtl;
@@ -1957,7 +1958,6 @@ int blk_throtl_init(struct request_queue *q)
q->td = td;
td->queue = q;
- td->throtl_slice = DFL_THROTL_SLICE;
td->limit_valid[LIMIT_MAX] = true;
td->limit_index = LIMIT_MAX;
@@ -1978,6 +1978,18 @@ void blk_throtl_exit(struct request_queue *q)
kfree(q->td);
}
+void blk_throtl_register_queue(struct request_queue *q)
+{
+ struct throtl_data *td;
+
+ td = q->td;
+ BUG_ON(!td);
+ if (blk_queue_nonrot(q))
+ td->throtl_slice = DFL_THROTL_SLICE_SSD;
+ else
+ td->throtl_slice = DFL_THROTL_SLICE_HD;
+}
+
ssize_t blk_throtl_sample_time_show(struct request_queue *q, char *page)
{
if (!q->td)
diff --git a/block/blk.h b/block/blk.h
index e83e757..186c67d 100644
--- a/block/blk.h
+++ b/block/blk.h
@@ -293,10 +293,12 @@ extern void blk_throtl_exit(struct request_queue *q);
extern ssize_t blk_throtl_sample_time_show(struct request_queue *q, char *page);
extern ssize_t blk_throtl_sample_time_store(struct request_queue *q,
const char *page, size_t count);
+extern void blk_throtl_register_queue(struct request_queue *q);
#else /* CONFIG_BLK_DEV_THROTTLING */
static inline void blk_throtl_drain(struct request_queue *q) { }
static inline int blk_throtl_init(struct request_queue *q) { return 0; }
static inline void blk_throtl_exit(struct request_queue *q) { }
+static inline void blk_throtl_register_queue(struct request_queue *q) { }
#endif /* CONFIG_BLK_DEV_THROTTLING */
#endif /* BLK_INTERNAL_H */
--
2.9.3
Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
[PATCH V6 00/18] blk-throttle: add .low limit Shaohua Li <shli@fb.com> - 2017-01-15 04:50 +0100 [PATCH V6 04/18] blk-throttle: configure bps/iops limit for cgroup in low limit Shaohua Li <shli@fb.com> - 2017-01-15 04:50 +0100 [PATCH V6 15/18] blk-throttle: add interface for per-cgroup target latency Shaohua Li <shli@fb.com> - 2017-01-15 04:50 +0100 [PATCH V6 03/18] blk-throttle: add .low interface Shaohua Li <shli@fb.com> - 2017-01-15 04:50 +0100 [PATCH V6 09/18] blk-throttle: choose a small throtl_slice for SSD Shaohua Li <shli@fb.com> - 2017-01-15 04:50 +0100 [PATCH V6 17/18] blk-throttle: add a mechanism to estimate IO latency Shaohua Li <shli@fb.com> - 2017-01-15 04:50 +0100
csiph-web