* [PATCH] mmtom: Prevent shrinking of active anon lru list in case of no swap space V3
@ 2009-05-14 14:15 MinChan Kim
2009-05-14 14:27 ` KOSAKI Motohiro
` (3 more replies)
0 siblings, 4 replies; 11+ messages in thread
From: MinChan Kim @ 2009-05-14 14:15 UTC (permalink / raw)
To: Andrew Morton, LKML, linux-mm
Cc: KOSAKI Motohiro, Johannes Weiner, Rik van Riel
Changelog since V3
o Remove can_reclaim_anon.
o Add nr_swap_page > 0 in only shrink_zone - By Rik's advise.
o Change patch description.
Changelog since V2
o Add new function - can_reclaim_anon : it tests anon_list can be reclaim.
Changelog since V1
o Use nr_swap_pages <= 0 in shrink_active_list to prevent scanning of active anon list.
Now shrink_zone can deactivate active anon pages even if we don't have a swap device.
Many embedded products don't have a swap device. So the deactivation of anon pages is unnecessary.
This patch prevents unnecessary deactivation of anon lru pages.
But, it don't prevent aging of anon pages to swap out.
Thanks for good review. Rik and Kosaki.
Signed-off-by: Minchan Kim <minchan.kim@gmail.com>
Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: Rik van Riel <riel@redhat.com>
---
mm/vmscan.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/mm/vmscan.c b/mm/vmscan.c
index 2f9d555..621708f 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -1577,7 +1577,7 @@ static void shrink_zone(int priority, struct zone *zone,
* Even if we did not try to evict anon pages at all, we want to
* rebalance the anon lru active/inactive ratio.
*/
- if (inactive_anon_is_low(zone, sc))
+ if (inactive_anon_is_low(zone, sc) && nr_swap_pages > 0)
shrink_active_list(SWAP_CLUSTER_MAX, zone, sc, priority, 0);
throttle_vm_writeout(sc->gfp_mask);
--
1.5.4.3
--
Kinds Regards,
Minchan Kim
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH] mmtom: Prevent shrinking of active anon lru list in case of no swap space V3
2009-05-14 14:15 [PATCH] mmtom: Prevent shrinking of active anon lru list in case of no swap space V3 MinChan Kim
@ 2009-05-14 14:27 ` KOSAKI Motohiro
2009-05-14 14:39 ` Minchan Kim
2009-05-14 15:25 ` Rik van Riel
` (2 subsequent siblings)
3 siblings, 1 reply; 11+ messages in thread
From: KOSAKI Motohiro @ 2009-05-14 14:27 UTC (permalink / raw)
To: MinChan Kim; +Cc: Andrew Morton, LKML, linux-mm, Johannes Weiner, Rik van Riel
> mm/vmscan.c | 2 +-
> 1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/mm/vmscan.c b/mm/vmscan.c
> index 2f9d555..621708f 100644
> --- a/mm/vmscan.c
> +++ b/mm/vmscan.c
> @@ -1577,7 +1577,7 @@ static void shrink_zone(int priority, struct zone *zone,
> * Even if we did not try to evict anon pages at all, we want to
> * rebalance the anon lru active/inactive ratio.
> */
> - if (inactive_anon_is_low(zone, sc))
> + if (inactive_anon_is_low(zone, sc) && nr_swap_pages > 0)
> shrink_active_list(SWAP_CLUSTER_MAX, zone, sc, priority, 0);
if (nr_swap_pages > 0 && inactive_anon_is_low(zone, sc))
is better?
compiler can't swap evaluate order around &&.
then,
if ( 0 && inactive_anon_is_low(zone, sc))
and
if (inactive_anon_is_low(zone, sc) && 0)
are different.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH] mmtom: Prevent shrinking of active anon lru list in case of no swap space V3
2009-05-14 14:27 ` KOSAKI Motohiro
@ 2009-05-14 14:39 ` Minchan Kim
2009-05-14 14:54 ` KOSAKI Motohiro
2009-05-14 16:22 ` Johannes Weiner
0 siblings, 2 replies; 11+ messages in thread
From: Minchan Kim @ 2009-05-14 14:39 UTC (permalink / raw)
To: KOSAKI Motohiro
Cc: MinChan Kim, Andrew Morton, LKML, linux-mm, Johannes Weiner,
Rik van Riel
On Thu, May 14, 2009 at 11:27 PM, KOSAKI Motohiro
<kosaki.motohiro@jp.fujitsu.com> wrote:
>> mm/vmscan.c | 2 +-
>> 1 files changed, 1 insertions(+), 1 deletions(-)
>>
>> diff --git a/mm/vmscan.c b/mm/vmscan.c
>> index 2f9d555..621708f 100644
>> --- a/mm/vmscan.c
>> +++ b/mm/vmscan.c
>> @@ -1577,7 +1577,7 @@ static void shrink_zone(int priority, struct zone *zone,
>> * Even if we did not try to evict anon pages at all, we want to
>> * rebalance the anon lru active/inactive ratio.
>> */
>> - if (inactive_anon_is_low(zone, sc))
>> + if (inactive_anon_is_low(zone, sc) && nr_swap_pages > 0)
>> shrink_active_list(SWAP_CLUSTER_MAX, zone, sc, priority, 0);
>
>
> if (nr_swap_pages > 0 && inactive_anon_is_low(zone, sc))
>
> is better?
> compiler can't swap evaluate order around &&.
If GCC optimizes away that branch with CONFIG_SWAP=n as Rik mentioned,
we don't have a concern.
--
Thanks,
Minchan Kim
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH] mmtom: Prevent shrinking of active anon lru list in case of no swap space V3
2009-05-14 14:39 ` Minchan Kim
@ 2009-05-14 14:54 ` KOSAKI Motohiro
2009-05-14 16:22 ` Johannes Weiner
1 sibling, 0 replies; 11+ messages in thread
From: KOSAKI Motohiro @ 2009-05-14 14:54 UTC (permalink / raw)
To: Minchan Kim
Cc: MinChan Kim, Andrew Morton, LKML, linux-mm, Johannes Weiner,
Rik van Riel
2009/5/14 Minchan Kim <barrioskmc@gmail.com>:
> On Thu, May 14, 2009 at 11:27 PM, KOSAKI Motohiro
> <kosaki.motohiro@jp.fujitsu.com> wrote:
>>> mm/vmscan.c | 2 +-
>>> 1 files changed, 1 insertions(+), 1 deletions(-)
>>>
>>> diff --git a/mm/vmscan.c b/mm/vmscan.c
>>> index 2f9d555..621708f 100644
>>> --- a/mm/vmscan.c
>>> +++ b/mm/vmscan.c
>>> @@ -1577,7 +1577,7 @@ static void shrink_zone(int priority, struct zone *zone,
>>> * Even if we did not try to evict anon pages at all, we want to
>>> * rebalance the anon lru active/inactive ratio.
>>> */
>>> - if (inactive_anon_is_low(zone, sc))
>>> + if (inactive_anon_is_low(zone, sc) && nr_swap_pages > 0)
>>> shrink_active_list(SWAP_CLUSTER_MAX, zone, sc, priority, 0);
>>
>>
>> if (nr_swap_pages > 0 && inactive_anon_is_low(zone, sc))
>>
>> is better?
>> compiler can't swap evaluate order around &&.
>
> If GCC optimizes away that branch with CONFIG_SWAP=n as Rik mentioned,
> we don't have a concern.
ok. I ack this.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH] mmtom: Prevent shrinking of active anon lru list in case of no swap space V3
2009-05-14 14:15 [PATCH] mmtom: Prevent shrinking of active anon lru list in case of no swap space V3 MinChan Kim
2009-05-14 14:27 ` KOSAKI Motohiro
@ 2009-05-14 15:25 ` Rik van Riel
2009-05-14 16:30 ` Andrew Morton
2009-05-18 2:34 ` Wu Fengguang
3 siblings, 0 replies; 11+ messages in thread
From: Rik van Riel @ 2009-05-14 15:25 UTC (permalink / raw)
To: MinChan Kim
Cc: Andrew Morton, LKML, linux-mm, KOSAKI Motohiro, Johannes Weiner
MinChan Kim wrote:
> This patch prevents unnecessary deactivation of anon lru pages.
> But, it don't prevent aging of anon pages to swap out.
> --- a/mm/vmscan.c
> +++ b/mm/vmscan.c
> @@ -1577,7 +1577,7 @@ static void shrink_zone(int priority, struct zone *zone,
> * Even if we did not try to evict anon pages at all, we want to
> * rebalance the anon lru active/inactive ratio.
> */
> - if (inactive_anon_is_low(zone, sc))
> + if (inactive_anon_is_low(zone, sc) && nr_swap_pages > 0)
> shrink_active_list(SWAP_CLUSTER_MAX, zone, sc, priority, 0);
>
> throttle_vm_writeout(sc->gfp_mask);
Acked-by: Rik van Riel <riel@redhat.com>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH] mmtom: Prevent shrinking of active anon lru list in case of no swap space V3
2009-05-14 14:39 ` Minchan Kim
2009-05-14 14:54 ` KOSAKI Motohiro
@ 2009-05-14 16:22 ` Johannes Weiner
2009-05-15 1:28 ` Minchan Kim
1 sibling, 1 reply; 11+ messages in thread
From: Johannes Weiner @ 2009-05-14 16:22 UTC (permalink / raw)
To: Minchan Kim
Cc: KOSAKI Motohiro, MinChan Kim, Andrew Morton, LKML, linux-mm,
Rik van Riel
On Thu, May 14, 2009 at 11:39:49PM +0900, Minchan Kim wrote:
> On Thu, May 14, 2009 at 11:27 PM, KOSAKI Motohiro
> <kosaki.motohiro@jp.fujitsu.com> wrote:
> >> mm/vmscan.c | 2 +-
> >> 1 files changed, 1 insertions(+), 1 deletions(-)
> >>
> >> diff --git a/mm/vmscan.c b/mm/vmscan.c
> >> index 2f9d555..621708f 100644
> >> --- a/mm/vmscan.c
> >> +++ b/mm/vmscan.c
> >> @@ -1577,7 +1577,7 @@ static void shrink_zone(int priority, struct zone *zone,
> >> * Even if we did not try to evict anon pages at all, we want to
> >> * rebalance the anon lru active/inactive ratio.
> >> */
> >> - if (inactive_anon_is_low(zone, sc))
> >> + if (inactive_anon_is_low(zone, sc) && nr_swap_pages > 0)
> >> shrink_active_list(SWAP_CLUSTER_MAX, zone, sc, priority, 0);
> >
> >
> > if (nr_swap_pages > 0 && inactive_anon_is_low(zone, sc))
> >
> > is better?
> > compiler can't swap evaluate order around &&.
>
> If GCC optimizes away that branch with CONFIG_SWAP=n as Rik mentioned,
> we don't have a concern.
It can only optimize it away when the condition is a compile time
constant.
But inactive_anon_is_low() contains atomic operations which the
compiler is not allowed to drop and so the && semantics lead to
atomic_read() && 0
emitting the read while still knowing the whole expression is 0 at
compile-time, optimizing away only the branch itself but leaving the
read in place!
Compared to
0 && atomic_read()
where the && short-circuitry leads to atomic_read() not being
executed. And since the 0 is a compile time constant, no code has to
be emitted for the read.
So KOSAKI-san's is right. Your version results in bigger object code.
Hannes
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH] mmtom: Prevent shrinking of active anon lru list in case of no swap space V3
2009-05-14 14:15 [PATCH] mmtom: Prevent shrinking of active anon lru list in case of no swap space V3 MinChan Kim
2009-05-14 14:27 ` KOSAKI Motohiro
2009-05-14 15:25 ` Rik van Riel
@ 2009-05-14 16:30 ` Andrew Morton
2009-05-14 17:26 ` Rik van Riel
2009-05-18 2:34 ` Wu Fengguang
3 siblings, 1 reply; 11+ messages in thread
From: Andrew Morton @ 2009-05-14 16:30 UTC (permalink / raw)
To: MinChan Kim; +Cc: linux-kernel, linux-mm, kosaki.motohiro, hannes, riel
On Thu, 14 May 2009 23:15:55 +0900
MinChan Kim <minchan.kim@gmail.com> wrote:
> Now shrink_zone can deactivate active anon pages even if we don't have a swap device.
> Many embedded products don't have a swap device. So the deactivation of anon pages is unnecessary.
Does shrink_list() need to scan the anon LRUs at all if there's no swap
online?
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH] mmtom: Prevent shrinking of active anon lru list in case of no swap space V3
2009-05-14 16:30 ` Andrew Morton
@ 2009-05-14 17:26 ` Rik van Riel
0 siblings, 0 replies; 11+ messages in thread
From: Rik van Riel @ 2009-05-14 17:26 UTC (permalink / raw)
To: Andrew Morton
Cc: MinChan Kim, linux-kernel, linux-mm, kosaki.motohiro, hannes
Andrew Morton wrote:
> On Thu, 14 May 2009 23:15:55 +0900
> MinChan Kim <minchan.kim@gmail.com> wrote:
>
>> Now shrink_zone can deactivate active anon pages even if we don't have a swap device.
>> Many embedded products don't have a swap device. So the deactivation of anon pages is unnecessary.
>
> Does shrink_list() need to scan the anon LRUs at all if there's no swap
> online?
It doesn't. Get_scan_ratio() will return 0 as the
anon percentage if no swap is online.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH] mmtom: Prevent shrinking of active anon lru list in case of no swap space V3
2009-05-14 16:22 ` Johannes Weiner
@ 2009-05-15 1:28 ` Minchan Kim
0 siblings, 0 replies; 11+ messages in thread
From: Minchan Kim @ 2009-05-15 1:28 UTC (permalink / raw)
To: Johannes Weiner
Cc: Minchan Kim, KOSAKI Motohiro, Andrew Morton, LKML, linux-mm,
Rik van Riel
On Fri, May 15, 2009 at 1:22 AM, Johannes Weiner <hannes@cmpxchg.org> wrote:
> On Thu, May 14, 2009 at 11:39:49PM +0900, Minchan Kim wrote:
>> On Thu, May 14, 2009 at 11:27 PM, KOSAKI Motohiro
>> <kosaki.motohiro@jp.fujitsu.com> wrote:
>> >> mm/vmscan.c | 2 +-
>> >> 1 files changed, 1 insertions(+), 1 deletions(-)
>> >>
>> >> diff --git a/mm/vmscan.c b/mm/vmscan.c
>> >> index 2f9d555..621708f 100644
>> >> --- a/mm/vmscan.c
>> >> +++ b/mm/vmscan.c
>> >> @@ -1577,7 +1577,7 @@ static void shrink_zone(int priority, struct zone *zone,
>> >> * Even if we did not try to evict anon pages at all, we want to
>> >> * rebalance the anon lru active/inactive ratio.
>> >> */
>> >> - if (inactive_anon_is_low(zone, sc))
>> >> + if (inactive_anon_is_low(zone, sc) && nr_swap_pages > 0)
>> >> shrink_active_list(SWAP_CLUSTER_MAX, zone, sc, priority, 0);
>> >
>> >
>> > if (nr_swap_pages > 0 && inactive_anon_is_low(zone, sc))
>> >
>> > is better?
>> > compiler can't swap evaluate order around &&.
>>
>> If GCC optimizes away that branch with CONFIG_SWAP=n as Rik mentioned,
>> we don't have a concern.
>
> It can only optimize it away when the condition is a compile time
> constant.
>
> But inactive_anon_is_low() contains atomic operations which the
> compiler is not allowed to drop and so the && semantics lead to
>
> atomic_read() && 0
>
> emitting the read while still knowing the whole expression is 0 at
> compile-time, optimizing away only the branch itself but leaving the
> read in place!
>
> Compared to
>
> 0 && atomic_read()
>
> where the && short-circuitry leads to atomic_read() not being
> executed. And since the 0 is a compile time constant, no code has to
> be emitted for the read.
>
> So KOSAKI-san's is right. Your version results in bigger object code.
You're right. I realized it from you.
I will repost this.
Thanks for great review, Hannes :)
> Hannes
>
--
Kinds regards,
Minchan Kim
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH] mmtom: Prevent shrinking of active anon lru list in case of no swap space V3
2009-05-14 14:15 [PATCH] mmtom: Prevent shrinking of active anon lru list in case of no swap space V3 MinChan Kim
` (2 preceding siblings ...)
2009-05-14 16:30 ` Andrew Morton
@ 2009-05-18 2:34 ` Wu Fengguang
2009-05-18 2:40 ` Minchan Kim
3 siblings, 1 reply; 11+ messages in thread
From: Wu Fengguang @ 2009-05-18 2:34 UTC (permalink / raw)
To: MinChan Kim
Cc: Andrew Morton, LKML, linux-mm, KOSAKI Motohiro, Johannes Weiner,
Rik van Riel
On Thu, May 14, 2009 at 11:15:55PM +0900, MinChan Kim wrote:
> diff --git a/mm/vmscan.c b/mm/vmscan.c
> index 2f9d555..621708f 100644
> --- a/mm/vmscan.c
> +++ b/mm/vmscan.c
> @@ -1577,7 +1577,7 @@ static void shrink_zone(int priority, struct zone *zone,
> * Even if we did not try to evict anon pages at all, we want to
> * rebalance the anon lru active/inactive ratio.
> */
> - if (inactive_anon_is_low(zone, sc))
> + if (inactive_anon_is_low(zone, sc) && nr_swap_pages > 0)
> shrink_active_list(SWAP_CLUSTER_MAX, zone, sc, priority, 0);
There's another "if (inactive_anon_is_low) shrink_active_list;"
occurrence to be fixed in balance_pgdat()? Otherwise:
Acked-by: Wu Fengguang <fengguang.wu@intel.com>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH] mmtom: Prevent shrinking of active anon lru list in case of no swap space V3
2009-05-18 2:34 ` Wu Fengguang
@ 2009-05-18 2:40 ` Minchan Kim
0 siblings, 0 replies; 11+ messages in thread
From: Minchan Kim @ 2009-05-18 2:40 UTC (permalink / raw)
To: Wu Fengguang
Cc: MinChan Kim, Andrew Morton, LKML, linux-mm, KOSAKI Motohiro,
Johannes Weiner, Rik van Riel
On Mon, 18 May 2009 10:34:04 +0800
Wu Fengguang <fengguang.wu@intel.com> wrote:
> On Thu, May 14, 2009 at 11:15:55PM +0900, MinChan Kim wrote:
>
> > diff --git a/mm/vmscan.c b/mm/vmscan.c
> > index 2f9d555..621708f 100644
> > --- a/mm/vmscan.c
> > +++ b/mm/vmscan.c
> > @@ -1577,7 +1577,7 @@ static void shrink_zone(int priority, struct zone *zone,
> > * Even if we did not try to evict anon pages at all, we want to
> > * rebalance the anon lru active/inactive ratio.
> > */
> > - if (inactive_anon_is_low(zone, sc))
> > + if (inactive_anon_is_low(zone, sc) && nr_swap_pages > 0)
> > shrink_active_list(SWAP_CLUSTER_MAX, zone, sc, priority, 0);
>
> There's another "if (inactive_anon_is_low) shrink_active_list;"
> occurrence to be fixed in balance_pgdat()? Otherwise:
I add Rik's comment. Of course, I agree his opinion.
"If we are close to running out of swap space, with
swapins freeing up swap space on a regular basis,
I believe we do want to do aging on the active
pages, just so we can pick a decent page to swap
out next time swap space becomes available."
> Acked-by: Wu Fengguang <fengguang.wu@intel.com>
Thanks for spending your time for my patch. Wu Fengguang :)
--
Kinds Regards
Minchan Kim
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2009-05-18 2:41 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-05-14 14:15 [PATCH] mmtom: Prevent shrinking of active anon lru list in case of no swap space V3 MinChan Kim
2009-05-14 14:27 ` KOSAKI Motohiro
2009-05-14 14:39 ` Minchan Kim
2009-05-14 14:54 ` KOSAKI Motohiro
2009-05-14 16:22 ` Johannes Weiner
2009-05-15 1:28 ` Minchan Kim
2009-05-14 15:25 ` Rik van Riel
2009-05-14 16:30 ` Andrew Morton
2009-05-14 17:26 ` Rik van Riel
2009-05-18 2:34 ` Wu Fengguang
2009-05-18 2:40 ` Minchan Kim
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).