From: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
To: Christoph Lameter <clameter@sgi.com>
Cc: akpm@osdl.org, hugh@veritas.com, linux-kernel@vger.kernel.org,
lee.schermerhorn@hp.com, linux-mm@kvack.org, taka@valinux.co.jp,
marcelo.tosatti@cyclades.com
Subject: Re: [PATCH 5/5] Swapless V2: Revise main migration logic
Date: Fri, 14 Apr 2006 11:34:55 +0900 [thread overview]
Message-ID: <20060414113455.15fd5162.kamezawa.hiroyu@jp.fujitsu.com> (raw)
In-Reply-To: <Pine.LNX.4.64.0604131832020.16220@schroedinger.engr.sgi.com>
On Thu, 13 Apr 2006 18:33:07 -0700 (PDT)
Christoph Lameter <clameter@sgi.com> wrote:
> On Fri, 14 Apr 2006, KAMEZAWA Hiroyuki wrote:
>
> > For hotremove (I stops it now..), we should fix this later (if we can do).
> > If new SWP_TYPE_MIGRATION swp entry can contain write protect bit,
> > hotremove can avoid copy-on-write but things will be more complicated.
>
> This is a known issue.I'd be glad if you could come up with a working
> scheme to solve this that is simple.
>
This patch can fix copy-on-write problem.
I just compiled this patch (because I cannot use NUMA now.)
BTW, why MAX_SWAPFILES_SHIFT==5 now ? required by some arch ?
-Kame
==
This patch removes unnecessary copy-on-write after page migraiton.
This patch preserve writable(write-protection) bit in swap entry,
and make pte writable/protected when push it back.
Because I don't understand why MAX_SWAPFILES_SHIFT==5 now,
This patch uses one more swap type for migration.
(By this patch, available swp type goes down to 30.)
Signed-Off-By: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Index: Christoph-New-Migration/include/linux/swap.h
===================================================================
--- Christoph-New-Migration.orig/include/linux/swap.h 2006-04-14 11:13:38.000000000 +0900
+++ Christoph-New-Migration/include/linux/swap.h 2006-04-14 11:13:55.000000000 +0900
@@ -33,8 +33,11 @@
#define MAX_SWAPFILES (1 << MAX_SWAPFILES_SHIFT)
#else
/* Use last entry for page migration swap entries */
-#define MAX_SWAPFILES ((1 << MAX_SWAPFILES_SHIFT)-1)
-#define SWP_TYPE_MIGRATION MAX_SWAPFILES
+#define MAX_SWAPFILES ((1 << MAX_SWAPFILES_SHIFT)-2)
+/* write protected page under migration*/
+#define SWP_TYPE_MIGRATION_WP (MAX_SWAPFILES - 1)
+/* write enabled migration type */
+#define SWP_TYPE_MIGRATION_WE (MAX_SWAPFILES)
#endif
/*
Index: Christoph-New-Migration/include/linux/swapops.h
===================================================================
--- Christoph-New-Migration.orig/include/linux/swapops.h 2006-04-14 11:13:38.000000000 +0900
+++ Christoph-New-Migration/include/linux/swapops.h 2006-04-14 11:13:55.000000000 +0900
@@ -69,17 +69,32 @@
}
#ifdef CONFIG_MIGRATION
-static inline swp_entry_t make_migration_entry(struct page *page)
+static inline swp_entry_t make_migration_entry(struct page *page, int writable)
{
BUG_ON(!PageLocked(page));
- return swp_entry(SWP_TYPE_MIGRATION, page_to_pfn(page));
+ if (writable)
+ return swp_entry(SWP_TYPE_MIGRATION_WE, page_to_pfn(page));
+ else
+ return swp_entry(SWP_TYPE_MIGRATION_WP, page_to_pfn(page));
}
static inline int is_migration_entry(swp_entry_t entry)
{
- return swp_type(entry) == SWP_TYPE_MIGRATION;
+ return (swp_type(entry) == SWP_TYPE_MIGRATION_WP) ||
+ (swp_type(entry) == SWP_TYPE_MIGRATION_WE);
}
+static inline int is_migration_entry_wp(swp_entry_t entry)
+{
+ return (swp_type(entry) == SWP_TYPE_MIGRATION_WP);
+}
+
+static inline int is_migration_entry_we(swp_entry_t entry)
+{
+ return (swp_type(entry) == SWP_TYPE_MIGRATION_WE);
+}
+
+
static inline struct page *migration_entry_to_page(swp_entry_t entry)
{
struct page *p = pfn_to_page(swp_offset(entry));
Index: Christoph-New-Migration/mm/migrate.c
===================================================================
--- Christoph-New-Migration.orig/mm/migrate.c 2006-04-14 11:13:49.000000000 +0900
+++ Christoph-New-Migration/mm/migrate.c 2006-04-14 11:13:55.000000000 +0900
@@ -167,7 +167,11 @@
inc_mm_counter(mm, anon_rss);
get_page(new);
- set_pte_at(mm, addr, ptep, pte_mkold(mk_pte(new, vma->vm_page_prot)));
+ pte = pte_mkold(mk_pte(new, vma->vm_page_prot));
+ if (is_migration_entry_we(entry)) {
+ pte = pte_mkwrite(pte);
+ }
+ set_pte_at(mm, addr, ptep, pte);
page_add_anon_rmap(new, vma, addr);
out:
pte_unmap_unlock(pte, ptl);
Index: Christoph-New-Migration/mm/rmap.c
===================================================================
--- Christoph-New-Migration.orig/mm/rmap.c 2006-04-14 11:13:45.000000000 +0900
+++ Christoph-New-Migration/mm/rmap.c 2006-04-14 11:13:55.000000000 +0900
@@ -602,7 +602,10 @@
* pte is removed and then restart fault handling.
*/
BUG_ON(!migration);
- entry = make_migration_entry(page);
+ if (pte_write(pteval))
+ entry = make_migration_entry(page, 1);
+ else
+ entry = make_migration_entry(page, 0);
}
set_pte_at(mm, address, pte, swp_entry_to_pte(entry));
BUG_ON(pte_file(*pte));
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2006-04-14 2:34 UTC|newest]
Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-04-13 23:54 [PATCH 0/5] Swapless page migration V2: Overview Christoph Lameter
2006-04-13 23:54 ` [PATCH 1/5] Swapless V2: try_to_unmap() - Rename ignrefs to "migration" Christoph Lameter
2006-04-13 23:54 ` [PATCH 2/5] Swapless V2: Add migration swap entries Christoph Lameter
2006-04-14 0:13 ` Andrew Morton
2006-04-14 0:29 ` Christoph Lameter
2006-04-14 0:42 ` Andrew Morton
2006-04-14 0:46 ` Christoph Lameter
2006-04-14 1:01 ` Andrew Morton
2006-04-14 1:17 ` Andrew Morton
2006-04-14 1:31 ` Christoph Lameter
2006-04-14 5:25 ` Andrew Morton
2006-04-14 14:27 ` Lee Schermerhorn
2006-04-14 16:01 ` Christoph Lameter
2006-04-14 1:31 ` Christoph Lameter
2006-04-14 5:29 ` Andrew Morton
2006-04-14 17:28 ` Implement lookup_swap_cache for migration entries Christoph Lameter
2006-04-14 18:31 ` Andrew Morton
2006-04-14 18:48 ` Christoph Lameter
2006-04-14 19:15 ` Andrew Morton
2006-04-14 19:22 ` Christoph Lameter
2006-04-14 19:53 ` Andrew Morton
2006-04-14 20:12 ` Christoph Lameter
2006-04-14 21:51 ` Wait for migrating page after incr of page count under anon_vma lock Christoph Lameter
2006-04-17 23:52 ` migration_entry_wait: Use the pte lock instead of the " Christoph Lameter
2006-04-14 0:36 ` [PATCH 2/5] Swapless V2: Add migration swap entries Christoph Lameter
2006-04-13 23:54 ` [PATCH 3/5] Swapless V2: Make try_to_unmap() create migration entries Christoph Lameter
2006-04-13 23:54 ` [PATCH 4/5] Swapless V2: Rip out swap portion of old migration code Christoph Lameter
2006-04-13 23:54 ` [PATCH 5/5] Swapless V2: Revise main migration logic Christoph Lameter
2006-04-14 1:19 ` KAMEZAWA Hiroyuki
2006-04-14 1:33 ` Christoph Lameter
2006-04-14 1:40 ` KAMEZAWA Hiroyuki
2006-04-14 2:34 ` KAMEZAWA Hiroyuki [this message]
2006-04-14 2:44 ` KAMEZAWA Hiroyuki
2006-04-14 17:29 ` Preserve write permissions in migration entries Christoph Lameter
2006-04-14 16:48 ` [PATCH 5/5] Swapless V2: Revise main migration logic Christoph Lameter
2006-04-15 0:06 ` KAMEZAWA Hiroyuki
2006-04-15 17:41 ` Christoph Lameter
2006-04-17 0:18 ` KAMEZAWA Hiroyuki
2006-04-17 17:00 ` Christoph Lameter
2006-04-18 0:04 ` KAMEZAWA Hiroyuki
2006-04-18 0:27 ` Christoph Lameter
2006-04-18 0:42 ` KAMEZAWA Hiroyuki
2006-04-18 1:57 ` Christoph Lameter
2006-04-18 3:00 ` KAMEZAWA Hiroyuki
2006-04-18 3:16 ` Christoph Lameter
2006-04-18 3:32 ` KAMEZAWA Hiroyuki
2006-04-18 6:58 ` Christoph Lameter
2006-04-18 8:05 ` KAMEZAWA Hiroyuki
2006-04-18 8:27 ` Christoph Lameter
2006-04-18 9:08 ` KAMEZAWA Hiroyuki
2006-04-18 16:49 ` Christoph Lameter
2006-04-14 0:08 ` [PATCH 0/5] Swapless page migration V2: Overview Andrew Morton
2006-04-14 0:27 ` Christoph Lameter
2006-04-14 14:14 ` Lee Schermerhorn
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=20060414113455.15fd5162.kamezawa.hiroyu@jp.fujitsu.com \
--to=kamezawa.hiroyu@jp.fujitsu.com \
--cc=akpm@osdl.org \
--cc=clameter@sgi.com \
--cc=hugh@veritas.com \
--cc=lee.schermerhorn@hp.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=marcelo.tosatti@cyclades.com \
--cc=taka@valinux.co.jp \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox