All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Matthew Wilcox (Oracle)" <willy@infradead.org>
To: linux-mm@kvack.org
Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	Hugh Dickins <hughd@google.com>,
	William Kucharski <william.kucharski@oracle.com>,
	Jani Nikula <jani.nikula@linux.intel.com>,
	Alexey Dobriyan <adobriyan@gmail.com>,
	Johannes Weiner <hannes@cmpxchg.org>,
	Chris Wilson <chris@chris-wilson.co.uk>,
	Matthew Auld <matthew.auld@intel.com>,
	Huang Ying <ying.huang@intel.com>,
	intel-gfx@lists.freedesktop.org, cgroups@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: [PATCH v2 3/8] mm: Optimise madvise WILLNEED
Date: Thu, 10 Sep 2020 19:33:13 +0100	[thread overview]
Message-ID: <20200910183318.20139-4-willy@infradead.org> (raw)
In-Reply-To: <20200910183318.20139-1-willy@infradead.org>

Instead of calling find_get_entry() for every page index, use an XArray
iterator to skip over NULL entries, and avoid calling get_page(),
because we only want the swap entries.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Acked-by: Johannes Weiner <hannes@cmpxchg.org>
---
 mm/madvise.c | 21 ++++++++++++---------
 1 file changed, 12 insertions(+), 9 deletions(-)

