Pavel Emelyanov
0f8975ec4d
mm: soft-dirty bits for user memory changes tracking
...
The soft-dirty is a bit on a PTE which helps to track which pages a task
writes to. In order to do this tracking one should
1. Clear soft-dirty bits from PTEs ("echo 4 > /proc/PID/clear_refs)
2. Wait some time.
3. Read soft-dirty bits (55'th in /proc/PID/pagemap2 entries)
To do this tracking, the writable bit is cleared from PTEs when the
soft-dirty bit is. Thus, after this, when the task tries to modify a
page at some virtual address the #PF occurs and the kernel sets the
soft-dirty bit on the respective PTE.
Note, that although all the task's address space is marked as r/o after
the soft-dirty bits clear, the #PF-s that occur after that are processed
fast. This is so, since the pages are still mapped to physical memory,
and thus all the kernel does is finds this fact out and puts back
writable, dirty and soft-dirty bits on the PTE.
Another thing to note, is that when mremap moves PTEs they are marked
with soft-dirty as well, since from the user perspective mremap modifies
the virtual memory at mremap's new address.
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
Cc: Matt Mackall <mpm@selenic.com>
Cc: Xiao Guangrong <xiaoguangrong@linux.vnet.ibm.com>
Cc: Glauber Costa <glommer@parallels.com>
Cc: Marcelo Tosatti <mtosatti@redhat.com>
Cc: KOSAKI Motohiro <kosaki.motohiro@gmail.com>
Cc: Stephen Rothwell <sfr@canb.auug.org.au>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2013-07-03 16:07:26 -07:00
..
bitops
Merge branch 'modules-next' of git://git.kernel.org/pub/scm/linux/kernel/git/rusty/linux
2012-10-14 13:39:34 -07:00
4level-fixup.h
atomic-long.h
atomic.h
asm-generic: move cmpxchg*_local defs to cmpxchg.h
2013-03-13 06:11:05 +01:00
atomic64.h
audit_change_attr.h
audit_dir_write.h
audit_read.h
audit_signal.h
audit_write.h
barrier.h
Create asm-generic/barrier.h
2012-03-28 18:30:03 +01:00
bitops.h
bitsperlong.h
UAPI: (Scripted) Disintegrate include/asm-generic
2012-10-04 18:20:15 +01:00
bug.h
bug.h: Fix up CONFIG_BUG=n implicit function declarations.
2012-06-25 10:32:49 -07:00
bugs.h
cache.h
cacheflush.h
checksum.h
asm-generic headers: Allow yet more arch overrides in checksum.h
2013-02-11 20:00:33 +05:30
clkdev.h
asm-generic: Add default clkdev.h
2012-10-03 21:33:53 +02:00
cmpxchg-local.h
generic: Use raw local irq variant for generic cmpxchg
2013-02-19 08:43:37 +01:00
cmpxchg.h
asm-generic: move cmpxchg*_local defs to cmpxchg.h
2013-03-13 06:11:05 +01:00
cputime.h
cputime: Generic on-demand virtual cputime accounting
2013-01-27 19:23:27 +01:00
cputime_jiffies.h
cputime: Move default nsecs_to_cputime() to jiffies based cputime file
2013-01-27 19:23:25 +01:00
cputime_nsecs.h
cputime_nsecs: use math64.h for nsec resolution conversion helpers
2013-04-26 18:58:12 +02:00
current.h
delay.h
device.h
div64.h
dma-coherent.h
common: dma-mapping: add support for generic dma_mmap_* calls
2012-07-30 12:25:46 +02:00
dma-contiguous.h
mm: cma: fix condition check when setting global cma area
2012-07-06 12:02:04 +02:00
dma-mapping-broken.h
asm-generic/dma-mapping-broken.h: Provide dma_alloc_attrs()/dma_free_attrs()
2012-12-25 20:14:54 +01:00
dma-mapping-common.h
common: dma-mapping: introduce dma_get_sgtable() function
2012-07-30 12:25:46 +02:00
dma.h
emergency-restart.h
exec.h
Split arch_align_stack() out from asm-generic/system.h
2012-03-28 18:30:03 +01:00
fb.h
ftrace.h
futex.h
getorder.h
gpio.h
gpiolib: let gpio_chip reference its descriptors
2013-02-11 22:21:28 +00:00
hardirq.h
hugetlb.h
mm/hugetlb: add more arch-defined huge_pte functions
2013-04-29 15:54:33 -07:00
hw_irq.h
ide_iops.h
int-l64.h
UAPI: (Scripted) Disintegrate include/asm-generic
2012-10-04 18:20:15 +01:00
int-ll64.h
UAPI: (Scripted) Disintegrate include/asm-generic
2012-10-04 18:20:15 +01:00
io-64-nonatomic-hi-lo.h
io-64-nonatomic-lo-hi.h
io.h
kernel: Fix s390 absolute memory access for /dev/mem
2013-05-22 09:45:57 +02:00
ioctl.h
UAPI: (Scripted) Disintegrate include/asm-generic
2012-10-04 18:20:15 +01:00
iomap.h
irq.h
irq_regs.h
irqflags.h
Kbuild.asm
UAPI: Set up uapi/asm/Kbuild.asm
2012-10-02 18:01:56 +01:00
kdebug.h
kmap_types.h
asm-generic: remove km_type definitions
2012-07-24 15:27:30 +08:00
kvm_para.h
KVM: add kvm_para_available to asm-generic/kvm_para.h
2013-06-05 13:21:29 +03:00
libata-portmap.h
linkage.h
local.h
local64.h
memory_model.h
mm_hooks.h
mmu.h
asm-generic/mmu.h: Add support for FDPIC
2012-12-09 23:14:14 +01:00
mmu_context.h
module.h
Make most arch asm/module.h files use asm-generic/module.h
2012-09-28 14:31:03 +09:30
mutex-dec.h
arch: Make __mutex_fastpath_lock_retval return whether fastpath succeeded or not
2013-06-26 12:10:55 +02:00
mutex-null.h
arch: Make __mutex_fastpath_lock_retval return whether fastpath succeeded or not
2013-06-26 12:10:55 +02:00
mutex-xchg.h
arch: Make __mutex_fastpath_lock_retval return whether fastpath succeeded or not
2013-06-26 12:10:55 +02:00
mutex.h
page.h
param.h
UAPI: (Scripted) Disintegrate include/asm-generic
2012-10-04 18:20:15 +01:00
parport.h
include: remove __dev* attributes.
2013-01-03 15:57:16 -08:00
pci-bridge.h
PCI: work around Stratus ftServer broken PCIe hierarchy
2012-04-30 15:21:02 -06:00
pci-dma-compat.h
pci.h
pci_iomap.h
percpu.h
pgalloc.h
pgtable-nopmd.h
pgtable-nopud.h
pgtable.h
mm: soft-dirty bits for user memory changes tracking
2013-07-03 16:07:26 -07:00
ptrace.h
resource.h
UAPI: (Scripted) Disintegrate include/asm-generic
2012-10-04 18:20:15 +01:00
rtc.h
rwsem.h
scatterlist.h
sections.h
segment.h
serial.h
siginfo.h
UAPI: (Scripted) Disintegrate include/asm-generic
2012-10-04 18:20:15 +01:00
signal.h
unify default ptrace_signal_deliver
2012-11-29 00:01:23 -05:00
sizes.h
ARM: 7430/1: sizes.h: move from asm-generic to <linux/sizes.h>
2012-06-28 17:14:34 +01:00
spinlock.h
statfs.h
UAPI: (Scripted) Disintegrate include/asm-generic
2012-10-04 18:20:15 +01:00
string.h
switch_to.h
Split the switch_to() wrapper out of asm-generic/system.h
2012-03-28 18:30:03 +01:00
syscall.h
asm/syscall.h: add syscall_get_arch
2012-04-14 11:13:19 +10:00
syscalls.h
burying unused conditionals
2013-02-14 09:21:15 -05:00
termios-base.h
termios.h
UAPI: (Scripted) Disintegrate include/asm-generic
2012-10-04 18:20:15 +01:00
timex.h
tlb.h
arch, mm: Remove tlb_fast_mode()
2013-06-06 10:07:26 +09:00
tlbflush.h
topology.h
trace_clock.h
tracing,x86: Add a TSC trace_clock
2012-11-13 15:48:27 -05:00
uaccess-unaligned.h
uaccess.h
asm-generic: uaccess s/might_sleep/might_fault/
2013-05-28 09:41:05 +02:00
unaligned.h
unistd.h
We get rid of the general module prefix confusion with a binary config option,
2013-05-05 10:58:06 -07:00
user.h
vga.h
vmlinux.lds.h
Finally eradicate CONFIG_HOTPLUG
2013-06-03 14:20:18 -07:00
word-at-a-time.h
word-at-a-time: make the interfaces truly generic
2012-05-26 11:33:40 -07:00
xor.h
asm-generic: xor: mark static functions as __maybe_unused
2012-10-03 21:21:06 +02:00