login
Login
/
Register
Search
Search this site:
Forums
News
Blogs
Features
Site
Home
»
Mailing list archives
»
linux-kernel
»
2010
»
April
»
26
Re: [PATCH 1/2] mm,migration: During fork(), wait for migration to end if migration PTE is encountered
view
thread
Previous message: [
thread
] [
date
] [
author
]
Next message: [
thread
] [
date
] [
author
]
[view in full thread]
From: Minchan Kim
Subject:
Re: [PATCH 1/2] mm,migration: During fork(), wait for migration to end if migration PTE is encountered
Date: Monday, April 26, 2010 - 4:28 pm
On Tue, Apr 27, 2010 at 7:37 AM, Mel Gorman <mel@csn.ul.ie> wrote:
quoted text
> From: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> > > From: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> > > At page migration, we replace pte with migration_entry, which has > similar format as swap_entry and replace it with real pfn at the > end of migration. But there is a race with fork()'s copy_page_range(). > > Assume page migraion on CPU A and fork in CPU B. On CPU A, a page of > a process is under migration. On CPU B, a page's pte is under copy. > > CPUA CPU B > do_fork() > copy_mm() (from process 1 to process2) > insert new vma to mmap_list (if inode/anon_vma) > pte_lock(process1) > unmap a page > insert migration_entry > pte_unlock(process1) > > migrate page copy > copy_page_range > remap new page by rmap_walk() > pte_lock(process2) > found no pte. > pte_unlock(process2) > pte lock(process2) > pte lock(process1) > copy migration entry to process2 > pte unlock(process1) > pte unlokc(process2) > pte_lock(process1) > replace migration entry > to new page's pte. > pte_unlock(process1) > > Then, some serialization is necessary. IIUC, this is very rare event but > it is reproducible if a lot of migration is happening a lot with the > following program running in parallel. > > #include <stdio.h> > #include <string.h> > #include <stdlib.h> > #include <sys/mman.h> > > #define SIZE (24*1048576UL) > #define CHILDREN 100 > int main() > { > int i = 0; > pid_t pids[CHILDREN]; > char *buf = mmap(NULL, SIZE, PROT_READ|PROT_WRITE, > MAP_PRIVATE|MAP_ANONYMOUS, > 0, 0); > if (buf == MAP_FAILED) { > perror("mmap"); > exit(-1); > } > > while (++i) { > int j = i % CHILDREN; > > if (j == 0) { > printf("Waiting on children\n"); > for (j = 0; j < CHILDREN; j++) { > memset(buf, i, SIZE); > if (pids[j] != -1) > waitpid(pids[j], NULL, 0); > } > j = 0; > } > > if ((pids[j] = fork()) == 0) { > memset(buf, i, SIZE); > exit(EXIT_SUCCESS); > } > } > > munmap(buf, SIZE); > } > > copy_page_range() can wait for the end of migration. > > Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> > Signed-off-by: Mel Gorman <mel@csn.ul.ie>
Reviewed-by : Minchan Kim <minchan.kim@gmail.com> -- Kind regards, Minchan Kim
Previous message: [
thread
] [
date
] [
author
]
Next message: [
thread
] [
date
] [
author
]
Messages in current thread:
[PATCH 1/2] mm,migration: During fork(), wait for migratio ...
, Mel Gorman
, (Mon Apr 26, 3:37 pm)
Re: [PATCH 1/2] mm,migration: During fork(), wait for migr ...
, Minchan Kim
, (Mon Apr 26, 4:28 pm)
Re: [PATCH 1/2] mm,migration: During fork(), wait for migr ...
, Rik van Riel
, (Mon Apr 26, 5:08 pm)
Navigation
Create content
Mailing list archives
Recent posts
Popular discussions
linux-kernel
:
Benjamin Herrenschmidt
Re: [PATCH 1/4] hvc_console: do not set low_latency
Russell King
Re: ARM defconfig files
Carsten Otte
Re: [patch] ext2: xip check fix
Jordan Crouse
Re: 2.6.25-mm1
James Morris
Re: [AppArmor 01/41] Pass struct vfsmount to the inode_create LSM hook
git
:
Felipe Contreras
Re: [kernel.org users] [RFD] On deprecating "git-foo" for builtins
Johannes Schindelin
[PATCH] fetch: refuse to fetch into the current branch in a non-bare repository
Johannes Schindelin
Re: [PATCH] Fix install-doc-quick target
Peter Oberndorfer
Subject: [PATCH] fix stg edit command
Nicolas Pitre
Re: About git and the use of SHA-1
linux-netdev
:
Ursula Braun
[patch 2/8] [PATCH] af_iucv: sync sk shutdown flag if iucv path is quiesced
Andi Kleen
Re: RFC: Nagle latency tuning
Gary Thomas
Re: Marvell 88E609x switch?
David Miller
Re: [RFC 0/5] generic rx recycling
Chuck Lever
Re: [RFC] ipv6: Change %pI6 format to output compacted addresses?
dragonflybsd-user
:
Andreas Hauser
Re: Transset.
Tomas
usb printer Brother HL-2030 and DragonFly
Matthew Dillon
Re: DragonFlyBSD not in compliance with RFC 1122
Nikolai Lifanov
pkgsrc issues
Jonas
Re: New to DragonFly...
dragonflybsd-submit
:
Ilya Dryomov
git: HAMMER - Add live_dedup_cache_size sysctl
Matthew Dillon
git: MBUF - Account for failed allocations so netstat -m reports properly.
Simon Schubert
git: make.conf(5): mention STATIC_LOCALES
Matthias Schmidt
cvs commit: src/sys/net bpf.c bpf.h bpfdesc.h
Simon Schubert
git: Revert "Increase the default TCP maximum segment size from 512 to 1460."
Colocation donated by:
Syndicate