All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH v5 0/7] Migration: Remove copying of guest ram pages
@ 2013-03-22 14:47 Orit Wasserman
  2013-03-22 14:47 ` [Qemu-devel] [PATCH v5 1/7] Add QemuFileWritevBuffer QemuFileOps Orit Wasserman
                   ` (7 more replies)
  0 siblings, 8 replies; 14+ messages in thread
From: Orit Wasserman @ 2013-03-22 14:47 UTC (permalink / raw)
  To: qemu-devel; +Cc: mst, quintela, Orit Wasserman, pbonzini, chegu_vinod

In migration all data is copied to a static buffer in QEMUFile,
this hurts our network bandwidth and CPU usage especially with large guests.
We switched to iovec for storing different buffers to send (even a byte field is
considered as a buffer) and use sendmsg to send the iovec.
Adjacent iovecs are coalesced to create a bigger buffer instead of many small
buffers.
  
Guest memory pages are not copied by calling a new function
qemu_put_buffer_async.
The page header data and device state data are still copied into the static
buffer. This data consists of a lot of bytes and integer fields and the static
buffer is used to store it during batching.

git repository: git://github.com/oritwas/qemu.git sendv_v2

Changes from v4:
return ssize_t for writev_buffer ops.
Fix other Eric's comments.
Squash patch 8 (coalesce adjacent iovecs) into patch 4.

Changes from v3:
Use a variable for iov_size
Change f->bytes_xfer +=1 to f->bytes_xfer++
Remove unneeded "More optimized qemu_put_be64/32/16" patch
Move code to the right patch
Rename qemu_put_buffer_no_copy to qemu_put_buffer_async
Use function for updating the iovec that detect adjacent iovecs and coalesce
them.

Change from v2:
Always send data for the iovec even if writev_buffer is not implemented.
Coalesce adjacent iovecs to create one big buffer from small adjacent buffer.

Changes from v1:
Use iov_send for socket.
Make writev_buffer optional and if it is not implemented use put_buffer

Future work: Make number of iovec changeable

Orit Wasserman (7):
  Add QemuFileWritevBuffer QemuFileOps
  Add socket_writev_buffer function
  Update bytes_xfer in qemu_put_byte
  Store the data to send also in iovec
  Use writev ops if available
  Add qemu_put_buffer_async
  Use qemu_put_buffer_async for guest memory pages

 arch_init.c                   |   2 +-
 include/migration/qemu-file.h |  12 +++++
 savevm.c                      | 103 +++++++++++++++++++++++++++++++++++-------
 3 files changed, 100 insertions(+), 17 deletions(-)

-- 
1.7.11.7

^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2013-04-05 15:56 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-03-22 14:47 [Qemu-devel] [PATCH v5 0/7] Migration: Remove copying of guest ram pages Orit Wasserman
2013-03-22 14:47 ` [Qemu-devel] [PATCH v5 1/7] Add QemuFileWritevBuffer QemuFileOps Orit Wasserman
2013-03-22 14:47 ` [Qemu-devel] [PATCH v5 2/7] Add socket_writev_buffer function Orit Wasserman
2013-03-22 14:47 ` [Qemu-devel] [PATCH v5 3/7] Update bytes_xfer in qemu_put_byte Orit Wasserman
2013-03-22 14:48 ` [Qemu-devel] [PATCH v5 4/7] Store the data to send also in iovec Orit Wasserman
2013-03-22 14:48 ` [Qemu-devel] [PATCH v5 5/7] Use writev ops if available Orit Wasserman
2013-03-22 14:48 ` [Qemu-devel] [PATCH v5 6/7] Add qemu_put_buffer_async Orit Wasserman
2013-03-22 14:48 ` [Qemu-devel] [PATCH v5 7/7] Use qemu_put_buffer_async for guest memory pages Orit Wasserman
2013-04-05 13:44   ` Kevin Wolf
2013-04-05 15:23     ` Paolo Bonzini
2013-04-05 15:39       ` Kevin Wolf
2013-04-05 15:42         ` Paolo Bonzini
2013-04-05 15:56           ` Kevin Wolf
2013-03-27 21:27 ` [Qemu-devel] [PATCH v5 0/7] Migration: Remove copying of guest ram pages Eric Blake

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.