Re: COW in userspace

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 20.08.21 15:13, Ralf Ramsauer wrote:
Dear mm folks,

I have an issue, where it would be great to have a COW-backed virtual
memory area within an userspace process. I know there's the possibility
to have a file-backed MAP_SHARED vma, which is later duplicated with
MAP_PRIVATE, but that's not exactly what I'm looking for.

Say I have an anonymous page-aligned VMA a, with MAP_PRIVATE and
PROT_RW. Userspace happily writes to/reads from it. At some point in
time, I want to 'snapshot' that single VMA within the context of the
process and without the need to fork(). Say there's something like

   a = mmap(0, len, PROT_RW, MAP_ANON | MAP_POPULATE, -1, 0);
   [... fill a ...]

   b = mmdup(a, len, PROT_READ);

b shall be the new base pointer of a new VMA that is backed by COW
mechanisms. After mmdup, those regular COW mechanisms do the rest: both
VMAs (a and b) will fault on subsequent writes and duplicate the
previously shared physical mapping, pretty much what cow_fault or
shared_fault does.

Afaict, this, or at least something like this is currently not supported
by the kernel. Is that correct? If so, why? Generally spoken, is it a
bad idea?

Not sure if it helps (most probably not), QEMU uses uffd-wp for background snapshots of VM memory. It's different, though, as you'll only have a single mapping and will be catching modifications to your single mapping, such that you can "safe away" relevant snapshot pages before any modifications.

You mention "both VMAs (a and b) will fault on subsequent writes", so would you actually be allowing PROT_WRITE access to b ("snapshot")?

--
Thanks,

David / dhildenb






[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux