Hi, I'd like to add/export an function which allow userspace program to take snapshot for a region of memory. Since it is not implemented yet I will describe it as C APIs, it is quite simple now and if it is worthy I'll improve the interface later: Simple prototype: C API in userspace: /* * This function will mark a section of memory as COW, and return * a new virtual address of it. User space program can dump out the * content as a snapshot while other thread continue modify the content * in the region. * @addr: the virtual address to be snapshotted. * @length: the length of it. * This function returns a new virtual address which can be used as * snapshot. Return NULL on fail. */ void *memory_snapshot_create(void *addr, uint64_t length); /* * This function will free the memory snapshot. * @addr: the virtual snapshot addr to be freed, it should be the * returned one in memory_snapshot_create(). */ void memory_snapshot_delete(void *addr); In kernel space: The pages in those virtual address will be marked as COW. Take a page with physical addr P0 as example, it will have two virtual addr: old A0 and new A1. When modified, kernel should create a new page P1 with same contents, and mapping A1 to P1. When NUMA is used, P1 can be a slower page. It is quite like fork(), but only COW part of pages. Maybe add it as an ioctl() in kvm.ko, and change the input/output as a structure describe guest memory state. Why bring it to kernel space: Compared with fork(): 1 take less RAM, less halt time by avoid marking unnecessary pages COW. 2 take less RAM if API can return a bitmap let qemu consume dirty page first. 3 much nicer userspace program model, no need to pipe or memcpy(), brings better performance. 4 optimization space in kernel space, since snapshoted pages can be set into slower memory in NUMA when change comes. -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html