diff --git a/mm/madvise.c b/mm/madvise.c
index dd1d43cf026d..96189acd6969 100644
--- a/mm/madvise.c
+++ b/mm/madvise.c
@@ -224,25 +224,28 @@ static void force_shm_swapin_readahead(struct vm_area_struct *vma,
 		unsigned long start, unsigned long end,
 		struct address_space *mapping)
 {
-	pgoff_t index;
+	XA_STATE(xas, &mapping->i_pages, linear_page_index(vma, start));
+	pgoff_t end_index = end / PAGE_SIZE;
 	struct page *page;
-	swp_entry_t swap;
 
-	for (; start < end; start += PAGE_SIZE) {
-		index = ((start - vma->vm_start) >> PAGE_SHIFT) + vma->vm_pgoff;
+	rcu_read_lock();
+	xas_for_each(&xas, page, end_index) {
+		swp_entry_t swap;
 
-		page = find_get_entry(mapping, index);
-		if (!xa_is_value(page)) {
-			if (page)
-				put_page(page);
+		if (!xa_is_value(page))
 			continue;
-		}
+		rcu_read_unlock();
+
 		swap = radix_to_swp_entry(page);
 		page = read_swap_cache_async(swap, GFP_HIGHUSER_MOVABLE,
 							NULL, 0, false);
 		if (page)
 			put_page(page);
+
+		rcu_read_lock();
+		xas_reset(&xas);
 	}
+	rcu_read_unlock();
 
 	lru_add_drain();	/* Push any new pages onto the LRU now */
 }
-- 
2.28.0


WARNING: multiple messages have this Message-ID (diff)
From: "Matthew Wilcox (Oracle)" <willy@infradead.org>
To: linux-mm@kvack.org
Cc: intel-gfx@lists.freedesktop.org,
	Huang Ying <ying.huang@intel.com>,
	Hugh Dickins <hughd@google.com>,
	linux-kernel@vger.kernel.org,
	Chris Wilson <chris@chris-wilson.co.uk>,
	William Kucharski <william.kucharski@oracle.com>,
	"Matthew Wilcox \(Oracle\)" <willy@infradead.org>,
	Johannes Weiner <hannes@cmpxchg.org>,
	cgroups@vger.kernel.org,
	Andrew Morton <akpm@linux-foundation.org>,
	Alexey Dobriyan <adobriyan@gmail.com>,
	Matthew Auld <matthew.auld@intel.com>
Subject: [Intel-gfx] [PATCH v2 3/8] mm: Optimise madvise WILLNEED
Date: Thu, 10 Sep 2020 19:33:13 +0100	[thread overview]
Message-ID: <20200910183318.20139-4-willy@infradead.org> (raw)
In-Reply-To: <20200910183318.20139-1-willy@infradead.org>

Instead of calling find_get_entry() for every page index, use an XArray
iterator to skip over NULL entries, and avoid calling get_page(),
because we only want the swap entries.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Acked-by: Johannes Weiner <hannes@cmpxchg.org>
---
 mm/madvise.c | 21 ++++++++++++---------
 1 file changed, 12 insertions(+), 9 deletions(-)

diff --git a/mm/madvise.c b/mm/madvise.c
index dd1d43cf026d..96189acd6969 100644
--- a/mm/madvise.c
+++ b/mm/madvise.c
@@ -224,25 +224,28 @@ static void force_shm_swapin_readahead(struct vm_area_struct *vma,
 		unsigned long start, unsigned long end,
 		struct address_space *mapping)
 {
-	pgoff_t index;
+	XA_STATE(xas, &mapping->i_pages, linear_page_index(vma, start));
+	pgoff_t end_index = end / PAGE_SIZE;
 	struct page *page;
-	swp_entry_t swap;
 
-	for (; start < end; start += PAGE_SIZE) {
-		index = ((start - vma->vm_start) >> PAGE_SHIFT) + vma->vm_pgoff;
+	rcu_read_lock();
+	xas_for_each(&xas, page, end_index) {
+		swp_entry_t swap;
 
-		page = find_get_entry(mapping, index);
-		if (!xa_is_value(page)) {
-			if (page)
-				put_page(page);
+		if (!xa_is_value(page))
 			continue;
-		}
+		rcu_read_unlock();
+
 		swap = radix_to_swp_entry(page);
 		page = read_swap_cache_async(swap, GFP_HIGHUSER_MOVABLE,
 							NULL, 0, false);
 		if (page)
 			put_page(page);
+
+		rcu_read_lock();
+		xas_reset(&xas);
 	}
+	rcu_read_unlock();
 
 	lru_add_drain();	/* Push any new pages onto the LRU now */
 }
-- 
2.28.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

WARNING: multiple messages have this Message-ID (diff)
From: "Matthew Wilcox (Oracle)" <willy@infradead.org>
To: linux-mm@kvack.org
Cc: intel-gfx@lists.freedesktop.org,
	Huang Ying <ying.huang@intel.com>,
	Hugh Dickins <hughd@google.com>,
	linux-kernel@vger.kernel.org,
	Chris Wilson <chris@chris-wilson.co.uk>,
	William Kucharski <william.kucharski@oracle.com>,
	"Matthew Wilcox (Oracle)" <willy@infradead.org>,
	Johannes Weiner <hannes@cmpxchg.org>,
	cgroups@vger.kernel.org,
	Andrew Morton <akpm@linux-foundation.org>,
	Alexey Dobriyan <adobriyan@gmail.com>,
	Matthew Auld <matthew.auld@intel.com>
Subject: [PATCH v2 3/8] mm: Optimise madvise WILLNEED
Date: Thu, 10 Sep 2020 19:33:13 +0100	[thread overview]
Message-ID: <20200910183318.20139-4-willy@infradead.org> (raw)
In-Reply-To: <20200910183318.20139-1-willy@infradead.org>

Instead of calling find_get_entry() for every page index, use an XArray
iterator to skip over NULL entries, and avoid calling get_page(),
because we only want the swap entries.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Acked-by: Johannes Weiner <hannes@cmpxchg.org>
---
 mm/madvise.c | 21 ++++++++++++---------
 1 file changed, 12 insertions(+), 9 deletions(-)

diff --git a/mm/madvise.c b/mm/madvise.c
index dd1d43cf026d..96189acd6969 100644
--- a/mm/madvise.c
+++ b/mm/madvise.c
@@ -224,25 +224,28 @@ static void force_shm_swapin_readahead(struct vm_area_struct *vma,
 		unsigned long start, unsigned long end,
 		struct address_space *mapping)
 {
-	pgoff_t index;
+	XA_STATE(xas, &mapping->i_pages, linear_page_index(vma, start));
+	pgoff_t end_index = end / PAGE_SIZE;
 	struct page *page;
-	swp_entry_t swap;
 
-	for (; start < end; start += PAGE_SIZE) {
-		index = ((start - vma->vm_start) >> PAGE_SHIFT) + vma->vm_pgoff;
+	rcu_read_lock();
+	xas_for_each(&xas, page, end_index) {
+		swp_entry_t swap;
 
-		page = find_get_entry(mapping, index);
-		if (!xa_is_value(page)) {
-			if (page)
-				put_page(page);
+		if (!xa_is_value(page))
 			continue;
-		}
+		rcu_read_unlock();
+
 		swap = radix_to_swp_entry(page);
 		page = read_swap_cache_async(swap, GFP_HIGHUSER_MOVABLE,
 							NULL, 0, false);
 		if (page)
 			put_page(page);
+
+		rcu_read_lock();
+		xas_reset(&xas);
 	}
+	rcu_read_unlock();
 
 	lru_add_drain();	/* Push any new pages onto the LRU now */
 }
-- 
2.28.0

  parent reply	other threads:[~2020-09-10 18:39 UTC|newest]

Thread overview: 67+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-09-10 18:33 [PATCH v2 0/8] Return head pages from find_*_entry Matthew Wilcox (Oracle)
2020-09-10 18:33 ` Matthew Wilcox (Oracle)
2020-09-10 18:33 ` [Intel-gfx] " Matthew Wilcox (Oracle)
2020-09-10 18:33 ` [PATCH v2 1/8] mm: Factor find_get_incore_page out of mincore_page Matthew Wilcox (Oracle)
2020-09-10 18:33   ` Matthew Wilcox (Oracle)
2020-09-10 18:33   ` [Intel-gfx] " Matthew Wilcox (Oracle)
2020-09-10 18:33 ` [PATCH v2 2/8] mm: Use find_get_incore_page in memcontrol Matthew Wilcox (Oracle)
2020-09-10 18:33   ` Matthew Wilcox (Oracle)
2020-09-10 18:33   ` [Intel-gfx] " Matthew Wilcox (Oracle)
2020-09-10 18:33 ` Matthew Wilcox (Oracle) [this message]
2020-09-10 18:33   ` [PATCH v2 3/8] mm: Optimise madvise WILLNEED Matthew Wilcox (Oracle)
2020-09-10 18:33   ` [Intel-gfx] " Matthew Wilcox (Oracle)
2020-09-14 16:17   ` Qian Cai
2020-09-14 16:17     ` Qian Cai
2020-09-14 16:17     ` [Intel-gfx] " Qian Cai
2020-09-14 16:17     ` Qian Cai
2020-09-14 16:47     ` Qian Cai
2020-09-14 16:47       ` Qian Cai
2020-09-14 16:47       ` [Intel-gfx] " Qian Cai
2020-09-14 16:47       ` Qian Cai
2020-09-14 16:50     ` Matthew Wilcox
2020-09-14 16:50       ` Matthew Wilcox
2020-09-14 16:50       ` [Intel-gfx] " Matthew Wilcox
2020-09-14 19:44       ` Qian Cai
2020-09-14 19:44         ` Qian Cai
2020-09-14 19:44         ` [Intel-gfx] " Qian Cai
2020-09-14 19:44         ` Qian Cai
2020-09-10 18:33 ` [PATCH v2 4/8] proc: Optimise smaps for shmem entries Matthew Wilcox (Oracle)
2020-09-10 18:33   ` Matthew Wilcox (Oracle)
2020-09-10 18:33   ` [Intel-gfx] " Matthew Wilcox (Oracle)
2020-09-10 18:33 ` [PATCH v2 5/8] i915: Use find_lock_page instead of find_lock_entry Matthew Wilcox (Oracle)
2020-09-10 18:33   ` Matthew Wilcox (Oracle)
2020-09-10 18:33   ` [Intel-gfx] " Matthew Wilcox (Oracle)
2020-09-10 18:33 ` [PATCH v2 6/8] mm: Convert find_get_entry to return the head page Matthew Wilcox (Oracle)
2020-09-10 18:33   ` Matthew Wilcox (Oracle)
2020-09-10 18:33   ` [Intel-gfx] " Matthew Wilcox (Oracle)
2020-09-14  8:55   ` [mm] 2037ab69a5: BUG:KASAN:null-ptr-deref_in_t kernel test robot
2020-09-14  8:55     ` kernel test robot
2020-09-14  8:55     ` kernel test robot
2020-09-14  8:55     ` [Intel-gfx] " kernel test robot
2020-09-14 11:27     ` Matthew Wilcox
2020-09-14 11:27       ` Matthew Wilcox
2020-09-14 11:27       ` Matthew Wilcox
2020-09-14 11:27       ` [Intel-gfx] " Matthew Wilcox
2020-09-10 18:33 ` [PATCH v2 7/8] mm/shmem: Return head page from find_lock_entry Matthew Wilcox (Oracle)
2020-09-10 18:33   ` Matthew Wilcox (Oracle)
2020-09-10 18:33   ` [Intel-gfx] " Matthew Wilcox (Oracle)
2020-09-12  3:20   ` Matthew Wilcox
2020-09-12  3:20     ` Matthew Wilcox
2020-09-12  3:20     ` [Intel-gfx] " Matthew Wilcox
2020-09-10 18:33 ` [PATCH v2 8/8] mm: Add find_lock_head Matthew Wilcox (Oracle)
2020-09-10 18:33   ` Matthew Wilcox (Oracle)
2020-09-10 18:33   ` [Intel-gfx] " Matthew Wilcox (Oracle)
2020-09-10 18:55 ` [Intel-gfx] ✗ Fi.CI.BUILD: failure for Return head pages from find_*_entry Patchwork
2020-09-12  3:49 ` [Intel-gfx] ✗ Fi.CI.BUILD: failure for Return head pages from find_*_entry (rev2) Patchwork
2020-09-14 18:37 ` [Intel-gfx] ✗ Fi.CI.BUILD: failure for Return head pages from find_*_entry (rev4) Patchwork
2020-09-15  8:10 ` [PATCH v2 0/8] Return head pages from find_*_entry Hugh Dickins
2020-09-15  8:10   ` Hugh Dickins
2020-09-15  8:10   ` [Intel-gfx] " Hugh Dickins
2020-09-15  8:10   ` Hugh Dickins
2020-09-15 12:53   ` Naresh Kamboju
2020-09-15 12:53     ` Naresh Kamboju
2020-09-15 12:53     ` [Intel-gfx] " Naresh Kamboju
2020-09-15 12:53     ` Naresh Kamboju
2020-09-15 13:08     ` Matthew Wilcox
2020-09-15 13:08       ` Matthew Wilcox
2020-09-15 13:08       ` [Intel-gfx] " Matthew Wilcox

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=20200910183318.20139-4-willy@infradead.org \
    --to=willy@infradead.org \
    --cc=adobriyan@gmail.com \
    --cc=akpm@linux-foundation.org \
    --cc=cgroups@vger.kernel.org \
    --cc=chris@chris-wilson.co.uk \
    --cc=hannes@cmpxchg.org \
    --cc=hughd@google.com \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=jani.nikula@linux.intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=matthew.auld@intel.com \
    --cc=william.kucharski@oracle.com \
    --cc=ying.huang@intel.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: link
Be 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.