Hi Since Friday version: - More cleanups on the code - Remove repeated calls to qemu_target_page_size() - Establish normal pages and zero pages - detect zero pages on the multifd threads - send zero pages through the multifd channels. - reviews by Richard addressed.
It pases migration-test, so it should be perfect O:+) ToDo for next version: - check the version changes I need that 6.2 is out to check for 7.0. This code don't exist at all due to that reason. - Send measurements of the differences Please, review. [ Friday version that just created a single writev instead of write+writev. ] Right now, multifd does a write() for the header and a writev() for each group of pages. Simplify it so we send the header as another member of the IOV. Once there, I got several simplifications: * is_zero_range() was used only once, just use its body. * same with is_zero_page(). * Be consintent and use offset insed the ramblock everywhere. * Now that we have the offsets of the ramblock, we can drop the iov. * Now that nothing uses iov's except NOCOMP method, move the iovs from pages to methods. * Now we can use iov's with a single field for zlib/zstd. * send_write() method is the same in all the implementaitons, so use it directly. * Now, we can use a single writev() to write everything. ToDo: Move zero page detection to the multifd thrteads. With RAM in the Terabytes size, the detection of the zero page takes too much time on the main thread. Last patch on the series removes the detection of zero pages in the main thread for multifd. In the next series post, I will add how to detect the zero pages and send them on multifd channels. Please review. Later, Juan. Juan Quintela (23): multifd: Delete useless operation migration: Never call twice qemu_target_page_size() multifd: Rename used field to num multifd: Add missing documention multifd: The variable is only used inside the loop multifd: remove used parameter from send_prepare() method multifd: remove used parameter from send_recv_pages() method multifd: Fill offset and block for reception multifd: Make zstd compression method not use iovs multifd: Make zlib compression method not use iovs multifd: Move iov from pages to params multifd: Make zlib use iov's multifd: Make zstd use iov's multifd: Remove send_write() method multifd: Use a single writev on the send side multifd: Unfold "used" variable by its value multifd: Use normal pages array on the send side multifd: Use normal pages array on the recv side multifd: recv side only needs the RAMBlock host address multifd: Rename pages_used to normal_pages multifd: Support for zero pages transmission multifd: Zero pages transmission migration: Use multifd before we check for the zero page migration/multifd.h | 52 +++++++--- migration/migration.c | 7 +- migration/multifd-zlib.c | 71 +++++-------- migration/multifd-zstd.c | 70 +++++-------- migration/multifd.c | 214 +++++++++++++++++++++++---------------- migration/ram.c | 22 ++-- migration/savevm.c | 5 +- migration/trace-events | 4 +- 8 files changed, 231 insertions(+), 214 deletions(-) -- 2.33.1