From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35518) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YB5wd-0004fN-Rq for qemu-devel@nongnu.org; Tue, 13 Jan 2015 13:12:00 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YB5wZ-00041E-HT for qemu-devel@nongnu.org; Tue, 13 Jan 2015 13:11:59 -0500 Received: from mx1.redhat.com ([209.132.183.28]:57340) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YB5wZ-000414-9W for qemu-devel@nongnu.org; Tue, 13 Jan 2015 13:11:55 -0500 Date: Tue, 13 Jan 2015 18:11:49 +0000 From: "Dr. David Alan Gilbert" Message-ID: <20150113181149.GB5193@work-vm> References: <20150113093815.GA5193@work-vm> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: Subject: Re: [Qemu-devel] Question regarding two variables in qemu migration code List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Jidong Xiao Cc: qemu-devel * Jidong Xiao (jidong.xiao@gmail.com) wrote: > On Tue, Jan 13, 2015 at 1:38 AM, Dr. David Alan Gilbert > wrote: > > * Jidong Xiao (jidong.xiao@gmail.com) wrote: > >> Hi, > > > > Hi, > > > >> I am looking at the qemu source code, and trying to understand the > >> migration part. In arch_init.c, there are two variables which seems > >> quite confusing to me, > >> > >> They are: > >> > >> static uint64_t migration_dirty_pages; > > > > 'migration_dirty_pages' is the number of pages that are currently known > > that need to be sent to the destination; it goes down whenever we send > > a page, but goes up when we sync the dirty bitmap that tells us that > > something changed the data in the page (see migration_bitmap_sync_range ) > > > >> static int64_t num_dirty_pages_period; // defined in function > >> migration_bitmap_sync() > > > > This is looking how many pages we've noticed are now dirty within > > a particular time - to try and get an estimate of how fast memory is changing > > If you see migration_bitmap_sync has an: > > if (end_time > start_time + 1000) { > > > > and inside there it uses num_dirty_pages_period to update dirty_pages_rate. > > > >> > >> Can anyone kindly explain that what does these two variables mean? Thanks. > >> > >> -Jidong > > > > Dave > > -- > Thanks Dave, your explanation is really really helpful. > > But in function migration_bitmap_sync(), I see this: > > num_dirty_pages_period += migration_dirty_pages - num_dirty_pages_init; > > If as you said, num_dirty_pages_period refers to the pages get dirty > within a particular time, then why it is "+=???, instead of "="? i.e., > something like this: > > num_dirty_pages_period = migration_dirty_pages - num_dirty_pages_init; > > I just don't see why num_dirty_pages_period has to be accumulated with > its previous value. It's because there are two periods: migration_dirty_pages - num_dirty_pages_init is the number of pages found dirty in this call to migration_bitmap_sync num_dirty_pages_period is the number of pages found dirty in a ~1 second periods, as tested by the code in migration_bitmap_sync after the: if (end_time > start_time + 1000) { migration_bitmap_sync is called multiple times within that ~1 second period, and num_dirty_pages_period accumulates across the calls. Dave > > -Jidong -- Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK