remove unreferenced patches
This commit is contained in:
parent
ec7325df62
commit
2fd5228fc7
@ -1,81 +0,0 @@
|
|||||||
From c01043c9aa51a63bd01c60e53494ca4a7e994542 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Mel Gorman <mgorman@suse.de>
|
|
||||||
Date: Fri, 7 Oct 2011 16:17:23 +0100
|
|
||||||
Subject: [PATCH 2/2] mm: Abort reclaim/compaction if compaction can proceed
|
|
||||||
|
|
||||||
If compaction can proceed, shrink_zones() stops doing any work but
|
|
||||||
the callers still shrink_slab(), raises the priority and potentially
|
|
||||||
sleeps. This patch aborts direct reclaim/compaction entirely if
|
|
||||||
compaction can proceed.
|
|
||||||
|
|
||||||
Signed-off-by: Mel Gorman <mgorman@suse.de>
|
|
||||||
---
|
|
||||||
mm/vmscan.c | 20 ++++++++++++++++----
|
|
||||||
1 files changed, 16 insertions(+), 4 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/mm/vmscan.c b/mm/vmscan.c
|
|
||||||
index 8c03534..b295a38 100644
|
|
||||||
--- a/mm/vmscan.c
|
|
||||||
+++ b/mm/vmscan.c
|
|
||||||
@@ -2000,14 +2000,19 @@ restart:
|
|
||||||
*
|
|
||||||
* If a zone is deemed to be full of pinned pages then just give it a light
|
|
||||||
* scan then give up on it.
|
|
||||||
+ *
|
|
||||||
+ * This function returns true if a zone is being reclaimed for a costly
|
|
||||||
+ * high-order allocation and compaction is either ready to begin or deferred.
|
|
||||||
+ * This indicates to the caller that it should retry the allocation or fail.
|
|
||||||
*/
|
|
||||||
-static void shrink_zones(int priority, struct zonelist *zonelist,
|
|
||||||
+static bool shrink_zones(int priority, struct zonelist *zonelist,
|
|
||||||
struct scan_control *sc)
|
|
||||||
{
|
|
||||||
struct zoneref *z;
|
|
||||||
struct zone *zone;
|
|
||||||
unsigned long nr_soft_reclaimed;
|
|
||||||
unsigned long nr_soft_scanned;
|
|
||||||
+ bool should_abort_reclaim = false;
|
|
||||||
|
|
||||||
for_each_zone_zonelist_nodemask(zone, z, zonelist,
|
|
||||||
gfp_zone(sc->gfp_mask), sc->nodemask) {
|
|
||||||
@@ -2025,12 +2030,15 @@ static void shrink_zones(int priority, struct zonelist *zonelist,
|
|
||||||
if (COMPACTION_BUILD) {
|
|
||||||
/*
|
|
||||||
* If we already have plenty of memory free
|
|
||||||
- * for compaction, don't free any more.
|
|
||||||
+ * for compaction in this zone , don't free any
|
|
||||||
+ * more.
|
|
||||||
*/
|
|
||||||
if (sc->order > PAGE_ALLOC_COSTLY_ORDER &&
|
|
||||||
(compaction_suitable(zone, sc->order) ||
|
|
||||||
- compaction_deferred(zone)))
|
|
||||||
+ compaction_deferred(zone))) {
|
|
||||||
+ should_abort_reclaim = true;
|
|
||||||
continue;
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* This steals pages from memory cgroups over softlimit
|
|
||||||
@@ -2049,6 +2057,8 @@ static void shrink_zones(int priority, struct zonelist *zonelist,
|
|
||||||
|
|
||||||
shrink_zone(priority, zone, sc);
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+ return should_abort_reclaim;
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool zone_reclaimable(struct zone *zone)
|
|
||||||
@@ -2113,7 +2123,9 @@ static unsigned long do_try_to_free_pages(struct zonelist *zonelist,
|
|
||||||
sc->nr_scanned = 0;
|
|
||||||
if (!priority)
|
|
||||||
disable_swap_token(sc->mem_cgroup);
|
|
||||||
- shrink_zones(priority, zonelist, sc);
|
|
||||||
+ if (shrink_zones(priority, zonelist, sc))
|
|
||||||
+ break;
|
|
||||||
+
|
|
||||||
/*
|
|
||||||
* Don't shrink slabs when reclaiming memory from
|
|
||||||
* over limit cgroups
|
|
||||||
--
|
|
||||||
1.7.6.4
|
|
||||||
|
|
@ -757,9 +757,6 @@ Patch20000: utrace.patch
|
|||||||
Patch21000: arm-omap-dt-compat.patch
|
Patch21000: arm-omap-dt-compat.patch
|
||||||
Patch21001: arm-smsc-support-reading-mac-address-from-device-tree.patch
|
Patch21001: arm-smsc-support-reading-mac-address-from-device-tree.patch
|
||||||
|
|
||||||
Patch21021: 0002-mm-Abort-reclaim-compaction-if-compaction-can-procee.patch
|
|
||||||
Patch21022: mm-do-not-stall-in-synchronous-compaction-for-THP-allocations.patch
|
|
||||||
|
|
||||||
#rhbz 717735
|
#rhbz 717735
|
||||||
Patch21045: nfs-client-freezer.patch
|
Patch21045: nfs-client-freezer.patch
|
||||||
|
|
||||||
|
@ -1,115 +0,0 @@
|
|||||||
https://lkml.org/lkml/2011/11/10/173
|
|
||||||
|
|
||||||
Date Thu, 10 Nov 2011 10:06:16 +0000
|
|
||||||
From Mel Gorman <>
|
|
||||||
Subject [PATCH] mm: Do not stall in synchronous compaction for THP allocations
|
|
||||||
|
|
||||||
|
|
||||||
Occasionally during large file copies to slow storage, there are still
|
|
||||||
reports of user-visible stalls when THP is enabled. Reports on this
|
|
||||||
have been intermittent and not reliable to reproduce locally but;
|
|
||||||
|
|
||||||
Andy Isaacson reported a problem copying to VFAT on SD Card
|
|
||||||
https://lkml.org/lkml/2011/11/7/2
|
|
||||||
|
|
||||||
In this case, it was stuck in munmap for betwen 20 and 60
|
|
||||||
seconds in compaction. It is also possible that khugepaged
|
|
||||||
was holding mmap_sem on this process if CONFIG_NUMA was set.
|
|
||||||
|
|
||||||
Johannes Weiner reported stalls on USB
|
|
||||||
https://lkml.org/lkml/2011/7/25/378
|
|
||||||
|
|
||||||
In this case, there is no stack trace but it looks like the
|
|
||||||
same problem. The USB stick may have been using NTFS as a
|
|
||||||
filesystem based on other work done related to writing back
|
|
||||||
to USB around the same time.
|
|
||||||
|
|
||||||
Internally in SUSE, I received a bug report related to stalls in firefox
|
|
||||||
when using Java and Flash heavily while copying from NFS
|
|
||||||
to VFAT on USB. It has not been confirmed to be the same problem
|
|
||||||
but if it looks like a duck and quacks like a duck.....
|
|
||||||
In the past, commit [11bc82d6: mm: compaction: Use async migration for
|
|
||||||
__GFP_NO_KSWAPD and enforce no writeback] forced that sync compaction
|
|
||||||
would never be used for THP allocations. This was reverted in commit
|
|
||||||
[c6a140bf: mm/compaction: reverse the change that forbade sync
|
|
||||||
migraton with __GFP_NO_KSWAPD] on the grounds that it was uncertain
|
|
||||||
it was beneficial.
|
|
||||||
|
|
||||||
While user-visible stalls do not happen for me when writing to USB,
|
|
||||||
I setup a test running postmark while short-lived processes created
|
|
||||||
anonymous mapping. The objective was to exercise the paths that
|
|
||||||
allocate transparent huge pages. I then logged when processes were
|
|
||||||
stalled for more than 1 second, recorded a stack strace and did some
|
|
||||||
analysis to aggregate unique "stall events" which revealed
|
|
||||||
|
|
||||||
Time stalled in this event: 47369 ms
|
|
||||||
Event count: 20
|
|
||||||
usemem sleep_on_page 3690 ms
|
|
||||||
usemem sleep_on_page 2148 ms
|
|
||||||
usemem sleep_on_page 1534 ms
|
|
||||||
usemem sleep_on_page 1518 ms
|
|
||||||
usemem sleep_on_page 1225 ms
|
|
||||||
usemem sleep_on_page 2205 ms
|
|
||||||
usemem sleep_on_page 2399 ms
|
|
||||||
usemem sleep_on_page 2398 ms
|
|
||||||
usemem sleep_on_page 3760 ms
|
|
||||||
usemem sleep_on_page 1861 ms
|
|
||||||
usemem sleep_on_page 2948 ms
|
|
||||||
usemem sleep_on_page 1515 ms
|
|
||||||
usemem sleep_on_page 1386 ms
|
|
||||||
usemem sleep_on_page 1882 ms
|
|
||||||
usemem sleep_on_page 1850 ms
|
|
||||||
usemem sleep_on_page 3715 ms
|
|
||||||
usemem sleep_on_page 3716 ms
|
|
||||||
usemem sleep_on_page 4846 ms
|
|
||||||
usemem sleep_on_page 1306 ms
|
|
||||||
usemem sleep_on_page 1467 ms
|
|
||||||
[<ffffffff810ef30c>] wait_on_page_bit+0x6c/0x80
|
|
||||||
[<ffffffff8113de9f>] unmap_and_move+0x1bf/0x360
|
|
||||||
[<ffffffff8113e0e2>] migrate_pages+0xa2/0x1b0
|
|
||||||
[<ffffffff81134273>] compact_zone+0x1f3/0x2f0
|
|
||||||
[<ffffffff811345d8>] compact_zone_order+0xa8/0xf0
|
|
||||||
[<ffffffff811346ff>] try_to_compact_pages+0xdf/0x110
|
|
||||||
[<ffffffff810f773a>] __alloc_pages_direct_compact+0xda/0x1a0
|
|
||||||
[<ffffffff810f7d5d>] __alloc_pages_slowpath+0x55d/0x7a0
|
|
||||||
[<ffffffff810f8151>] __alloc_pages_nodemask+0x1b1/0x1c0
|
|
||||||
[<ffffffff811331db>] alloc_pages_vma+0x9b/0x160
|
|
||||||
[<ffffffff81142bb0>] do_huge_pmd_anonymous_page+0x160/0x270
|
|
||||||
[<ffffffff814410a7>] do_page_fault+0x207/0x4c0
|
|
||||||
[<ffffffff8143dde5>] page_fault+0x25/0x30
|
|
||||||
The stall times are approximate at best but the estimates represent 25%
|
|
||||||
of the worst stalls and even if the estimates are off by a factor of
|
|
||||||
10, it's severe.
|
|
||||||
|
|
||||||
This patch once again prevents sync migration for transparent
|
|
||||||
hugepage allocations as it is preferable to fail a THP allocation
|
|
||||||
than stall. It was suggested that __GFP_NORETRY be used instead of
|
|
||||||
__GFP_NO_KSWAPD. This would look less like a special case but would
|
|
||||||
still cause compaction to run at least once with sync compaction.
|
|
||||||
|
|
||||||
If accepted, this is a -stable candidate.
|
|
||||||
|
|
||||||
Reported-by: Andy Isaacson <adi@hexapodia.org>
|
|
||||||
Reported-by: Johannes Weiner <hannes@cmpxchg.org>
|
|
||||||
Signed-off-by: Mel Gorman <mgorman@suse.de>
|
|
||||||
---
|
|
||||||
|
|
||||||
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
|
|
||||||
index 9dd443d..84bf962 100644
|
|
||||||
--- a/mm/page_alloc.c
|
|
||||||
+++ b/mm/page_alloc.c
|
|
||||||
@@ -2168,7 +2168,13 @@ rebalance:
|
|
||||||
sync_migration);
|
|
||||||
if (page)
|
|
||||||
goto got_pg;
|
|
||||||
- sync_migration = true;
|
|
||||||
+
|
|
||||||
+ /*
|
|
||||||
+ * Do not use sync migration for transparent hugepage allocations as
|
|
||||||
+ * it could stall writing back pages which is far worse than simply
|
|
||||||
+ * failing to promote a page.
|
|
||||||
+ */
|
|
||||||
+ sync_migration = !(gfp_mask & __GFP_NO_KSWAPD);
|
|
||||||
|
|
||||||
/* Try direct reclaim and then allocating */
|
|
||||||
page = __alloc_pages_direct_reclaim(gfp_mask, order,
|
|
Loading…
Reference in New Issue
Block a user