From: John Stultz <john.stultz@linaro.org> To: LKML <linux-kernel@vger.kernel.org> Cc: John Stultz <john.stultz@linaro.org>, Andrew Morton <akpm@linux-foundation.org>, Android Kernel Team <kernel-team@android.com>, Johannes Weiner <hannes@cmpxchg.org>, Robert Love <rlove@google.com>, Mel Gorman <mel@csn.ul.ie>, Hugh Dickins <hughd@google.com>, Dave Hansen <dave@sr71.net>, Rik van Riel <riel@redhat.com>, Dmitry Adamushko <dmitry.adamushko@gmail.com>, Neil Brown <neilb@suse.de>, Andrea Arcangeli <aarcange@redhat.com>, Mike Hommey <mh@glandium.org>, Taras Glek <tglek@mozilla.com>, Jan Kara <jack@suse.cz>, KOSAKI Motohiro <kosaki.motohiro@gmail.com>, Michel Lespinasse <walken@google.com>, Minchan Kim <minchan@kernel.org>, "linux-mm@kvack.org" <linux-mm@kvack.org> Subject: [PATCH 5/5] vmscan: Age anonymous memory even when swap is off. Date: Fri, 21 Mar 2014 14:17:35 -0700 [thread overview] Message-ID: <1395436655-21670-6-git-send-email-john.stultz@linaro.org> (raw) In-Reply-To: <1395436655-21670-1-git-send-email-john.stultz@linaro.org> Currently we don't shrink/scan the anonymous lrus when swap is off. This is problematic for volatile range purging on swapless systems/ This patch naievely changes the vmscan code to continue scanning and shrinking the lrus even when there is no swap. It obviously has performance issues. Thoughts on how best to implement this would be appreciated. Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Android Kernel Team <kernel-team@android.com> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: Robert Love <rlove@google.com> Cc: Mel Gorman <mel@csn.ul.ie> Cc: Hugh Dickins <hughd@google.com> Cc: Dave Hansen <dave@sr71.net> Cc: Rik van Riel <riel@redhat.com> Cc: Dmitry Adamushko <dmitry.adamushko@gmail.com> Cc: Neil Brown <neilb@suse.de> Cc: Andrea Arcangeli <aarcange@redhat.com> Cc: Mike Hommey <mh@glandium.org> Cc: Taras Glek <tglek@mozilla.com> Cc: Jan Kara <jack@suse.cz> Cc: KOSAKI Motohiro <kosaki.motohiro@gmail.com> Cc: Michel Lespinasse <walken@google.com> Cc: Minchan Kim <minchan@kernel.org> Cc: linux-mm@kvack.org <linux-mm@kvack.org> Signed-off-by: John Stultz <john.stultz@linaro.org> --- mm/vmscan.c | 26 ++++---------------------- 1 file changed, 4 insertions(+), 22 deletions(-) diff --git a/mm/vmscan.c b/mm/vmscan.c index 34f159a..07b0a8c 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -155,9 +155,8 @@ static unsigned long zone_reclaimable_pages(struct zone *zone) nr = zone_page_state(zone, NR_ACTIVE_FILE) + zone_page_state(zone, NR_INACTIVE_FILE); - if (get_nr_swap_pages() > 0) - nr += zone_page_state(zone, NR_ACTIVE_ANON) + - zone_page_state(zone, NR_INACTIVE_ANON); + nr += zone_page_state(zone, NR_ACTIVE_ANON) + + zone_page_state(zone, NR_INACTIVE_ANON); return nr; } @@ -1764,13 +1763,6 @@ static int inactive_anon_is_low_global(struct zone *zone) */ static int inactive_anon_is_low(struct lruvec *lruvec) { - /* - * If we don't have swap space, anonymous page deactivation - * is pointless. - */ - if (!total_swap_pages) - return 0; - if (!mem_cgroup_disabled()) return mem_cgroup_inactive_anon_is_low(lruvec); @@ -1880,12 +1872,6 @@ static void get_scan_count(struct lruvec *lruvec, struct scan_control *sc, if (!global_reclaim(sc)) force_scan = true; - /* If we have no swap space, do not bother scanning anon pages. */ - if (!sc->may_swap || (get_nr_swap_pages() <= 0)) { - scan_balance = SCAN_FILE; - goto out; - } - /* * Global reclaim will swap to prevent OOM even with no * swappiness, but memcg users want to use this knob to @@ -2048,7 +2034,6 @@ static void shrink_lruvec(struct lruvec *lruvec, struct scan_control *sc) if (nr[lru]) { nr_to_scan = min(nr[lru], SWAP_CLUSTER_MAX); nr[lru] -= nr_to_scan; - nr_reclaimed += shrink_list(lru, nr_to_scan, lruvec, sc); } @@ -2181,8 +2166,8 @@ static inline bool should_continue_reclaim(struct zone *zone, */ pages_for_compaction = (2UL << sc->order); inactive_lru_pages = zone_page_state(zone, NR_INACTIVE_FILE); - if (get_nr_swap_pages() > 0) - inactive_lru_pages += zone_page_state(zone, NR_INACTIVE_ANON); + inactive_lru_pages += zone_page_state(zone, NR_INACTIVE_ANON); + if (sc->nr_reclaimed < pages_for_compaction && inactive_lru_pages > pages_for_compaction) return true; @@ -2726,9 +2711,6 @@ static void age_active_anon(struct zone *zone, struct scan_control *sc) { struct mem_cgroup *memcg; - if (!total_swap_pages) - return; - memcg = mem_cgroup_iter(NULL, NULL, NULL); do { struct lruvec *lruvec = mem_cgroup_zone_lruvec(zone, memcg); -- 1.8.3.2
WARNING: multiple messages have this Message-ID (diff)
From: John Stultz <john.stultz@linaro.org> To: LKML <linux-kernel@vger.kernel.org> Cc: John Stultz <john.stultz@linaro.org>, Andrew Morton <akpm@linux-foundation.org>, Android Kernel Team <kernel-team@android.com>, Johannes Weiner <hannes@cmpxchg.org>, Robert Love <rlove@google.com>, Mel Gorman <mel@csn.ul.ie>, Hugh Dickins <hughd@google.com>, Dave Hansen <dave@sr71.net>, Rik van Riel <riel@redhat.com>, Dmitry Adamushko <dmitry.adamushko@gmail.com>, Neil Brown <neilb@suse.de>, Andrea Arcangeli <aarcange@redhat.com>, Mike Hommey <mh@glandium.org>, Taras Glek <tglek@mozilla.com>, Jan Kara <jack@suse.cz>, KOSAKI Motohiro <kosaki.motohiro@gmail.com>, Michel Lespinasse <walken@google.com>, Minchan Kim <minchan@kernel.org>, "linux-mm@kvack.org" <linux-mm@kvack.org> Subject: [PATCH 5/5] vmscan: Age anonymous memory even when swap is off. Date: Fri, 21 Mar 2014 14:17:35 -0700 [thread overview] Message-ID: <1395436655-21670-6-git-send-email-john.stultz@linaro.org> (raw) In-Reply-To: <1395436655-21670-1-git-send-email-john.stultz@linaro.org> Currently we don't shrink/scan the anonymous lrus when swap is off. This is problematic for volatile range purging on swapless systems/ This patch naievely changes the vmscan code to continue scanning and shrinking the lrus even when there is no swap. It obviously has performance issues. Thoughts on how best to implement this would be appreciated. Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Android Kernel Team <kernel-team@android.com> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: Robert Love <rlove@google.com> Cc: Mel Gorman <mel@csn.ul.ie> Cc: Hugh Dickins <hughd@google.com> Cc: Dave Hansen <dave@sr71.net> Cc: Rik van Riel <riel@redhat.com> Cc: Dmitry Adamushko <dmitry.adamushko@gmail.com> Cc: Neil Brown <neilb@suse.de> Cc: Andrea Arcangeli <aarcange@redhat.com> Cc: Mike Hommey <mh@glandium.org> Cc: Taras Glek <tglek@mozilla.com> Cc: Jan Kara <jack@suse.cz> Cc: KOSAKI Motohiro <kosaki.motohiro@gmail.com> Cc: Michel Lespinasse <walken@google.com> Cc: Minchan Kim <minchan@kernel.org> Cc: linux-mm@kvack.org <linux-mm@kvack.org> Signed-off-by: John Stultz <john.stultz@linaro.org> --- mm/vmscan.c | 26 ++++---------------------- 1 file changed, 4 insertions(+), 22 deletions(-) diff --git a/mm/vmscan.c b/mm/vmscan.c index 34f159a..07b0a8c 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -155,9 +155,8 @@ static unsigned long zone_reclaimable_pages(struct zone *zone) nr = zone_page_state(zone, NR_ACTIVE_FILE) + zone_page_state(zone, NR_INACTIVE_FILE); - if (get_nr_swap_pages() > 0) - nr += zone_page_state(zone, NR_ACTIVE_ANON) + - zone_page_state(zone, NR_INACTIVE_ANON); + nr += zone_page_state(zone, NR_ACTIVE_ANON) + + zone_page_state(zone, NR_INACTIVE_ANON); return nr; } @@ -1764,13 +1763,6 @@ static int inactive_anon_is_low_global(struct zone *zone) */ static int inactive_anon_is_low(struct lruvec *lruvec) { - /* - * If we don't have swap space, anonymous page deactivation - * is pointless. - */ - if (!total_swap_pages) - return 0; - if (!mem_cgroup_disabled()) return mem_cgroup_inactive_anon_is_low(lruvec); @@ -1880,12 +1872,6 @@ static void get_scan_count(struct lruvec *lruvec, struct scan_control *sc, if (!global_reclaim(sc)) force_scan = true; - /* If we have no swap space, do not bother scanning anon pages. */ - if (!sc->may_swap || (get_nr_swap_pages() <= 0)) { - scan_balance = SCAN_FILE; - goto out; - } - /* * Global reclaim will swap to prevent OOM even with no * swappiness, but memcg users want to use this knob to @@ -2048,7 +2034,6 @@ static void shrink_lruvec(struct lruvec *lruvec, struct scan_control *sc) if (nr[lru]) { nr_to_scan = min(nr[lru], SWAP_CLUSTER_MAX); nr[lru] -= nr_to_scan; - nr_reclaimed += shrink_list(lru, nr_to_scan, lruvec, sc); } @@ -2181,8 +2166,8 @@ static inline bool should_continue_reclaim(struct zone *zone, */ pages_for_compaction = (2UL << sc->order); inactive_lru_pages = zone_page_state(zone, NR_INACTIVE_FILE); - if (get_nr_swap_pages() > 0) - inactive_lru_pages += zone_page_state(zone, NR_INACTIVE_ANON); + inactive_lru_pages += zone_page_state(zone, NR_INACTIVE_ANON); + if (sc->nr_reclaimed < pages_for_compaction && inactive_lru_pages > pages_for_compaction) return true; @@ -2726,9 +2711,6 @@ static void age_active_anon(struct zone *zone, struct scan_control *sc) { struct mem_cgroup *memcg; - if (!total_swap_pages) - return; - memcg = mem_cgroup_iter(NULL, NULL, NULL); do { struct lruvec *lruvec = mem_cgroup_zone_lruvec(zone, memcg); -- 1.8.3.2 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2014-03-21 21:18 UTC|newest] Thread overview: 112+ messages / expand[flat|nested] mbox.gz Atom feed top 2014-03-21 21:17 [PATCH 0/5] Volatile Ranges (v12) & LSF-MM discussion fodder John Stultz 2014-03-21 21:17 ` John Stultz 2014-03-21 21:17 ` [PATCH 1/5] vrange: Add vrange syscall and handle splitting/merging and marking vmas John Stultz 2014-03-21 21:17 ` John Stultz 2014-03-23 12:20 ` Jan Kara 2014-03-23 12:20 ` Jan Kara 2014-03-23 20:34 ` John Stultz 2014-03-23 20:34 ` John Stultz 2014-03-23 16:50 ` KOSAKI Motohiro 2014-03-23 16:50 ` KOSAKI Motohiro 2014-04-08 18:52 ` John Stultz 2014-04-08 18:52 ` John Stultz 2014-03-21 21:17 ` [PATCH 2/5] vrange: Add purged page detection on setting memory non-volatile John Stultz 2014-03-21 21:17 ` John Stultz 2014-03-23 12:29 ` Jan Kara 2014-03-23 12:29 ` Jan Kara 2014-03-23 20:21 ` John Stultz 2014-03-23 20:21 ` John Stultz 2014-03-23 17:42 ` KOSAKI Motohiro 2014-03-23 17:42 ` KOSAKI Motohiro 2014-04-07 18:37 ` John Stultz 2014-04-07 18:37 ` John Stultz 2014-04-07 22:14 ` KOSAKI Motohiro 2014-04-07 22:14 ` KOSAKI Motohiro 2014-04-08 3:09 ` John Stultz 2014-04-08 3:09 ` John Stultz 2014-03-23 17:50 ` KOSAKI Motohiro 2014-03-23 17:50 ` KOSAKI Motohiro 2014-03-23 20:26 ` John Stultz 2014-03-23 20:26 ` John Stultz 2014-03-23 21:50 ` KOSAKI Motohiro 2014-03-23 21:50 ` KOSAKI Motohiro 2014-04-09 18:29 ` John Stultz 2014-04-09 18:29 ` John Stultz 2014-03-21 21:17 ` [PATCH 3/5] vrange: Add page purging logic & SIGBUS trap John Stultz 2014-03-21 21:17 ` John Stultz 2014-03-23 23:44 ` KOSAKI Motohiro 2014-03-23 23:44 ` KOSAKI Motohiro 2014-04-10 18:49 ` John Stultz 2014-04-10 18:49 ` John Stultz 2014-03-21 21:17 ` [PATCH 4/5] vrange: Set affected pages referenced when marking volatile John Stultz 2014-03-21 21:17 ` John Stultz 2014-03-24 0:01 ` KOSAKI Motohiro 2014-03-24 0:01 ` KOSAKI Motohiro 2014-03-21 21:17 ` John Stultz [this message] 2014-03-21 21:17 ` [PATCH 5/5] vmscan: Age anonymous memory even when swap is off John Stultz 2014-03-24 17:33 ` Rik van Riel 2014-03-24 17:33 ` Rik van Riel 2014-03-24 18:04 ` John Stultz 2014-03-24 18:04 ` John Stultz 2014-04-01 21:21 ` [PATCH 0/5] Volatile Ranges (v12) & LSF-MM discussion fodder Johannes Weiner 2014-04-01 21:21 ` Johannes Weiner 2014-04-01 21:34 ` H. Peter Anvin 2014-04-01 21:34 ` H. Peter Anvin 2014-04-01 21:35 ` H. Peter Anvin 2014-04-01 21:35 ` H. Peter Anvin 2014-04-01 23:01 ` Dave Hansen 2014-04-01 23:01 ` Dave Hansen 2014-04-02 4:12 ` John Stultz 2014-04-02 4:12 ` John Stultz 2014-04-02 16:36 ` Johannes Weiner 2014-04-02 16:36 ` Johannes Weiner 2014-04-02 17:40 ` John Stultz 2014-04-02 17:40 ` John Stultz 2014-04-02 17:58 ` Johannes Weiner 2014-04-02 17:58 ` Johannes Weiner 2014-04-02 19:01 ` John Stultz 2014-04-02 19:01 ` John Stultz 2014-04-02 19:47 ` Johannes Weiner 2014-04-02 19:47 ` Johannes Weiner 2014-04-02 20:13 ` John Stultz 2014-04-02 20:13 ` John Stultz 2014-04-02 22:44 ` Jan Kara 2014-04-02 22:44 ` Jan Kara 2014-04-11 19:32 ` John Stultz 2014-04-11 19:32 ` John Stultz 2014-04-07 5:48 ` Minchan Kim 2014-04-07 5:48 ` Minchan Kim 2014-04-08 4:32 ` Kevin Easton 2014-04-08 3:38 ` John Stultz 2014-04-08 3:38 ` John Stultz 2014-04-07 5:24 ` Minchan Kim 2014-04-07 5:24 ` Minchan Kim 2014-04-02 4:03 ` John Stultz 2014-04-02 4:03 ` John Stultz 2014-04-02 4:07 ` H. Peter Anvin 2014-04-02 4:07 ` H. Peter Anvin 2014-04-02 16:30 ` Johannes Weiner 2014-04-02 16:30 ` Johannes Weiner 2014-04-02 16:32 ` H. Peter Anvin 2014-04-02 16:32 ` H. Peter Anvin 2014-04-02 16:37 ` H. Peter Anvin 2014-04-02 17:18 ` Johannes Weiner 2014-04-02 17:18 ` Johannes Weiner 2014-04-02 17:40 ` Dave Hansen 2014-04-02 17:40 ` Dave Hansen 2014-04-02 17:48 ` John Stultz 2014-04-02 17:48 ` John Stultz 2014-04-02 18:07 ` Johannes Weiner 2014-04-02 18:07 ` Johannes Weiner 2014-04-02 19:37 ` John Stultz 2014-04-02 19:37 ` John Stultz 2014-04-02 18:31 ` Andrea Arcangeli 2014-04-02 18:31 ` Andrea Arcangeli 2014-04-02 19:27 ` Johannes Weiner 2014-04-02 19:27 ` Johannes Weiner 2014-04-07 6:19 ` Minchan Kim 2014-04-07 6:19 ` Minchan Kim 2014-04-02 19:51 ` John Stultz 2014-04-02 19:51 ` John Stultz 2014-04-07 6:11 ` Minchan Kim 2014-04-07 6:11 ` Minchan Kim
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=1395436655-21670-6-git-send-email-john.stultz@linaro.org \ --to=john.stultz@linaro.org \ --cc=aarcange@redhat.com \ --cc=akpm@linux-foundation.org \ --cc=dave@sr71.net \ --cc=dmitry.adamushko@gmail.com \ --cc=hannes@cmpxchg.org \ --cc=hughd@google.com \ --cc=jack@suse.cz \ --cc=kernel-team@android.com \ --cc=kosaki.motohiro@gmail.com \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-mm@kvack.org \ --cc=mel@csn.ul.ie \ --cc=mh@glandium.org \ --cc=minchan@kernel.org \ --cc=neilb@suse.de \ --cc=riel@redhat.com \ --cc=rlove@google.com \ --cc=tglek@mozilla.com \ --cc=walken@google.com \ /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: linkBe 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.