From patchwork Sun Mar 11 07:45:05 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhang Chen X-Patchwork-Id: 10274537 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 9A7066055C for ; Sun, 11 Mar 2018 07:50:35 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 906AB289A2 for ; Sun, 11 Mar 2018 07:50:35 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 8508728DBE; Sun, 11 Mar 2018 07:50:35 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=2.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 02FCC289A2 for ; Sun, 11 Mar 2018 07:50:35 +0000 (UTC) Received: from localhost ([::1]:53369 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1euvkY-0001mT-6v for patchwork-qemu-devel@patchwork.kernel.org; Sun, 11 Mar 2018 03:50:34 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59218) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1euvgF-0006Ni-7G for qemu-devel@nongnu.org; Sun, 11 Mar 2018 03:46:10 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1euvgE-0000kz-7G for qemu-devel@nongnu.org; Sun, 11 Mar 2018 03:46:07 -0400 Received: from mail-pg0-x243.google.com ([2607:f8b0:400e:c05::243]:35966) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1euvgE-0000kX-0V for qemu-devel@nongnu.org; Sun, 11 Mar 2018 03:46:06 -0400 Received: by mail-pg0-x243.google.com with SMTP id i14so5252588pgv.3 for ; Sat, 10 Mar 2018 23:46:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=lxN6SpcWZNUdS22P6NJoYX6YVb5xrWvofqgkGV4t3u0=; b=UbiQFy3Ff/Krtl6gZ0v4XvF5kay/HAbBF0EnRfoZy5vAok5aX1y8yppSmMMnCwgVja Ozw0ieBqQZi9UBEfbOaJ8khbRxVGUN5JBYVGkgTnF4zVnskoyf+W/ykhtiYgOcy47ouu jG4IVHdONVoMrUdtSkzHqqtjW27nePuMUdqf/bkyLbnt8lfqXh5OdvgTzy5aMmyt9VKy MGPHi7ip9FJZ6nQjR1GmCM+oQonZmxhAiJAHY+1NZtfrGNzVrpghW/rN9CVtausRH4zz gXgr9zfoVmaGYjR8XBY/Qbl0tU2lBCycd1YsHznqcO7rtdUIlLEwO5fRawyDFqvlhGFv L+tg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=lxN6SpcWZNUdS22P6NJoYX6YVb5xrWvofqgkGV4t3u0=; b=eN6xG6514IhIpLJHzNBVQbTgW7kN65vTrLQ53iowDD6kTvSQpcnp8tHYBarpGnJemC RaIyK1iUnlB65S+eXXfyFNONBohmWe6alsr6aGHSvAFaZ93ilMfi4SKBD2fCy0i6cdeN X901DGoHqDVor8wueM5LHtUDjuC4VLUDt/kqatiTkvrOMOjNhg2ooZkeA+Gjgy9Mwxwh gVWchkOMXW4r6EkbcNqr0gSVJVkMrZKpqgRgf+8inNckGF0wPZd5q1ifuX0u76SkLZrH abLSY4FWGsJesEFN55BhByt+JLzxyB6YPfxXJY0a4SyzokvfV0YS8zDesCjKWjEUYeiP 3YAg== X-Gm-Message-State: AElRT7FeJBVI4l8VCqih+fICenqSHtiOlMaLZARe5hy6BwsQEfSEpRZi p/Wp45iOfvOCFKu95jThBW0IqVnz X-Google-Smtp-Source: AG47ELtA03rfALCGlcZwzx/UcoO3mCU8E+cRUYiJxw0mKXc9KCDFxVIehaHdQHbXs0CLpwoRS7EYAg== X-Received: by 10.98.72.10 with SMTP id v10mr4106327pfa.148.1520754364695; Sat, 10 Mar 2018 23:46:04 -0800 (PST) Received: from localhost.localdomain (120.236.201.35.bc.googleusercontent.com. [35.201.236.120]) by smtp.gmail.com with ESMTPSA id t16sm10917037pfm.69.2018.03.10.23.46.00 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sat, 10 Mar 2018 23:46:03 -0800 (PST) From: Zhang Chen To: qemu-devel@nongnu.org Date: Sun, 11 Mar 2018 15:45:05 +0800 Message-Id: <1520754314-5969-10-git-send-email-zhangckid@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1520754314-5969-1-git-send-email-zhangckid@gmail.com> References: <1520754314-5969-1-git-send-email-zhangckid@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c05::243 Subject: [Qemu-devel] [PATCH V6 08/17] ram/COLO: Record the dirty pages that SVM received X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: zhanghailiang , Li Zhijian , Juan Quintela , Jason Wang , "Dr . David Alan Gilbert" , Markus Armbruster , Zhang Chen , Paolo Bonzini Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP We record the address of the dirty pages that received, it will help flushing pages that cached into SVM. Here, it is a trick, we record dirty pages by re-using migration dirty bitmap. In the later patch, we will start the dirty log for SVM, just like migration, in this way, we can record both the dirty pages caused by PVM and SVM, we only flush those dirty pages from RAM cache while do checkpoint. Signed-off-by: zhanghailiang Reviewed-by: Dr. David Alan Gilbert --- migration/ram.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/migration/ram.c b/migration/ram.c index 86f5c3c..4534c7a 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -2481,6 +2481,15 @@ static inline void *colo_cache_from_block_offset(RAMBlock *block, __func__, block->idstr); return NULL; } + + /* + * During colo checkpoint, we need bitmap of these migrated pages. + * It help us to decide which pages in ram cache should be flushed + * into VM's RAM later. + */ + if (!test_and_set_bit(offset >> TARGET_PAGE_BITS, block->bmap)) { + ram_state->migration_dirty_pages++; + } return block->colo_cache + offset; } @@ -2659,6 +2668,24 @@ int colo_init_ram_cache(void) } } rcu_read_unlock(); + /* + * Record the dirty pages that sent by PVM, we use this dirty bitmap together + * with to decide which page in cache should be flushed into SVM's RAM. Here + * we use the same name 'ram_bitmap' as for migration. + */ + if (ram_bytes_total()) { + RAMBlock *block; + + QLIST_FOREACH_RCU(block, &ram_list.blocks, next) { + unsigned long pages = block->max_length >> TARGET_PAGE_BITS; + + block->bmap = bitmap_new(pages); + bitmap_set(block->bmap, 0, pages); + } + } + ram_state = g_new0(RAMState, 1); + ram_state->migration_dirty_pages = 0; + return 0; out_locked: @@ -2678,6 +2705,10 @@ void colo_release_ram_cache(void) { RAMBlock *block; + QLIST_FOREACH_RCU(block, &ram_list.blocks, next) { + g_free(block->bmap); + block->bmap = NULL; + } rcu_read_lock(); QLIST_FOREACH_RCU(block, &ram_list.blocks, next) { if (block->colo_cache) { @@ -2686,6 +2717,8 @@ void colo_release_ram_cache(void) } } rcu_read_unlock(); + g_free(ram_state); + ram_state = NULL; } /**