From nobody Sat Oct 25 11:02:19 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1520717625751857.4757204501685; Sat, 10 Mar 2018 13:33:45 -0800 (PST) Received: from localhost ([::1]:52024 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eum7c-0002rG-ST for importer@patchew.org; Sat, 10 Mar 2018 16:33:44 -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) 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) 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) 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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(RAM= Block *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; } =20 @@ -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 to= gether + * 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 =3D block->max_length >> TARGET_PAGE_BITS; + + block->bmap =3D bitmap_new(pages); + bitmap_set(block->bmap, 0, pages); + } + } + ram_state =3D g_new0(RAMState, 1); + ram_state->migration_dirty_pages =3D 0; + return 0; =20 out_locked: @@ -2678,6 +2705,10 @@ void colo_release_ram_cache(void) { RAMBlock *block; =20 + QLIST_FOREACH_RCU(block, &ram_list.blocks, next) { + g_free(block->bmap); + block->bmap =3D 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 =3D NULL; } =20 /** --=20 2.7.4