From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33270) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1chGEQ-00011Z-VG for qemu-devel@nongnu.org; Fri, 24 Feb 2017 08:48:24 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1chGEM-0002m6-3H for qemu-devel@nongnu.org; Fri, 24 Feb 2017 08:48:23 -0500 Received: from mx1.redhat.com ([209.132.183.28]:50628) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1chGEL-0002lp-QU for qemu-devel@nongnu.org; Fri, 24 Feb 2017 08:48:18 -0500 Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id E75FB4E4D0 for ; Fri, 24 Feb 2017 13:48:17 +0000 (UTC) References: <20170206173306.20603-1-dgilbert@redhat.com> <20170206173306.20603-4-dgilbert@redhat.com> From: Laurent Vivier Message-ID: Date: Fri, 24 Feb 2017 14:48:13 +0100 MIME-Version: 1.0 In-Reply-To: <20170206173306.20603-4-dgilbert@redhat.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v2 03/16] postcopy: Chunk discards for hugepages List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: "Dr. David Alan Gilbert (git)" , qemu-devel@nongnu.org, quintela@redhat.com Cc: aarcange@redhat.com On 06/02/2017 18:32, Dr. David Alan Gilbert (git) wrote: > From: "Dr. David Alan Gilbert" > > At the start of the postcopy phase, partially sent huge pages > must be discarded. The code for dealing with host page sizes larger > than the target page size can be reused for this case. > > Signed-off-by: Dr. David Alan Gilbert > Reviewed-by: Juan Quintela Reviewed-by: Laurent Vivier > --- > migration/ram.c | 17 +++++++++-------- > 1 file changed, 9 insertions(+), 8 deletions(-) > > diff --git a/migration/ram.c b/migration/ram.c > index 5726563..d33bd21 100644 > --- a/migration/ram.c > +++ b/migration/ram.c > @@ -1627,12 +1627,17 @@ static void postcopy_chunk_hostpages_pass(MigrationState *ms, bool unsent_pass, > { > unsigned long *bitmap; > unsigned long *unsentmap; > - unsigned int host_ratio = qemu_host_page_size / TARGET_PAGE_SIZE; > + unsigned int host_ratio = block->page_size / TARGET_PAGE_SIZE; > unsigned long first = block->offset >> TARGET_PAGE_BITS; > unsigned long len = block->used_length >> TARGET_PAGE_BITS; > unsigned long last = first + (len - 1); > unsigned long run_start; > > + if (block->page_size == TARGET_PAGE_SIZE) { > + /* Easy case - TPS==HPS for a non-huge page RAMBlock */ > + return; > + } > + > bitmap = atomic_rcu_read(&migration_bitmap_rcu)->bmap; > unsentmap = atomic_rcu_read(&migration_bitmap_rcu)->unsentmap; > > @@ -1736,7 +1741,8 @@ static void postcopy_chunk_hostpages_pass(MigrationState *ms, bool unsent_pass, > * Utility for the outgoing postcopy code. > * > * Discard any partially sent host-page size chunks, mark any partially > - * dirty host-page size chunks as all dirty. > + * dirty host-page size chunks as all dirty. In this case the host-page > + * is the host-page for the particular RAMBlock, i.e. it might be a huge page > * > * Returns: 0 on success > */ > @@ -1744,11 +1750,6 @@ static int postcopy_chunk_hostpages(MigrationState *ms) > { > struct RAMBlock *block; > > - if (qemu_host_page_size == TARGET_PAGE_SIZE) { > - /* Easy case - TPS==HPS - nothing to be done */ > - return 0; > - } > - > /* Easiest way to make sure we don't resume in the middle of a host-page */ > last_seen_block = NULL; > last_sent_block = NULL; > @@ -1804,7 +1805,7 @@ int ram_postcopy_send_discard_bitmap(MigrationState *ms) > return -EINVAL; > } > > - /* Deal with TPS != HPS */ > + /* Deal with TPS != HPS and huge pages */ > ret = postcopy_chunk_hostpages(ms); > if (ret) { > rcu_read_unlock(); >