Il 21/03/2013 17:05, Orit Wasserman ha scritto: > 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 writev to send the iovec. > writev was chosen (as apposed to sendmsg) because it supprts non socket fds. > > Guest memory pages are not copied by calling a new function > qemu_put_buffer_no_copy. > 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. > Another improvement is changing qemu_putbe64/32/16 to create a single > buffer instead of several byte sized buffer. > > git repository: git://github.com/oritwas/qemu.git sendv_v2 > > 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
I didn't review it too closely, so I don't feel like giving my Reviewed-by. Still, I must say it is a very nice and simple solution. Kudos! Just one question: patch 6 is not strictly needed anymore now that you have coalescing, no? Should Juan leave it out? Paolo
