From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59040) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aK139-0003EZ-PB for qemu-devel@nongnu.org; Fri, 15 Jan 2016 04:52:08 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aK135-00042h-Or for qemu-devel@nongnu.org; Fri, 15 Jan 2016 04:52:07 -0500 Received: from mga03.intel.com ([134.134.136.65]:11443) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aK135-00042G-Ic for qemu-devel@nongnu.org; Fri, 15 Jan 2016 04:52:03 -0500 From: Liang Li Date: Fri, 15 Jan 2016 17:48:17 +0800 Message-Id: <1452851297-11198-1-git-send-email-liang.z.li@intel.com> Subject: [Qemu-devel] [PATCH] migration: not send zero page header in ram bulk stage List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: zhang.zhanghailiang@huawei.com, quintela@redhat.com, Liang Li , dgilbert@redhat.com, amit.shah@redhat.com, pbonzini@redhat.com Now that VM's RAM pages are initialized to zero, (VM's RAM is allcated with the mmap() and MAP_ANONYMOUS option, or mmap() without MAP_SHARED if hugetlbfs is used.) so there is no need to send the zero page header to destination. For guest just uses a small portions of RAM, this change can avoid allocating all the guest's RAM pages in the destination node after live migration. Another benefit is destination QEMU can save lots of CPU cycles for zero page checking. Signed-off-by: Liang Li --- migration/ram.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/migration/ram.c b/migration/ram.c index 4e606ab..c4821d1 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -705,10 +705,12 @@ static int save_zero_page(QEMUFile *f, RAMBlock *block, ram_addr_t offset, if (is_zero_range(p, TARGET_PAGE_SIZE)) { acct_info.dup_pages++; - *bytes_transferred += save_page_header(f, block, - offset | RAM_SAVE_FLAG_COMPRESS); - qemu_put_byte(f, 0); - *bytes_transferred += 1; + if (!ram_bulk_stage) { + *bytes_transferred += save_page_header(f, block, offset | + RAM_SAVE_FLAG_COMPRESS); + qemu_put_byte(f, 0); + *bytes_transferred += 1; + } pages = 1; } -- 1.9.1