Re: [PATCH] Avoid preferential treatment of groups that aren't backlogged

From: Chad Talbott
Date: Thu Feb 10 2011 - 14:06:44 EST


On Wed, Feb 9, 2011 at 8:02 PM, Vivek Goyal <vgoyal@xxxxxxxxxx> wrote:
> - What happens when cfqd->active_generation wraps over? Should we use
>  functions which take care of wrapping.

To be absolutely correct, you're right. But even if the service tree
becomes completely idle every microsecond, we still have 1/2 million
years before the first wrap.

> - So when generation number changes you want to put the newly backlogged
>  group at the front of tree and not at the end of it? Though it kind
>  of make sense as any continuously backlogged groups will be on service
>  tree for long time and newly backlogged groups are either new IO
>  starting or some application which high think time and which does IO
>  one in a while and does not keep disk occupied for very long time. In
>  such cases it probably is not a bad idea to put newly backlogged
>  groups at the beginning of the tree.

Yes, that's it exactly.

>> @@ -906,6 +905,9 @@ cfq_group_service_tree_del(struct cfq_data *cfqd, struct cfq_group *cfqg)
>>       if (!RB_EMPTY_NODE(&cfqg->rb_node))
>>               cfq_rb_erase(&cfqg->rb_node, st);
>>       cfqg->saved_workload_slice = 0;
>> +     cfqg->generation_num = cfqd->active_generation;
>> +     if (RB_EMPTY_ROOT(&st->rb))
>> +             cfqd->active_generation++;
>
> I don't understand that what is the significance behind chaning generation
> number when tree is idle? When tree is idle does not mean that few
> recently deleted groups will not get backlogged soon?

It's a result of being both fair and work conserving. If *all* the
queues are without requests, then whoever next has requests should get
to use the disk fully to be work-conserving. But if the disk is
always kept busy (by anyone), then there is competition and we have to
provide fairness.

Chad
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/