From nobody Wed Nov 5 17:48:44 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.zoho.com; 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; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1496829210060572.0607898976375; Wed, 7 Jun 2017 02:53:30 -0700 (PDT) Received: from localhost ([::1]:42336 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dIXea-0007QM-Ha for importer@patchew.org; Wed, 07 Jun 2017 05:53:28 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58087) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dIXYv-0001B2-8H for qemu-devel@nongnu.org; Wed, 07 Jun 2017 05:47:39 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dIXYr-0000G2-A9 for qemu-devel@nongnu.org; Wed, 07 Jun 2017 05:47:37 -0400 Received: from mailout3.w1.samsung.com ([210.118.77.13]:61296) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dIXYr-0000FL-0W for qemu-devel@nongnu.org; Wed, 07 Jun 2017 05:47:33 -0400 Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout3.w1.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTP id <0OR6005PG8J7S330@mailout3.w1.samsung.com> for qemu-devel@nongnu.org; Wed, 07 Jun 2017 10:47:31 +0100 (BST) Received: from eusmges4.samsung.com (unknown [203.254.199.244]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20170607094730eucas1p23cd1e8dc14fb929ab7ef1c9c78395f80~Fzeizj1gd0284202842eucas1p2S; Wed, 7 Jun 2017 09:47:30 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges4.samsung.com (EUCPMTA) with SMTP id AA.47.04729.2BBC7395; Wed, 7 Jun 2017 10:47:30 +0100 (BST) Received: from eusmgms2.samsung.com (unknown [182.198.249.180]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20170607094729eucas1p15097f154039365d5e135f92b72aad1bf~FzeiN6tp_0264102641eucas1p1F; Wed, 7 Jun 2017 09:47:29 +0000 (GMT) Received: from eusync1.samsung.com ( [203.254.199.211]) by eusmgms2.samsung.com (EUCPMTA) with SMTP id 50.32.20206.1BBC7395; Wed, 7 Jun 2017 10:47:29 +0100 (BST) Received: from aperevalov-ubuntu.rnd.samsung.ru ([106.109.129.199]) by eusync1.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTPA id <0OR600I3B8ILMHB0@eusync1.samsung.com>; Wed, 07 Jun 2017 10:47:29 +0100 (BST) X-AuditID: cbfec7f4-f79806d000001279-fd-5937cbb2b007 From: Alexey Perevalov To: qemu-devel@nongnu.org Date: Wed, 07 Jun 2017 12:46:34 +0300 Message-id: <1496828798-27548-8-git-send-email-a.perevalov@samsung.com> X-Mailer: git-send-email 1.9.1 In-reply-to: <1496828798-27548-1-git-send-email-a.perevalov@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrKIsWRmVeSWpSXmKPExsWy7djP87qbTptHGuxr47eYe/c8i0Xvtnvs Flfaf7JbbNn/jd3ieO8OFgdWjyfXNjN5vN93lc2jb8sqxgDmKC6blNSczLLUIn27BK6My4s6 mQp+y1c86prD1MD4QqKLkZNDQsBEYtqne6wQtpjEhXvr2UBsIYGljBJLNsVA2J8ZJd7fTIGp f3y7mamLkQsovoxRYnPrBCinm0li+YKzzF2MHBxsAgYS++7ZgjSICEhK/O46zQxiMwsUSHxs XckCYgsL2EvMfvESbBmLgKrEw6/LGUFsXgF3iWt7LzJBLJOTOHlsMthxnAIeEj+m3mYG2SUh cJtN4tSaTlaQXRICshKbDjBD1LtInOjeygJhC0u8Or6FHcKWkbg8uZsForedUaJ7J0gviDOB UeLM9L9QVfYSp25eZYK4lE9i0rbpzBALeCU62oQgSjwkNrUfh4aWo8S1X7OYIZ6fzSixsWM2 ywRGmQWMDKsYRVJLi3PTU4tN9IoTc4tL89L1kvNzNzECI/P0v+NfdjAuPmZ1iFGAg1GJhzdj j1mkEGtiWXFl7iFGCQ5mJRHeiUfNI4V4UxIrq1KL8uOLSnNSiw8xSnOwKInzcp26FiEkkJ5Y kpqdmlqQWgSTZeLglGpgZJlxeJu/8PotVT8K3x2dV7Vfp33t8SVnlMWk/X/NVC7e+z7TJc3n 4Lv1RSJZkRuM2myzhZ+0ZX48ouoYcVjp4KIXO46uPvfV9u2aLd+P7emt28P3Y5GR/UWu/6e/ aC3uLr7UOU3q146PfanHpGWe1sy7rV4m0v47g/XbjR0bIw+oK9qUCXLtv6TEUpyRaKjFXFSc CACC6Ti6yAIAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrKLMWRmVeSWpSXmKPExsVy+t/xy7obT5tHGkzrULOYe/c8i0Xvtnvs Flfaf7JbbNn/jd3ieO8OFgdWjyfXNjN5vN93lc2jb8sqxgDmKDebjNTElNQihdS85PyUzLx0 W6XQEDddCyWFvMTcVFulCF3fkCAlhbLEnFIgz8gADTg4B7gHK+nbJbhlXF7UyVTwW77iUdcc pgbGFxJdjJwcEgImEo9vNzNB2GISF+6tZ+ti5OIQEljCKDHn+ldWCKeXSWL3wW9AVRwcbAIG Evvu2YI0iAhISvzuOs0MYjMLFEicmzyFBcQWFrCXmP3iJRuIzSKgKvHw63JGEJtXwF3i2t6L UMvkJE4em8wKYnMKeEj8mHobbI4QUM3tO2eYJjDyLmBkWMUoklpanJueW2ykV5yYW1yal66X nJ+7iREYpNuO/dyyg7HrXfAhRgEORiUe3ow9ZpFCrIllxZW5hxglOJiVRHgnHjWPFOJNSays Si3Kjy8qzUktPsRoCnTURGYp0eR8YATllcQbmhiaWxoaGVtYmBsZKYnzTv1wJVxIID2xJDU7 NbUgtQimj4mDU6qBUf+NjYiyYk3j8s4pG//NPO6S8yd0vdp1m8+VXywNOw8Vfi6cv3en3afD e6527mtQq32iyd7/pC/Kw3n5MRaGzRsX37xfsOTRKtZ1JpeUn954dvY2y6M0r0txoYc5nOwC Nn3I2NOT8Lbru/DOw6/5SjoOrWRZOE0iVo99rtTE2O8i02vmhK16+kiJpTgj0VCLuag4EQAs 3e58aAIAAA== X-MTR: 20000000000000000@CPGS X-CMS-MailID: 20170607094729eucas1p15097f154039365d5e135f92b72aad1bf X-Msg-Generator: CA X-Sender-IP: 182.198.249.180 X-Local-Sender: =?UTF-8?B?QWxleGV5IFBlcmV2YWxvdhtTUlItVmlydHVhbGl6YXRpb24g?= =?UTF-8?B?TGFiG+yCvOyEseyghOyekBtTZW5pb3IgRW5naW5lZXI=?= X-Global-Sender: =?UTF-8?B?QWxleGV5IFBlcmV2YWxvdhtTUlItVmlydHVhbGl6YXRpb24g?= =?UTF-8?B?TGFiG1NhbXN1bmcgRWxlY3Ryb25pY3MbU2VuaW9yIEVuZ2luZWVy?= X-Sender-Code: =?UTF-8?B?QzEwG0NJU0hRG0MxMEdEMDFHRDAxMDE1NA==?= CMS-TYPE: 201P X-HopCount: 7 X-CMS-RootMailID: 20170607094729eucas1p15097f154039365d5e135f92b72aad1bf X-RootMTR: 20170607094729eucas1p15097f154039365d5e135f92b72aad1bf References: <1496828798-27548-1-git-send-email-a.perevalov@samsung.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 210.118.77.13 Subject: [Qemu-devel] [PATCH v8 07/11] migration: add bitmap for copied page 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: i.maximets@samsung.com, Alexey Perevalov , peterx@redhat.com, dgilbert@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" This patch adds ability to track down already copied pages, it's necessary for calculation vCPU block time in postcopy migration feature, maybe for restore after postcopy migration failure. Also it's necessary to solve shared memory issue in postcopy livemigration. Information about copied pages will be transferred to the software virtual bridge (e.g. OVS-VSWITCHD), to avoid fallocate (unmap) for already copied pages. fallocate syscall is required for remmaped shared memory, due to remmaping itself blocks ioctl(UFFDIO_COPY, ioctl in this case will end with EEXIT error (struct page is exists after remmap). Bitmap is placed into RAMBlock as another postcopy/precopy related bitmaps. Helpers are in migration/ram.c, due to in this file is allowing to work with RAMBlock. Signed-off-by: Alexey Perevalov --- include/exec/ram_addr.h | 2 ++ migration/ram.c | 36 ++++++++++++++++++++++++++++++++++++ migration/ram.h | 4 ++++ 3 files changed, 42 insertions(+) diff --git a/include/exec/ram_addr.h b/include/exec/ram_addr.h index 140efa8..6a3780b 100644 --- a/include/exec/ram_addr.h +++ b/include/exec/ram_addr.h @@ -47,6 +47,8 @@ struct RAMBlock { * of the postcopy phase */ unsigned long *unsentmap; + /* bitmap of already copied pages in postcopy */ + unsigned long *copiedmap; }; =20 static inline bool offset_in_ramblock(RAMBlock *b, ram_addr_t offset) diff --git a/migration/ram.c b/migration/ram.c index f387e9c..a7c0db4 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -149,6 +149,25 @@ out: return ret; } =20 +static unsigned long int get_copied_bit_offset(uint64_t addr, RAMBlock *rb) +{ + uint64_t addr_offset =3D addr - (uint64_t)(uintptr_t)rb->host; + int page_shift =3D find_first_bit((unsigned long *)&rb->page_size, + sizeof(rb->page_size)); + + return addr_offset >> page_shift; +} + +int test_copiedmap_by_addr(uint64_t addr, RAMBlock *rb) +{ + return test_bit(get_copied_bit_offset(addr, rb), rb->copiedmap); +} + +void set_copiedmap_by_addr(uint64_t addr, RAMBlock *rb) +{ + set_bit_atomic(get_copied_bit_offset(addr, rb), rb->copiedmap); +} + /* * An outstanding page request, on the source, having been received * and queued @@ -1449,6 +1468,8 @@ static void ram_migration_cleanup(void *opaque) block->bmap =3D NULL; g_free(block->unsentmap); block->unsentmap =3D NULL; + g_free(block->copiedmap); + block->copiedmap =3D NULL; } =20 XBZRLE_cache_lock(); @@ -2517,6 +2538,14 @@ static int ram_load_postcopy(QEMUFile *f) return ret; } =20 +static unsigned long get_copiedmap_size(RAMBlock *rb) +{ + unsigned long pages; + pages =3D rb->max_length >> find_first_bit((unsigned long *)&rb->page_= size, + sizeof(rb->page_size)); + return pages; +} + static int ram_load(QEMUFile *f, void *opaque, int version_id) { int flags =3D 0, ret =3D 0; @@ -2544,6 +2573,13 @@ static int ram_load(QEMUFile *f, void *opaque, int v= ersion_id) rcu_read_lock(); =20 if (postcopy_running) { + RAMBlock *rb; + RAMBLOCK_FOREACH(rb) { + /* need for destination, bitmap_new calls + * g_try_malloc0 and this function + * Attempts to allocate @n_bytes, initialized to 0'sh */ + rb->copiedmap =3D bitmap_new(get_copiedmap_size(rb)); + } ret =3D ram_load_postcopy(f); } =20 diff --git a/migration/ram.h b/migration/ram.h index c9563d1..1f32824 100644 --- a/migration/ram.h +++ b/migration/ram.h @@ -67,4 +67,8 @@ int ram_discard_range(const char *block_name, uint64_t st= art, size_t length); int ram_postcopy_incoming_init(MigrationIncomingState *mis); =20 void ram_handle_compressed(void *host, uint8_t ch, uint64_t size); + +int test_copiedmap_by_addr(uint64_t addr, RAMBlock *rb); +void set_copiedmap_by_addr(uint64_t addr, RAMBlock *rb); + #endif --=20 1.9.1