All of lore.kernel.org
 help / color / mirror / Atom feed
diff for duplicates of <20161227155532.GI1308@dhcp22.suse.cz>

diff --git a/a/1.txt b/N1/1.txt
index 0ab28e4..f18a474 100644
--- a/a/1.txt
+++ b/N1/1.txt
@@ -12,96 +12,4 @@ yet sure whether we need the same thing for anon/file balancing in
 get_scan_count. I suspect we need but need to think more about that.
 
 Thanks a lot again!
----
->From b51f50340fe9e40b68be198b012f8ab9869c1850 Mon Sep 17 00:00:00 2001
-From: Michal Hocko <mhocko@suse.com>
-Date: Tue, 27 Dec 2016 16:28:44 +0100
-Subject: [PATCH] mm, vmscan: consider eligible zones in get_scan_count
-
-get_scan_count considers the whole node LRU size when
-- doing SCAN_FILE due to many page cache inactive pages
-- calculating the number of pages to scan
-
-in both cases this might lead to unexpected behavior especially on 32b
-systems where we can expect lowmem memory pressure very often.
-
-A large highmem zone can easily distort SCAN_FILE heuristic because
-there might be only few file pages from the eligible zones on the node
-lru and we would still enforce file lru scanning which can lead to
-trashing while we could still scan anonymous pages.
-
-The later use of lruvec_lru_size can be problematic as well. Especially
-when there are not many pages from the eligible zones. We would have to
-skip over many pages to find anything to reclaim but shrink_node_memcg
-would only reduce the remaining number to scan by SWAP_CLUSTER_MAX
-at maximum. Therefore we can end up going over a large LRU many times
-without actually having chance to reclaim much if anything at all. The
-closer we are out of memory on lowmem zone the worse the problem will
-be.
-
-Signed-off-by: Michal Hocko <mhocko@suse.com>
----
- mm/vmscan.c | 30 ++++++++++++++++++++++++++++--
- 1 file changed, 28 insertions(+), 2 deletions(-)
-
-diff --git a/mm/vmscan.c b/mm/vmscan.c
-index c98b1a585992..785b4d7fb8a0 100644
---- a/mm/vmscan.c
-+++ b/mm/vmscan.c
-@@ -252,6 +252,32 @@ unsigned long lruvec_zone_lru_size(struct lruvec *lruvec, enum lru_list lru, int
- }
- 
- /*
-+ * Return the number of pages on the given lru which are eligibne for the
-+ * given zone_idx
-+ */
-+static unsigned long lruvec_lru_size_zone_idx(struct lruvec *lruvec,
-+		enum lru_list lru, int zone_idx)
-+{
-+	struct pglist_data *pgdat = lruvec_pgdat(lruvec);
-+	unsigned long lru_size;
-+	int zid;
-+
-+	lru_size = lruvec_lru_size(lruvec, lru);
-+	for (zid = zone_idx + 1; zid < MAX_NR_ZONES; zid++) {
-+		struct zone *zone = &pgdat->node_zones[zid];
-+		unsigned long size;
-+
-+		if (!managed_zone(zone))
-+			continue;
-+
-+		size = lruvec_zone_lru_size(lruvec, lru, zid);
-+		lru_size -= min(size, lru_size);
-+	}
-+
-+	return lru_size;
-+}
-+
-+/*
-  * Add a shrinker callback to be called from the vm.
-  */
- int register_shrinker(struct shrinker *shrinker)
-@@ -2207,7 +2233,7 @@ static void get_scan_count(struct lruvec *lruvec, struct mem_cgroup *memcg,
- 	 * system is under heavy pressure.
- 	 */
- 	if (!inactive_list_is_low(lruvec, true, sc) &&
--	    lruvec_lru_size(lruvec, LRU_INACTIVE_FILE) >> sc->priority) {
-+	    lruvec_lru_size_zone_idx(lruvec, LRU_INACTIVE_FILE, sc->reclaim_idx) >> sc->priority) {
- 		scan_balance = SCAN_FILE;
- 		goto out;
- 	}
-@@ -2274,7 +2300,7 @@ static void get_scan_count(struct lruvec *lruvec, struct mem_cgroup *memcg,
- 			unsigned long size;
- 			unsigned long scan;
- 
--			size = lruvec_lru_size(lruvec, lru);
-+			size = lruvec_lru_size_zone_idx(lruvec, lru, sc->reclaim_idx);
- 			scan = size >> sc->priority;
- 
- 			if (!scan && pass && force_scan)
--- 
-2.10.2
-
--- 
-Michal Hocko
-SUSE Labs
\ No newline at end of file
+---
\ No newline at end of file
diff --git a/a/content_digest b/N1/content_digest
index d666a08..4f03e70 100644
--- a/a/content_digest
+++ b/N1/content_digest
@@ -72,99 +72,7 @@
   "get_scan_count. I suspect we need but need to think more about that.\n",
   "\n",
   "Thanks a lot again!\n",
-  "---\n",
-  ">From b51f50340fe9e40b68be198b012f8ab9869c1850 Mon Sep 17 00:00:00 2001\n",
-  "From: Michal Hocko <mhocko\@suse.com>\n",
-  "Date: Tue, 27 Dec 2016 16:28:44 +0100\n",
-  "Subject: [PATCH] mm, vmscan: consider eligible zones in get_scan_count\n",
-  "\n",
-  "get_scan_count considers the whole node LRU size when\n",
-  "- doing SCAN_FILE due to many page cache inactive pages\n",
-  "- calculating the number of pages to scan\n",
-  "\n",
-  "in both cases this might lead to unexpected behavior especially on 32b\n",
-  "systems where we can expect lowmem memory pressure very often.\n",
-  "\n",
-  "A large highmem zone can easily distort SCAN_FILE heuristic because\n",
-  "there might be only few file pages from the eligible zones on the node\n",
-  "lru and we would still enforce file lru scanning which can lead to\n",
-  "trashing while we could still scan anonymous pages.\n",
-  "\n",
-  "The later use of lruvec_lru_size can be problematic as well. Especially\n",
-  "when there are not many pages from the eligible zones. We would have to\n",
-  "skip over many pages to find anything to reclaim but shrink_node_memcg\n",
-  "would only reduce the remaining number to scan by SWAP_CLUSTER_MAX\n",
-  "at maximum. Therefore we can end up going over a large LRU many times\n",
-  "without actually having chance to reclaim much if anything at all. The\n",
-  "closer we are out of memory on lowmem zone the worse the problem will\n",
-  "be.\n",
-  "\n",
-  "Signed-off-by: Michal Hocko <mhocko\@suse.com>\n",
-  "---\n",
-  " mm/vmscan.c | 30 ++++++++++++++++++++++++++++--\n",
-  " 1 file changed, 28 insertions(+), 2 deletions(-)\n",
-  "\n",
-  "diff --git a/mm/vmscan.c b/mm/vmscan.c\n",
-  "index c98b1a585992..785b4d7fb8a0 100644\n",
-  "--- a/mm/vmscan.c\n",
-  "+++ b/mm/vmscan.c\n",
-  "\@\@ -252,6 +252,32 \@\@ unsigned long lruvec_zone_lru_size(struct lruvec *lruvec, enum lru_list lru, int\n",
-  " }\n",
-  " \n",
-  " /*\n",
-  "+ * Return the number of pages on the given lru which are eligibne for the\n",
-  "+ * given zone_idx\n",
-  "+ */\n",
-  "+static unsigned long lruvec_lru_size_zone_idx(struct lruvec *lruvec,\n",
-  "+\t\tenum lru_list lru, int zone_idx)\n",
-  "+{\n",
-  "+\tstruct pglist_data *pgdat = lruvec_pgdat(lruvec);\n",
-  "+\tunsigned long lru_size;\n",
-  "+\tint zid;\n",
-  "+\n",
-  "+\tlru_size = lruvec_lru_size(lruvec, lru);\n",
-  "+\tfor (zid = zone_idx + 1; zid < MAX_NR_ZONES; zid++) {\n",
-  "+\t\tstruct zone *zone = &pgdat->node_zones[zid];\n",
-  "+\t\tunsigned long size;\n",
-  "+\n",
-  "+\t\tif (!managed_zone(zone))\n",
-  "+\t\t\tcontinue;\n",
-  "+\n",
-  "+\t\tsize = lruvec_zone_lru_size(lruvec, lru, zid);\n",
-  "+\t\tlru_size -= min(size, lru_size);\n",
-  "+\t}\n",
-  "+\n",
-  "+\treturn lru_size;\n",
-  "+}\n",
-  "+\n",
-  "+/*\n",
-  "  * Add a shrinker callback to be called from the vm.\n",
-  "  */\n",
-  " int register_shrinker(struct shrinker *shrinker)\n",
-  "\@\@ -2207,7 +2233,7 \@\@ static void get_scan_count(struct lruvec *lruvec, struct mem_cgroup *memcg,\n",
-  " \t * system is under heavy pressure.\n",
-  " \t */\n",
-  " \tif (!inactive_list_is_low(lruvec, true, sc) &&\n",
-  "-\t    lruvec_lru_size(lruvec, LRU_INACTIVE_FILE) >> sc->priority) {\n",
-  "+\t    lruvec_lru_size_zone_idx(lruvec, LRU_INACTIVE_FILE, sc->reclaim_idx) >> sc->priority) {\n",
-  " \t\tscan_balance = SCAN_FILE;\n",
-  " \t\tgoto out;\n",
-  " \t}\n",
-  "\@\@ -2274,7 +2300,7 \@\@ static void get_scan_count(struct lruvec *lruvec, struct mem_cgroup *memcg,\n",
-  " \t\t\tunsigned long size;\n",
-  " \t\t\tunsigned long scan;\n",
-  " \n",
-  "-\t\t\tsize = lruvec_lru_size(lruvec, lru);\n",
-  "+\t\t\tsize = lruvec_lru_size_zone_idx(lruvec, lru, sc->reclaim_idx);\n",
-  " \t\t\tscan = size >> sc->priority;\n",
-  " \n",
-  " \t\t\tif (!scan && pass && force_scan)\n",
-  "-- \n",
-  "2.10.2\n",
-  "\n",
-  "-- \n",
-  "Michal Hocko\n",
-  "SUSE Labs"
+  "---"
 ]
 
-2da98d36c85deb407d3f333ef913221e1bddc251fc6a10866596fd44b599be8a
+ff15302606fb28c372f8fc0a7b01381b4029fb249b8be6debf7e62958d6f9c1c

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.