All of lore.kernel.org
 help / color / mirror / Atom feed
diff for duplicates of <20140210082931.GA25323@linux.vnet.ibm.com>

diff --git a/a/1.txt b/N1/1.txt
index 87b5ee9..624e5b5 100644
--- a/a/1.txt
+++ b/N1/1.txt
@@ -11,4 +11,101 @@ Sorry took some time to get and measure benefit on the memoryless system.
 Resending patch with changelog and comment changes based on your and
 David's suggestion.
 
-----8<---
+----8<--- 
+>From fc8186b5c33a34810a34f5aadd50082463117636 Mon Sep 17 00:00:00 2001
+From: Raghavendra K T <raghavendra.kt@linux.vnet.ibm.com>
+Date: Mon, 25 Nov 2013 14:29:03 +0530
+Subject: [RFC PATCH V5 RESEND] mm readahead: Fix readahead fail for no local
+ memory and limit readahead pages
+
+Currently max_sane_readahead() returns zero on the cpu having no local memory node
+which leads to readahead failure. Fix the readahead failure by returning
+minimum of (requested pages, 4k). Users running application a on memory less cpu
+which needs readahead such as streaming application see considerable boost in the
+performance.
+
+Result:
+fadvise experiment with FADV_WILLNEED on a PPC machine having memoryless CPU
+with 1GB testfile ( 12 iterations) yielded 46.66% improvement
+
+kernel             Avg        Stddev
+base_ppc         11.946833     1.34%
+patched_ppc       6.3720833    1.80%
+
+Below result proves that there is no impact on the normal NUMA cases w/ patch.
+
+fadvise experiment with FADV_WILLNEED on a x240 machine with 1GB testfile
+32GB* 4G RAM  numa machine ( 12 iterations) yielded
+
+Kernel     Avg      Stddev
+base      7.2963    1.10 %
+patched   7.2972    1.18 %
+
+Reviewed-by: Jan Kara <jack@suse.cz>
+Signed-off-by: Raghavendra K T <raghavendra.kt@linux.vnet.ibm.com>
+---
+ 
+ Changes in V5:
+ - Updated the changelog with benefit seen (Andrew)
+ - Discard remote memroy term in comment since memoryless CPU
+   will have affinity to numa_mem_id() (David)
+ - Drop the 4k limit for normal readahead. (Jan Kara)
+
+ Changes in V4:
+ - Check for total node memory to decide whether we don't
+   have local memory (jan Kara)
+ - Add 4k page limit on readahead for normal and remote readahead (Linus)
+   (Linus suggestion was 16MB limit).
+
+ Changes in V3:
+ - Drop iterating over numa nodes that calculates total free pages (Linus)
+
+ Agree that we do not have control on allocation for readahead on a
+ particular numa node and hence for remote readahead we can not further
+ sanitize based on potential free pages of that node. and also we do
+ not want to itererate through all nodes to find total free pages.
+
+ Suggestions and comments welcome
+ mm/readahead.c | 21 +++++++++++++++++++--
+ 1 file changed, 19 insertions(+), 2 deletions(-)
+
+diff --git a/mm/readahead.c b/mm/readahead.c
+index 0de2360..4c7343b 100644
+--- a/mm/readahead.c
++++ b/mm/readahead.c
+@@ -233,14 +233,31 @@ int force_page_cache_readahead(struct address_space *mapping, struct file *filp,
+ 	return 0;
+ }
+ 
++#define MAX_REMOTE_READAHEAD   4096UL
+ /*
+  * Given a desired number of PAGE_CACHE_SIZE readahead pages, return a
+  * sensible upper limit.
+  */
+ unsigned long max_sane_readahead(unsigned long nr)
+ {
+-	return min(nr, (node_page_state(numa_node_id(), NR_INACTIVE_FILE)
+-		+ node_page_state(numa_node_id(), NR_FREE_PAGES)) / 2);
++	unsigned long local_free_page;
++	int nid;
++
++	nid = numa_node_id();
++	if (node_present_pages(nid)) {
++		/*
++		 * We sanitize readahead size depending on free memory in
++		 * the local node.
++		 */
++		local_free_page = node_page_state(nid, NR_INACTIVE_FILE)
++				 + node_page_state(nid, NR_FREE_PAGES);
++		return min(nr, local_free_page / 2);
++	}
++	/*
++	 * Ensure readahead success on a memoryless node cpu. But we limit
++	 * the readahead to 4k pages to avoid trashing page cache.
++	 */
++	return min(nr, MAX_REMOTE_READAHEAD);
+ }
+ 
+ /*
+-- 
+1.7.11.7
diff --git a/a/content_digest b/N1/content_digest
index f7c6d74..88e2147 100644
--- a/a/content_digest
+++ b/N1/content_digest
@@ -30,6 +30,103 @@
  "Resending patch with changelog and comment changes based on your and\n"
  "David's suggestion.\n"
  "\n"
- ----8<---
+ "----8<--- \n"
+ ">From fc8186b5c33a34810a34f5aadd50082463117636 Mon Sep 17 00:00:00 2001\n"
+ "From: Raghavendra K T <raghavendra.kt@linux.vnet.ibm.com>\n"
+ "Date: Mon, 25 Nov 2013 14:29:03 +0530\n"
+ "Subject: [RFC PATCH V5 RESEND] mm readahead: Fix readahead fail for no local\n"
+ " memory and limit readahead pages\n"
+ "\n"
+ "Currently max_sane_readahead() returns zero on the cpu having no local memory node\n"
+ "which leads to readahead failure. Fix the readahead failure by returning\n"
+ "minimum of (requested pages, 4k). Users running application a on memory less cpu\n"
+ "which needs readahead such as streaming application see considerable boost in the\n"
+ "performance.\n"
+ "\n"
+ "Result:\n"
+ "fadvise experiment with FADV_WILLNEED on a PPC machine having memoryless CPU\n"
+ "with 1GB testfile ( 12 iterations) yielded 46.66% improvement\n"
+ "\n"
+ "kernel             Avg        Stddev\n"
+ "base_ppc         11.946833     1.34%\n"
+ "patched_ppc       6.3720833    1.80%\n"
+ "\n"
+ "Below result proves that there is no impact on the normal NUMA cases w/ patch.\n"
+ "\n"
+ "fadvise experiment with FADV_WILLNEED on a x240 machine with 1GB testfile\n"
+ "32GB* 4G RAM  numa machine ( 12 iterations) yielded\n"
+ "\n"
+ "Kernel     Avg      Stddev\n"
+ "base      7.2963    1.10 %\n"
+ "patched   7.2972    1.18 %\n"
+ "\n"
+ "Reviewed-by: Jan Kara <jack@suse.cz>\n"
+ "Signed-off-by: Raghavendra K T <raghavendra.kt@linux.vnet.ibm.com>\n"
+ "---\n"
+ " \n"
+ " Changes in V5:\n"
+ " - Updated the changelog with benefit seen (Andrew)\n"
+ " - Discard remote memroy term in comment since memoryless CPU\n"
+ "   will have affinity to numa_mem_id() (David)\n"
+ " - Drop the 4k limit for normal readahead. (Jan Kara)\n"
+ "\n"
+ " Changes in V4:\n"
+ " - Check for total node memory to decide whether we don't\n"
+ "   have local memory (jan Kara)\n"
+ " - Add 4k page limit on readahead for normal and remote readahead (Linus)\n"
+ "   (Linus suggestion was 16MB limit).\n"
+ "\n"
+ " Changes in V3:\n"
+ " - Drop iterating over numa nodes that calculates total free pages (Linus)\n"
+ "\n"
+ " Agree that we do not have control on allocation for readahead on a\n"
+ " particular numa node and hence for remote readahead we can not further\n"
+ " sanitize based on potential free pages of that node. and also we do\n"
+ " not want to itererate through all nodes to find total free pages.\n"
+ "\n"
+ " Suggestions and comments welcome\n"
+ " mm/readahead.c | 21 +++++++++++++++++++--\n"
+ " 1 file changed, 19 insertions(+), 2 deletions(-)\n"
+ "\n"
+ "diff --git a/mm/readahead.c b/mm/readahead.c\n"
+ "index 0de2360..4c7343b 100644\n"
+ "--- a/mm/readahead.c\n"
+ "+++ b/mm/readahead.c\n"
+ "@@ -233,14 +233,31 @@ int force_page_cache_readahead(struct address_space *mapping, struct file *filp,\n"
+ " \treturn 0;\n"
+ " }\n"
+ " \n"
+ "+#define MAX_REMOTE_READAHEAD   4096UL\n"
+ " /*\n"
+ "  * Given a desired number of PAGE_CACHE_SIZE readahead pages, return a\n"
+ "  * sensible upper limit.\n"
+ "  */\n"
+ " unsigned long max_sane_readahead(unsigned long nr)\n"
+ " {\n"
+ "-\treturn min(nr, (node_page_state(numa_node_id(), NR_INACTIVE_FILE)\n"
+ "-\t\t+ node_page_state(numa_node_id(), NR_FREE_PAGES)) / 2);\n"
+ "+\tunsigned long local_free_page;\n"
+ "+\tint nid;\n"
+ "+\n"
+ "+\tnid = numa_node_id();\n"
+ "+\tif (node_present_pages(nid)) {\n"
+ "+\t\t/*\n"
+ "+\t\t * We sanitize readahead size depending on free memory in\n"
+ "+\t\t * the local node.\n"
+ "+\t\t */\n"
+ "+\t\tlocal_free_page = node_page_state(nid, NR_INACTIVE_FILE)\n"
+ "+\t\t\t\t + node_page_state(nid, NR_FREE_PAGES);\n"
+ "+\t\treturn min(nr, local_free_page / 2);\n"
+ "+\t}\n"
+ "+\t/*\n"
+ "+\t * Ensure readahead success on a memoryless node cpu. But we limit\n"
+ "+\t * the readahead to 4k pages to avoid trashing page cache.\n"
+ "+\t */\n"
+ "+\treturn min(nr, MAX_REMOTE_READAHEAD);\n"
+ " }\n"
+ " \n"
+ " /*\n"
+ "-- \n"
+ 1.7.11.7
 
-d6effb489e3fc8224de0c1afc58f77185546e77f956f176bf3b39eaead1d2186
+631e133909afd01259967ecf97140266006189571f4d1573333f9a89e32027da

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.