* asynchronous requests, we reserve 25% of requests for synchronous
* operations.
*/
- KYBER_ASYNC_PERCENT = 75,
+ KYBER_DEFAULT_ASYNC_PERCENT = 75,
};
-
/*
* Maximum device-wide depth for each scheduling domain.
*
*/
struct sbitmap_queue domain_tokens[KYBER_NUM_DOMAINS];
- /* Number of allowed async requests. */
- unsigned int async_depth;
-
struct kyber_cpu_latency __percpu *cpu_latency;
/* Timer for stats aggregation and adjusting domain tokens. */
static void kyber_depth_updated(struct request_queue *q)
{
- struct kyber_queue_data *kqd = q->elevator->elevator_data;
-
- kqd->async_depth = q->nr_requests * KYBER_ASYNC_PERCENT / 100U;
- blk_mq_set_min_shallow_depth(q, kqd->async_depth);
+ blk_mq_set_min_shallow_depth(q, q->async_depth);
}
static int kyber_init_sched(struct request_queue *q, struct elevator_queue *eq)
blk_queue_flag_clear(QUEUE_FLAG_SQ_SCHED, q);
q->elevator = eq;
+ q->async_depth = q->nr_requests * KYBER_DEFAULT_ASYNC_PERCENT / 100;
kyber_depth_updated(q);
return 0;
static void kyber_limit_depth(blk_opf_t opf, struct blk_mq_alloc_data *data)
{
- /*
- * We use the scheduler tags as per-hardware queue queueing tokens.
- * Async requests can be limited at this stage.
- */
- if (!blk_mq_is_sync_read(opf)) {
- struct kyber_queue_data *kqd = data->q->elevator->elevator_data;
-
- data->shallow_depth = kqd->async_depth;
- }
+ if (!blk_mq_is_sync_read(opf))
+ data->shallow_depth = data->q->async_depth;
}
static bool kyber_bio_merge(struct request_queue *q, struct bio *bio,
KYBER_DEBUGFS_DOMAIN_ATTRS(KYBER_OTHER, other)
#undef KYBER_DEBUGFS_DOMAIN_ATTRS
-static int kyber_async_depth_show(void *data, struct seq_file *m)
-{
- struct request_queue *q = data;
- struct kyber_queue_data *kqd = q->elevator->elevator_data;
-
- seq_printf(m, "%u\n", kqd->async_depth);
- return 0;
-}
-
static int kyber_cur_domain_show(void *data, struct seq_file *m)
{
struct blk_mq_hw_ctx *hctx = data;
KYBER_QUEUE_DOMAIN_ATTRS(write),
KYBER_QUEUE_DOMAIN_ATTRS(discard),
KYBER_QUEUE_DOMAIN_ATTRS(other),
- {"async_depth", 0400, kyber_async_depth_show},
{},
};
#undef KYBER_QUEUE_DOMAIN_ATTRS