From: Charan Teja Kalla <charante@codeaurora.org>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org,
vinmenon@codeaurora.org
Subject: Re: [PATCH] mm, page_alloc: reset the zone->watermark_boost early
Date: Wed, 13 May 2020 15:16:53 +0530 [thread overview]
Message-ID: <ea46cdfd-526c-5109-2c09-263effb676dd@codeaurora.org> (raw)
In-Reply-To: <1cf5e778-eae1-fc71-aed4-d84d664d79dd@codeaurora.org>
On 5/12/2020 7:01 PM, Charan Teja Kalla wrote:
>
> Thank you Andrew for the reply.
>
> On 5/12/2020 1:41 AM, Andrew Morton wrote:
>> On Mon, 11 May 2020 19:10:08 +0530 Charan Teja Reddy <charante@codeaurora.org> wrote:
>>
>>> Updating the zone watermarks by any means, like extra_free_kbytes,
>>> min_free_kbytes, water_mark_scale_factor e.t.c, when watermark_boost is
>>> set will result into the higher low and high watermarks than the user
>>> asks. This can be avoided by resetting the zone->watermark_boost to zero
>>> early.
>>
>> Does this solve some problem which has been observed in testing?
Sorry that I misunderstood your question. Yes it has solved problem of higher
water marks seen in the zone than what I set through min_free_kbytes.
Below are the steps I pursued to reproduce the problem
1) My system setup of Android kernel running on snapdragon hardware have the
below settings as default:
#cat /proc/sys/vm/min_free_kbytes = 5162
#cat /proc/zoneinfo | grep -e boost -e low -e "high " -e min -e Node
Node 0, zone Normal
min 797
low 8340
high 8539
boost 0 // This is the extra print I have added to check the boosting
2) Now I just try to change the zone watermark when the ->watermark_boost
is greater than zero. I just write the same value of min_free_kbytes in
which case we should have seen the watermarks same as default(I mean of step 1)
#echo 5162 > /proc/sys/vm/min_free_kbytes
But I have seen very high values of watermarks in the system,
# cat /proc/zoneinfo | grep -e boost -e low -e "high " -e min -e Node
Node 0, zone Normal
min 797
low 21148
high 21347
boost 0
So, yes, this problem is got fixed with the changes made in this patch.
>
> Sorry, what are those issues observed in testing? It would be helpful
> If you post them here.
>
>>
>>> ...
>>>
>>> --- a/mm/page_alloc.c
>>> +++ b/mm/page_alloc.c
>>> @@ -7746,9 +7746,9 @@ static void __setup_per_zone_wmarks(void)
>>> mult_frac(zone_managed_pages(zone),
>>> watermark_scale_factor, 10000));
>>>
>>> + zone->watermark_boost = 0;
>>> zone->_watermark[WMARK_LOW] = min_wmark_pages(zone) + tmp;
>>> zone->_watermark[WMARK_HIGH] = min_wmark_pages(zone) + tmp * 2;
>>> - zone->watermark_boost = 0;
>>>
>>> spin_unlock_irqrestore(&zone->lock, flags);
>>> }
>>
>> This could only be a problem if code is accessing these things without
>> holding zone->lock. Is that ever the case?
>>
>
> This is a problem even when accessing these things with zone->lock
> held because we are directly using the macro min_wmark_pages(zone)
> which leads to the issue. Pasting macro here for reference.
>
> #define min_wmark_pages(z) (z->_watermark[WMARK_MIN] + z->watermark_boost)
>
> Steps that lead to the issue is like below:
> 1) On the extfrag event, we try to boost the watermark by storing the
> value in ->watermark_boost.
>
> 2) User changes the value of extra|min_free_kbytes or watermark_scale_factor.
>
> In __setup_perzone_wmarks, we directly store the user asked
> watermarks in the zones structure. In this step, the value
> is always offsets by ->watermark_boost as we use the min_wmark_pages() macro.
>
> 3) Later, when kswapd woke up, it resets the zone's watermark_boost to zero.
>
> Step 2 from the above is what resulting into the issue.
>
--
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project
next prev parent reply other threads:[~2020-05-13 9:47 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-05-11 13:40 [PATCH] mm, page_alloc: reset the zone->watermark_boost early Charan Teja Reddy
2020-05-11 20:11 ` Andrew Morton
2020-05-12 13:31 ` Charan Teja Kalla
2020-05-13 9:46 ` Charan Teja Kalla [this message]
2020-05-13 22:24 ` Andrew Morton
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ea46cdfd-526c-5109-2c09-263effb676dd@codeaurora.org \
--to=charante@codeaurora.org \
--cc=akpm@linux-foundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=vinmenon@codeaurora.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.