On Thu, Mar 21, 2013 at 10:53:55AM +0100, Paolo Bonzini wrote: > Il 21/03/2013 10:48, Michael S. Tsirkin ha scritto: > > A recent discussion about overcommitted memory made me think: > > this will still need to read pages into memory even > > if all we will do is send it out on the wire immediately, > > dirtying cache etc. > > > > Now, one property of RAM writes is that if guest changes > > the memory that we are migrating, we really > > don't care that remote will get a new copy and not > > the old copy. > > Orit's patches already do this (patch 11). The only copy that remains > is from memory to socket buffers. > > > > For this to work, however, we need to have a way > > for QEMUFile to know whether a specific iovec > > references RAM (so it's ok to use vmsplice) > > or a malloced buffer for device state (so it must use write > > to ensure kernel copies data). > > > > What do you think? > > Was SPLICE_F_GIFT/SPLICE_F_MOVE ever implemented in the end? If not, > patch 11 of this series does the same thing you are suggesting, without > the indirection of an additional pipe file descriptor that is required > for splice/vmsplice. > > Paolo
GIFT seems to be implemented so no problem there. MOVE seems not to be needed for TCP - I think it just uses sendpage internally which will do zero copy without special hints. > >> Orit Wasserman (12): > >> Add iov_writev to use writev to send iovec (also for files) > >> Add QemuFileWritevBuffer QemuFileOps > >> Add socket_writev_buffer function > >> Add stdio_writev_buffer function > >> Add block_writev_buffer function > >> Update bytes_xfer in qemu_put_byte > >> Store the data to send also in iovec > >> Use writev ops instead of put_buffer ops > >> More optimized qemu_put_be64/32/16 > >> Add qemu_put_buffer_no_copy > >> Use qemu_put_buffer_no_copy for guest memory pages > >> Bye Bye put_buffer > >> > >> arch_init.c | 2 +- > >> include/migration/qemu-file.h | 20 ++++--- > >> include/qemu/iov.h | 12 ++++ > >> savevm.c | 130 > >> +++++++++++++++++++++++++----------------- > >> util/iov.c | 36 ++++++++++++ > >> 5 files changed, 139 insertions(+), 61 deletions(-) > >> > >> -- > >> 1.7.11.7