Re: [PATCH 05/16] blkio: Implement per cfq group latency target and busy queue avg

From: Corrado Zoccolo
Date: Fri Nov 13 2009 - 05:46:59 EST


On Fri, Nov 13, 2009 at 12:32 AM, Vivek Goyal <vgoyal@xxxxxxxxxx> wrote:
> Âstatic inline void
> @@ -441,10 +445,13 @@ cfq_set_prio_slice(struct cfq_data *cfqd, struct cfq_queue *cfqq)
> Â Â Â Âif (cfqd->cfq_latency) {
> Â Â Â Â Â Â Â Â/* interested queues (we consider only the ones with the same
> Â Â Â Â Â Â Â Â * priority class) */
This comment needs to be updated
> - Â Â Â Â Â Â Â unsigned iq = cfq_get_avg_queues(cfqd, cfq_class_rt(cfqq));
> + Â Â Â Â Â Â Â unsigned iq = cfq_group_get_avg_queues(cfqd, cfqq->cfqg,
> + Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â cfq_class_rt(cfqq));
> Â Â Â Â Â Â Â Âunsigned sync_slice = cfqd->cfq_slice[1];
> Â Â Â Â Â Â Â Âunsigned expect_latency = sync_slice * iq;
> - Â Â Â Â Â Â Â if (expect_latency > cfq_target_latency) {
> + Â Â Â Â Â Â Â unsigned group_target_lat = cfq_target_latency/cfqd->nr_groups;

I'm not sure that we should divide the target latency evenly among groups.
Groups with different weights will have different percentage of time
in each 300ms round, so probably we should consider it here.

> +
> + Â Â Â Â Â Â Â if (expect_latency > group_target_lat) {
> Â Â Â Â Â Â Â Â Â Â Â Âunsigned base_low_slice = 2 * cfqd->cfq_slice_idle;
> Â Â Â Â Â Â Â Â Â Â Â Â/* scale low_slice according to IO priority
> Â Â Â Â Â Â Â Â Â Â Â Â * and sync vs async */
> @@ -452,7 +459,7 @@ cfq_set_prio_slice(struct cfq_data *cfqd, struct cfq_queue *cfqq)
> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Âmin(slice, base_low_slice * slice / sync_slice);
> Â Â Â Â Â Â Â Â Â Â Â Â/* the adapted slice value is scaled to fit all iqs
> Â Â Â Â Â Â Â Â Â Â Â Â * into the target latency */
> - Â Â Â Â Â Â Â Â Â Â Â slice = max(slice * cfq_target_latency / expect_latency,
> + Â Â Â Â Â Â Â Â Â Â Â slice = max(slice * group_target_lat / expect_latency,
> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Âlow_slice);
> Â Â Â Â Â Â Â Â}
> Â Â Â Â}

Thanks,
Corrado
N‹§²æìr¸›yúèšØb²X¬¶ÇvØ^–)Þ{.nÇ+‰·¥Š{±‘êçzX§¶›¡Ü}©ž²ÆzÚ&j:+v‰¨¾«‘êçzZ+€Ê+zf£¢·hšˆ§~†­†Ûiÿûàz¹®w¥¢¸?™¨è­Ú&¢)ßf”ù^jÇy§m…á@A«a¶Úÿ 0¶ìh®å’i