On Tue, Feb 06, 2024 at 11:19:06PM +0000, Hao Xiang wrote: > This implements the zero page detection and handling on the multifd > threads. > > Signed-off-by: Hao Xiang <hao.xi...@bytedance.com> > --- > migration/multifd.c | 62 +++++++++++++++++++++++++++++++++++++++++---- > migration/multifd.h | 5 ++++ > 2 files changed, 62 insertions(+), 5 deletions(-) > > diff --git a/migration/multifd.c b/migration/multifd.c > index a20d0ed10e..c031f947c7 100644 > --- a/migration/multifd.c > +++ b/migration/multifd.c > @@ -11,6 +11,7 @@ > */ > > #include "qemu/osdep.h" > +#include "qemu/cutils.h" > #include "qemu/rcu.h" > #include "exec/target_page.h" > #include "sysemu/sysemu.h" > @@ -278,6 +279,12 @@ static void multifd_send_fill_packet(MultiFDSendParams > *p) > > packet->offset[i] = cpu_to_be64(temp); > } > + for (i = 0; i < p->zero_num; i++) { > + /* there are architectures where ram_addr_t is 32 bit */ > + uint64_t temp = p->zero[i]; > + > + packet->offset[p->normal_num + i] = cpu_to_be64(temp); > + } > }
Please be noted taht p->normal_num will be dropped very soon, see: https://lore.kernel.org/all/20240202102857.110210-6-pet...@redhat.com/ Please use p->pages->num instead. This patch also relies on some changes in previous patch.. IMHO we can split the patch better in this way: - Patch 1: Add new parameter "zero-page-detection", support "none", "legacy". You'll need to implement "none" here that we skip zero page by returning 0 in save_zero_page() if "none". - Patch 2: Add new "multifd" mode in above, implement it in the same patch completely. - Patch 3: introduce ram_save_target_page_multifd() - Patch 4: test case If you want to add "zeros" accounting, that can be done as more patches on top. Thanks, -- Peter Xu