提交 04dc6e71 编写于 作者: J Jeff Moyer 提交者: Jens Axboe

cfq-iosched: use the default seek distance when there aren't enough seek samples

If the cfq io context doesn't have enough samples yet to provide a mean
seek distance, then use the default threshold we have for seeky IO instead
of defaulting to 0.
Signed-off-by: NJeff Moyer <jmoyer@redhat.com>
Signed-off-by: NJens Axboe <jens.axboe@oracle.com>
上级 4d00aa47
...@@ -947,14 +947,18 @@ static inline sector_t cfq_dist_from_last(struct cfq_data *cfqd, ...@@ -947,14 +947,18 @@ static inline sector_t cfq_dist_from_last(struct cfq_data *cfqd,
return cfqd->last_position - rq->sector; return cfqd->last_position - rq->sector;
} }
#define CIC_SEEK_THR 8 * 1024
#define CIC_SEEKY(cic) ((cic)->seek_mean > CIC_SEEK_THR)
static inline int cfq_rq_close(struct cfq_data *cfqd, struct request *rq) static inline int cfq_rq_close(struct cfq_data *cfqd, struct request *rq)
{ {
struct cfq_io_context *cic = cfqd->active_cic; struct cfq_io_context *cic = cfqd->active_cic;
sector_t sdist = cic->seek_mean;
if (!sample_valid(cic->seek_samples)) if (!sample_valid(cic->seek_samples))
return 0; sdist = CIC_SEEK_THR;
return cfq_dist_from_last(cfqd, rq) <= cic->seek_mean; return cfq_dist_from_last(cfqd, rq) <= sdist;
} }
static struct cfq_queue *cfqq_close(struct cfq_data *cfqd, static struct cfq_queue *cfqq_close(struct cfq_data *cfqd,
...@@ -1039,9 +1043,6 @@ static struct cfq_queue *cfq_close_cooperator(struct cfq_data *cfqd, ...@@ -1039,9 +1043,6 @@ static struct cfq_queue *cfq_close_cooperator(struct cfq_data *cfqd,
return cfqq; return cfqq;
} }
#define CIC_SEEKY(cic) ((cic)->seek_mean > (8 * 1024))
static void cfq_arm_slice_timer(struct cfq_data *cfqd) static void cfq_arm_slice_timer(struct cfq_data *cfqd)
{ {
struct cfq_queue *cfqq = cfqd->active_queue; struct cfq_queue *cfqq = cfqd->active_queue;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册