From patchwork Sat Mar 10 21:21:58 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhang Chen X-Patchwork-Id: 10274369 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 EC18660594 for ; Sat, 10 Mar 2018 21:33:05 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id DBD5E28C91 for ; Sat, 10 Mar 2018 21:33:05 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id D078928CCC; Sat, 10 Mar 2018 21:33:05 +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 6A38828C91 for ; Sat, 10 Mar 2018 21:33:05 +0000 (UTC) Received: from localhost ([::1]:52024 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eum6y-0002rG-H6 for patchwork-qemu-devel@patchwork.kernel.org; Sat, 10 Mar 2018 16:33:04 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:48518) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eulxD-0002XR-Nt for qemu-devel@nongnu.org; Sat, 10 Mar 2018 16:23:00 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eulxC-0003Nn-Lm for qemu-devel@nongnu.org; Sat, 10 Mar 2018 16:22:59 -0500 Received: from mail-pg0-x241.google.com ([2607:f8b0:400e:c05::241]:43166) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eulxC-0003Nf-GD for qemu-devel@nongnu.org; Sat, 10 Mar 2018 16:22:58 -0500 Received: by mail-pg0-x241.google.com with SMTP id e9so4929753pgs.10 for ; Sat, 10 Mar 2018 13:22:58 -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=Pej2Tpl1W3oGVTuEQO1ILd2uhHPriqg8OI8m5XVY6y4HnnFlva1ZD+FlGjYsF5ZoXO AaDUE3JMmK4oMKycjbqTxIrGhI7BTHfxNAqj3L+ZqrrTTTJ4X23PC/L8a6/QysW0S1Bh U+bNVxgTiOToQVlBavvnQ8fiiWVY6IuLRX3I0oUH5KiG4yYwX9/qM6oYhX6bvOQgX6NB 3XxkjxpRSAqiP9phEtdyMfCWNairK2LGT9tzlqZ3Uw/9c0UHfb2TJNTTF7FqIypOFSyr vdRK3pJolTq3JlGeXm3+nvSBcbbQUHKZWv/nB9CLRAqn65nEfAVTuiMvVkIOTNY5138v jUHw== 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=LfuG7sVPzhX4mTrW9x6fcuukQOCrs+2iii9Hpdd6LUHy4Kf/vYBwsDxPgVjsZzqZzG epPUsrZg6FwEGtg5CAF5qRvtbklNMyoX20VHI878AOEkxZqoe5RHuRQ6oTMP2tFb+dfQ PwQq0O2fKnUO5M5GyPxBfirV/VcosyVpzjvu/sSDq0l/m4dpXeOO208RJkbmFyD9tN3z kqKoai0BA2ii49EdtsHa/6YfH4snBOJUJj6xfI6Fp9xHgoGrKMTMQUlBZIOKrp2LLQdu W9Z96vgHNs0+ObGwDuwUwAkGfpJjbEv2iZThZJABvfWtEObAP6aelzhytg9pipl2KTUu fKgA== X-Gm-Message-State: AElRT7EC3jNko44bwf9pI5OBId9cI84dbpRZDomj8dHnXqd05EZUjm61 fznhOhj8PeBmCsr5lmrDwDq0+yAg X-Google-Smtp-Source: AG47ELuZXll35dRuTfH6uDuQ1IGEOWCtXEyRldI5N9zUE95VIEdyqZYNsWMcwAEHRQyJgGomaDQikA== X-Received: by 10.98.217.76 with SMTP id s73mr2967210pfg.209.1520716977334; Sat, 10 Mar 2018 13:22:57 -0800 (PST) Received: from localhost.localdomain (120.236.201.35.bc.googleusercontent.com. [35.201.236.120]) by smtp.gmail.com with ESMTPSA id q65sm10532191pfd.140.2018.03.10.13.22.53 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sat, 10 Mar 2018 13:22:56 -0800 (PST) From: Zhang Chen To: qemu-devel@nongnu.org Date: Sun, 11 Mar 2018 05:21:58 +0800 Message-Id: <1520716927-17068-9-git-send-email-zhangckid@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1520716927-17068-1-git-send-email-zhangckid@gmail.com> References: <1520716927-17068-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::241 Subject: [Qemu-devel] [PATCH V5 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; } /**