From nobody Wed Nov 5 15:47:05 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 1496821278366766.4599869648006; Wed, 7 Jun 2017 00:41:18 -0700 (PDT) Received: from localhost ([::1]:41673 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dIVae-0007tW-R1 for importer@patchew.org; Wed, 07 Jun 2017 03:41:16 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:54584) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dIVVi-00047w-Cs for qemu-devel@nongnu.org; Wed, 07 Jun 2017 03:36:11 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dIVVf-0000tO-Bo for qemu-devel@nongnu.org; Wed, 07 Jun 2017 03:36:10 -0400 Received: from mailout1.w1.samsung.com ([210.118.77.11]:46926) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dIVVf-0000sK-5g for qemu-devel@nongnu.org; Wed, 07 Jun 2017 03:36:07 -0400 Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout1.w1.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTP id <0OR600IF92G6N180@mailout1.w1.samsung.com> for qemu-devel@nongnu.org; Wed, 07 Jun 2017 08:36:06 +0100 (BST) Received: from eusmges1.samsung.com (unknown [203.254.199.239]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20170607073605eucas1p228356a7a0ce34b733d22e6cdc3b7386a~FxrzvjXx00260602606eucas1p2i; Wed, 7 Jun 2017 07:36:05 +0000 (GMT) Received: from eucas1p1.samsung.com ( [182.198.249.206]) by eusmges1.samsung.com (EUCPMTA) with SMTP id B6.61.14140.8ECA7395; Wed, 7 Jun 2017 08:36:08 +0100 (BST) Received: from eusmgms2.samsung.com (unknown [182.198.249.180]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20170607073605eucas1p13af2f166ad184d486e43aa35dd105ac8~FxrzH6y2Q2014420144eucas1p1H; Wed, 7 Jun 2017 07:36:05 +0000 (GMT) Received: from eusync4.samsung.com ( [203.254.199.214]) by eusmgms2.samsung.com (EUCPMTA) with SMTP id 4A.3C.20206.4ECA7395; Wed, 7 Jun 2017 08:36:04 +0100 (BST) Received: from aperevalov-ubuntu.rnd.samsung.ru ([106.109.129.199]) by eusync4.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTPA id <0OR600HQN2FH4N90@eusync4.samsung.com>; Wed, 07 Jun 2017 08:36:04 +0100 (BST) X-AuditID: cbfec7ef-f796a6d00000373c-e0-5937ace8d805 From: Alexey Perevalov To: qemu-devel@nongnu.org Date: Wed, 07 Jun 2017 10:35:27 +0300 Message-id: <1496820931-27416-8-git-send-email-a.perevalov@samsung.com> X-Mailer: git-send-email 1.9.1 In-reply-to: <1496820931-27416-1-git-send-email-a.perevalov@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrOIsWRmVeSWpSXmKPExsWy7djPc7ov1phHGrztELaYe/c8i0Xvtnvs Flfaf7JbbNn/jd3ieO8OFgdWjyfXNjN5vN93lc2jb8sqxgDmKC6blNSczLLUIn27BK6My4s6 mQp+y1c86prD1MD4QqKLkZNDQsBE4v7PbjYIW0ziwr31QDYXh5DAMkaJ2Q/PQTmfGSWmrOph hunouPCJGa7q+ua37BBON5PE6oW7WboYOTjYBAwk9t2zBWkQEZCU+N11GqyZWaBA4mPrShYQ W1jAUeLh1NWMIDaLgKrEw0t3wc7gFXCX+LlpLyvEMjmJk8cmg9mcAh4S+z6sZQLZJSFwnU3i 3bJ3YLskBGQlNh2AOs5FYtLRv1C2sMSr41vYIWwZicuTu1kgetsZJbp3drJCOBMYJc5M/wtV ZS9x6uZVJohL+SQmbZvODLGAV6KjTQiixEOi7eZqqAWOEhcvn2OEeH42o8T8uf+YJjDKLGBk WMUoklpanJueWmyoV5yYW1yal66XnJ+7iREYnaf/HX+/g/Fpc8ghRgEORiUe3ow9ZpFCrIll xZW5hxglOJiVRHgvLTWPFOJNSaysSi3Kjy8qzUktPsQozcGiJM7Le+pahJBAemJJanZqakFq EUyWiYNTqoGxL65zb+YFo7bKL4ZPo9eL5ImE2PieY1jzZLnQBan1q55OyDz4+fn3mJzTp40u 6MUL7vwQHOKs+P+ubbzNkeOqwb41H95dZLIxqPl23eSw/K+SzMKZU6ZceRS9ok/4sVSA4VaJ vicuB87/flxp2DXD5UiQ+y4n078nJdcJnr3mdH9B1/615xLOKbEUZyQaajEXFScCAD96DL/K AgAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrKLMWRmVeSWpSXmKPExsVy+t/xa7pP1phHGvyfZ2Mx9+55FovebffY La60/2S32LL/G7vF8d4dLA6sHk+ubWbyeL/vKptH35ZVjAHMUW42GamJKalFCql5yfkpmXnp tkqhIW66FkoKeYm5qbZKEbq+IUFKCmWJOaVAnpEBGnBwDnAPVtK3S3DLuLyok6ngt3zFo645 TA2MLyS6GDk5JARMJDoufGKGsMUkLtxbz9bFyMUhJLCEUaLrbQOU08sksfP3btYuRg4ONgED iX33bEEaRAQkJX53nQZrZhYokDg3eQoLiC0s4CjxcOpqRhCbRUBV4uGlu2wgNq+Au8TPTXtZ IZbJSZw8NhnM5hTwkNj3YS0TiC0EVLP79Ay2CYy8CxgZVjGKpJYW56bnFhvpFSfmFpfmpesl 5+duYgQG6bZjP7fsYOx6F3yIUYCDUYmHN2OPWaQQa2JZcWXuIUYJDmYlEd5LS80jhXhTEiur Uovy44tKc1KLDzGaAh01kVlKNDkfGEF5JfGGJobmloZGxhYW5kZGSuK8Uz9cCRcSSE8sSc1O TS1ILYLpY+LglGpg3KDVfX23r8XMVWI/WVbb9sxKDrzXPf+D8fQdYRan7Dff2pmfKTGp4cdF jc9/PnmttX3Ym/xT69aliaqW877bzOSuLZaffcZMPeFQzZ5CnfV/j3Kn+0qlZLtrGNQ7FdZv Z6r8UFIeF/+0+eZn4T9nC7u3fWhTV5Z7f9k53i5749X929jk7zXkKbEUZyQaajEXFScCAL+z UMpoAgAA X-MTR: 20000000000000000@CPGS X-CMS-MailID: 20170607073605eucas1p13af2f166ad184d486e43aa35dd105ac8 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: 20170607073605eucas1p13af2f166ad184d486e43aa35dd105ac8 X-RootMTR: 20170607073605eucas1p13af2f166ad184d486e43aa35dd105ac8 References: <1496820931-27416-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.11 Subject: [Qemu-devel] [[PATCH V7] 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