All of lore.kernel.org
 help / color / mirror / Atom feed
* [RFC PATCH V5] mm readahead: Fix readahead fail for no local memory and limit readahead pages
@ 2014-01-22 10:53 ` Raghavendra K T
  0 siblings, 0 replies; 64+ messages in thread
From: Raghavendra K T @ 2014-01-22 10:53 UTC (permalink / raw)
  To: Andrew Morton, Fengguang Wu, David Cohen, Al Viro,
	Damien Ramonda, Jan Kara, Linus
  Cc: linux-mm, linux-kernel, Raghavendra K T

max_sane_readahead returns zero on the cpu having no local memory
node. Fix that by returning a sanitized number of pages viz.,
minimum of (requested pages, 4k)

Result:
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:
 - 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 | 22 ++++++++++++++++++++--
 1 file changed, 20 insertions(+), 2 deletions(-)

diff --git a/mm/readahead.c b/mm/readahead.c
index 7cdbb44..9d2afd0 100644
--- a/mm/readahead.c
+++ b/mm/readahead.c
@@ -237,14 +237,32 @@ int force_page_cache_readahead(struct address_space *mapping, struct file *filp,
 	return ret;
 }
 
+#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);
+	}
+	/*
+	 * Readahead onto remote memory is better than no readahead when local
+	 * numa node does not have memory. We limit the readahead to 4k
+	 * pages though to avoid trashing page cache.
+	 */
+	return min(nr, MAX_REMOTE_READAHEAD);
 }
 
 /*
-- 
1.7.11.7


^ permalink raw reply related	[flat|nested] 64+ messages in thread

end of thread, other threads:[~2014-02-18  1:31 UTC | newest]

Thread overview: 64+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-01-22 10:53 [RFC PATCH V5] mm readahead: Fix readahead fail for no local memory and limit readahead pages Raghavendra K T
2014-01-22 10:53 ` Raghavendra K T
2014-02-03  8:30 ` Raghavendra K T
2014-02-03  8:30   ` Raghavendra K T
2014-02-06 22:51 ` Andrew Morton
2014-02-06 22:51   ` Andrew Morton
2014-02-06 22:58   ` David Rientjes
2014-02-06 22:58     ` David Rientjes
2014-02-06 23:22     ` Andrew Morton
2014-02-06 23:22       ` Andrew Morton
2014-02-06 23:48       ` David Rientjes
2014-02-06 23:48         ` David Rientjes
2014-02-06 23:58         ` David Rientjes
2014-02-06 23:58           ` David Rientjes
2014-02-07 10:42           ` Raghavendra K T
2014-02-07 10:42             ` Raghavendra K T
2014-02-07 20:41             ` David Rientjes
2014-02-07 20:41               ` David Rientjes
2014-02-10  8:21               ` Raghavendra K T
2014-02-10  8:21                 ` Raghavendra K T
2014-02-10 10:05                 ` David Rientjes
2014-02-10 10:05                   ` David Rientjes
2014-02-10 12:25                   ` Raghavendra K T
2014-02-10 12:25                     ` Raghavendra K T
2014-02-10 21:35                     ` David Rientjes
2014-02-10 21:35                       ` David Rientjes
2014-02-13  7:07                       ` Raghavendra K T
2014-02-13  7:07                         ` Raghavendra K T
2014-02-13  8:05                         ` David Rientjes
2014-02-13  8:05                           ` David Rientjes
2014-02-13 10:04                           ` Raghavendra K T
2014-02-13 10:04                             ` Raghavendra K T
2014-02-13 22:41                             ` David Rientjes
2014-02-13 22:41                               ` David Rientjes
2014-02-14  0:14                               ` Nishanth Aravamudan
2014-02-14  0:14                                 ` Nishanth Aravamudan
2014-02-14  0:37                                 ` Linus Torvalds
2014-02-14  0:37                                   ` Linus Torvalds
2014-02-14  0:45                                   ` Andrew Morton
2014-02-14  0:45                                     ` Andrew Morton
2014-02-14  4:32                                   ` Nishanth Aravamudan
2014-02-14  4:32                                     ` Nishanth Aravamudan
2014-02-14 10:54                                     ` David Rientjes
2014-02-14 10:54                                       ` David Rientjes
2014-02-17 19:28                                       ` Nishanth Aravamudan
2014-02-17 19:28                                         ` Nishanth Aravamudan
2014-02-17 23:14                                         ` David Rientjes
2014-02-17 23:14                                           ` David Rientjes
2014-02-18  1:31                                           ` Nishanth Aravamudan
2014-02-18  1:31                                             ` Nishanth Aravamudan
2014-02-17 22:59                                     ` Linus Torvalds
2014-02-17 22:59                                       ` Linus Torvalds
2014-02-14  7:43                                   ` Jan Kara
2014-02-14  7:43                                     ` Jan Kara
2014-02-17 22:57                                     ` Linus Torvalds
2014-02-17 22:57                                       ` Linus Torvalds
2014-02-14  5:47                               ` Nishanth Aravamudan
2014-02-14  5:47                                 ` Nishanth Aravamudan
2014-02-13 21:06                           ` Andrew Morton
2014-02-13 21:06                             ` Andrew Morton
2014-02-13 21:42                             ` Nishanth Aravamudan
2014-02-13 21:42                               ` Nishanth Aravamudan
2014-02-10  8:29   ` [RFC PATCH V5 RESEND] " Raghavendra K T
2014-02-10  8:29     ` Raghavendra K T

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.