[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <8D4774E6-0DEB-4DC4-B28B-13F5A933E12F@linaro.org>
Date: Tue, 3 Aug 2021 09:07:54 +0200
From: Paolo Valente <paolo.valente@...aro.org>
To: "yukuai (C)" <yukuai3@...wei.com>
Cc: Jens Axboe <axboe@...nel.dk>, linux-block@...r.kernel.org,
linux-kernel@...r.kernel.org, yi.zhang@...wei.com
Subject: Re: [PATCH 1/3] block, bfq: do not idle if only one cgroup is
activated
> Il giorno 31 lug 2021, alle ore 09:10, yukuai (C) <yukuai3@...wei.com> ha scritto:
>
> On 2021/07/24 15:12, Paolo Valente wrote:
>>> Il giorno 14 lug 2021, alle ore 11:45, Yu Kuai <yukuai3@...wei.com> ha scritto:
>>>
>>> If only one group is activated, specifically
>>> 'bfqd->num_groups_with_pending_reqs == 1', there is no need to guarantee
>>> the same share of the throughput of queues in the same group.
>>>
>>> Thus change the condition from '> 0' to '> 1' in
>>> bfq_asymmetric_scenario().
>> I see your point, and I agree with your goal. Yet, your change seems
>> not to suffer from the following problem.
>> In addition to the groups that are created explicitly, there is the
>> implicit root group. So, when bfqd->num_groups_with_pending_reqs ==
>> 1, there may be both active processes in the root group and active
>> processes in the only group created explicitly. In this case, idling
>> is needed to preserve service guarantees.
>> Probably your idea should be improved by making sure that there is
>> pending I/O only from either the root group or the explicit group.
>> Thanks,
>> Paolo
>
>
> Hi, Paolo
>
Hi
> I'm trying to add support to judge if root group have pending rqs, the
> implementation involve setting and clearing the busy state.
>
I wouldn't use the busy state, as it does not take in-flight requests
into account. For I/O control, the latter are as important as the
ones still queued in the scheduler. For this reason, I take in-flight
requests into account when counting
bfqd->num_groups_with_pending_reqs.
See, e.g., this
if (!bfqq->dispatched && !bfq_bfqq_busy(bfqq)) {
...
bfq_weights_tree_remove(bfqd, bfqq);
}
in bfq_completed_request.
I would replicate the same logic in deciding whether the root group
has pending I/O.
> I'm thinking about setting busy in __bfq_activate_entity() if
> bfq_entity_to_bfqq() return valid bfqq, however I'm not sure where to
> clear the busy state.
>
> On the other hand, do you think the way I record rq size info in patch 2
> is OK?
First, let's see what you reply to my suggestion above.
Thanks,
Paolo
> If so, I can do this the similar way: say that root group doesn't
> have any pending requests if bfq haven't dispatch rq from root group for
> a period of time.
>
> Thanks
> Kuai
Powered by blists - more mailing lists