[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <1fe2b6cb-d770-d53f-2a17-fdce480d7be0@huawei.com>
Date: Tue, 3 Aug 2021 19:30:40 +0800
From: "yukuai (C)" <yukuai3@...wei.com>
To: Paolo Valente <paolo.valente@...aro.org>
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
On 2021/08/03 15:07, Paolo Valente wrote:
>
>
>> 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.
>
Hi, Paolo
Thanks for your advice, I'll send a new patchset soon.
Kuai
Powered by blists - more mailing lists