From nobody Fri Oct 24 09:57:36 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=samsung.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1518790467631414.79809842042937; Fri, 16 Feb 2018 06:14:27 -0800 (PST) Received: from localhost ([::1]:53218 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1emgmQ-0001et-Qw for importer@patchew.org; Fri, 16 Feb 2018 09:14:26 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:37542) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1emghD-0005cO-5c for qemu-devel@nongnu.org; Fri, 16 Feb 2018 09:09:04 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1emgh9-0007WX-Tu for qemu-devel@nongnu.org; Fri, 16 Feb 2018 09:09:03 -0500 Received: from mailout1.w1.samsung.com ([210.118.77.11]:43772) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1emgh9-0007VJ-D9 for qemu-devel@nongnu.org; Fri, 16 Feb 2018 09:08:59 -0500 Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout1.w1.samsung.com (KnoxPortal) with ESMTP id 20180216140855euoutp014c58702efbe15147853b7f062ada2ad2~T05TPDxaH0076500765euoutp01y; Fri, 16 Feb 2018 14:08:55 +0000 (GMT) Received: from eusmges1new.samsung.com (unknown [203.254.199.242]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20180216140852eucas1p2501bb8d228b5af093f977d5c7582f68e~T05QX6mah2502325023eucas1p2b; Fri, 16 Feb 2018 14:08:52 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges1new.samsung.com (EUCPMTA) with SMTP id B8.6B.05700.1F5E68A5; Fri, 16 Feb 2018 14:08:50 +0000 (GMT) Received: from eusmgms2.samsung.com (unknown [182.198.249.180]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20180216140847eucas1p2df2d02d4debc4b09a9eb5d2763c016c1~T05Lpt3zY0897408974eucas1p2W; Fri, 16 Feb 2018 14:08:47 +0000 (GMT) Received: from eusync4.samsung.com ( [203.254.199.214]) by eusmgms2.samsung.com (EUCPMTA) with SMTP id 4A.7A.04183.FE5E68A5; Fri, 16 Feb 2018 14:08:47 +0000 (GMT) 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 <0P4800G1BXYGNZ70@eusync4.samsung.com>; Fri, 16 Feb 2018 14:08:47 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com 20180216140855euoutp014c58702efbe15147853b7f062ada2ad2~T05TPDxaH0076500765euoutp01y DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1518790135; bh=RChDEW6t1IMmmji8IGAYlgy+9EbWEXohPzxNcBQ0mr0=; h=From:To:Cc:Subject:Date:In-reply-to:References:From; b=UVN3p3EQn6P1RU9wbb2yai03NNOpoz1XWQRWqorCBhKpf2H+4jJ0b/58OhYOwWsez SNMX+jbykhgD6tnvjUWi9Fd4LVV1qv6ASoSRDYnEnuVPeNKvSvtAIQio812QrqoKe+ EqV5X7FNOaRZUQhGtooIwhLSdW/r6z+CT2GMkX5Y= X-AuditID: cbfec7f2-5ffe19c000011644-c8-5a86e5f121f0 From: Alexey Perevalov To: qemu-devel@nongnu.org, dgilbert@redhat.com Date: Fri, 16 Feb 2018 17:08:35 +0300 Message-id: <1518790115-13044-2-git-send-email-a.perevalov@samsung.com> X-Mailer: git-send-email 2.7.4 In-reply-to: <1518790115-13044-1-git-send-email-a.perevalov@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrOIsWRmVeSWpSXmKPExsWy7djP87qfnrZFGcxbzWQx9+55FouVk5cw WfRuu8ducWLTQWaLTw1SFlv2f2O3ON67g8XizpY+JovTNzezO3B6HHixkN3jybXNTB7v911l 8+jbsooxgCWKyyYlNSezLLVI3y6BK+PYv+vsBU/dKvavm8PcwHjAvIuRk0NCwETiQPcWti5G Lg4hgRWMEicPXWcESQgJfGaUOPM4rIuRA6zoyiwliPAyRokDjysg6ruZJDq39rCA1LAJGEjs u2cLYooI6ElMuBoJUsIssJFRYued9ywgvcICDhJvd/9mArFZBFQlettWs4HYvALuEjNWzGeE uEdO4ua5TmYQm1PAQ6L35xpWkEESAhPYJBrWdrBBFLlIbL20gRnCFpZ4dXwLO4QtI3F5cjcL REM7o0T3zk6YbqBnpv+FqrKXOHXzKtgZzAJ8EpO2TWeG+JJXoqNNCML0kPj5yhei2lFi8uIX rBAPz2aUOLr6LMsERqkFjAyrGMVTS4tz01OLDfNSy/WKE3OLS/PS9ZLzczcxAqPz9L/jn3Yw fr2UdIhRgINRiYf3weO2KCHWxLLiytxDjBIczEoivM9BQrwpiZVVqUX58UWlOanFhxilOViU xHnjNOqihATSE0tSs1NTC1KLYLJMHJxSDYz+h6XXf266nuv4a3/31w1ln7q5cq6853oYM/+Q 9spkv3D1Lh3nbnGma5e4tIv21DK6Wwo/ZnZhnXe4fvFxuZCX69Rdwi5cu8K9U0JR/uhG3U+/ SsPKre403rLMNT8YxWN76LLCr2DZ1/8nOyStiz4edPDIu2vsbGez/Vtk58770N/O47pBYpoS S3FGoqEWc1FxIgBHgJ13ygIAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFupkluLIzCtJLcpLzFFi42I5/e/4Nd33T9uiDNbc4LaYe/c8i8XKyUuY LHq33WO3OLHpILPFpwYpiy37v7FbHO/dwWJxZ0sfk8Xpm5vZHTg9DrxYyO7x5NpmJo/3+66y efRtWcUYwBLFZZOSmpNZllqkb5fAlXHs33X2gqduFfvXzWFuYDxg3sXIwSEhYCJxZZZSFyMn h5DAEkaJbesFuhi5gOxeJok5d06xgdSwCRhI7LtnC2KKCOhJTLgaCVLCLLCRUeLXjLusIL3C Ag4Sb3f/ZgKxWQRUJXrbVrOB2LwC7hIzVsxnBLElBOQkbp7rZAaxOQU8JHp/rmGF2OsuceTe BsYJjDwLGBlWMYqklhbnpucWG+kVJ+YWl+al6yXn525iBAbQtmM/t+xg7HoXfIhRgINRiYf3 weO2KCHWxLLiytxDjBIczEoivM9BQrwpiZVVqUX58UWlOanFhxilOViUxHnPG1RGCQmkJ5ak ZqemFqQWwWSZODilGhhj3F/7vIh6sjOOKVUl5A3vjyYdhaOOZcvK/7VYVNvbsOXOeOH1Oj4/ gjc1o2D/WZMjiz9Wxhp/SJTtuLflykGvBRzRP7weXV+bv+SWG8N/1beT2oROpjFZupiwb9u2 s2jr513bVYrDEtez9QfbeE5ZM0Vx2conYjxOqTX+s+9NP3Gv5BTL46NKLMUZiYZazEXFiQD1 UcRjHAIAAA== X-CMS-MailID: 20180216140847eucas1p2df2d02d4debc4b09a9eb5d2763c016c1 X-Msg-Generator: CA CMS-TYPE: 201P X-CMS-RootMailID: 20180216140847eucas1p2df2d02d4debc4b09a9eb5d2763c016c1 X-RootMTR: 20180216140847eucas1p2df2d02d4debc4b09a9eb5d2763c016c1 References: <1518790115-13044-1-git-send-email-a.perevalov@samsung.com> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 210.118.77.11 Subject: [Qemu-devel] [PATCH v3] migration: change blocktime type to uint32_t 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: lvivier@redhat.com, v.kuramshin@samsung.com, quintela@redhat.com, ash.billore@samsung.com, Alexey Perevalov , peterx@redhat.com, f4bug@amsat.org 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" Initially int64_t was used, but on PowerPC architecture, clang doesn't have atomic_*_8 function, so it produces link time error. QEMU is working with time as with 64bit value, but by fact 32 bit is enough with CLOCK_REALTIME. In this case blocktime will keep only 1200 hours time interval. Signed-off-by: Alexey Perevalov Acked-by: Eric Blake --- hmp.c | 4 ++-- migration/postcopy-ram.c | 48 +++++++++++++++++++++++++++-----------------= ---- migration/trace-events | 4 ++-- qapi/migration.json | 4 ++-- 4 files changed, 33 insertions(+), 27 deletions(-) diff --git a/hmp.c b/hmp.c index c6bab53..3c376b3 100644 --- a/hmp.c +++ b/hmp.c @@ -265,7 +265,7 @@ void hmp_info_migrate(Monitor *mon, const QDict *qdict) } =20 if (info->has_postcopy_blocktime) { - monitor_printf(mon, "postcopy blocktime: %" PRId64 "\n", + monitor_printf(mon, "postcopy blocktime: %u\n", info->postcopy_blocktime); } =20 @@ -273,7 +273,7 @@ void hmp_info_migrate(Monitor *mon, const QDict *qdict) Visitor *v; char *str; v =3D string_output_visitor_new(false, &str); - visit_type_int64List(v, NULL, &info->postcopy_vcpu_blocktime, NULL= ); + visit_type_uint32List(v, NULL, &info->postcopy_vcpu_blocktime, NUL= L); visit_complete(v, &str); monitor_printf(mon, "postcopy vcpu blocktime: %s\n", str); g_free(str); diff --git a/migration/postcopy-ram.c b/migration/postcopy-ram.c index 7814da5..6694fd3 100644 --- a/migration/postcopy-ram.c +++ b/migration/postcopy-ram.c @@ -63,16 +63,17 @@ struct PostcopyDiscardState { =20 typedef struct PostcopyBlocktimeContext { /* time when page fault initiated per vCPU */ - int64_t *page_fault_vcpu_time; + uint32_t *page_fault_vcpu_time; /* page address per vCPU */ uintptr_t *vcpu_addr; - int64_t total_blocktime; + uint32_t total_blocktime; /* blocktime per vCPU */ - int64_t *vcpu_blocktime; + uint32_t *vcpu_blocktime; /* point in time when last page fault was initiated */ - int64_t last_begin; + uint32_t last_begin; /* number of vCPU are suspended */ int smp_cpus_down; + uint64_t start_time; =20 /* * Handler for exit event, necessary for @@ -99,22 +100,23 @@ static void migration_exit_cb(Notifier *n, void *data) static struct PostcopyBlocktimeContext *blocktime_context_new(void) { PostcopyBlocktimeContext *ctx =3D g_new0(PostcopyBlocktimeContext, 1); - ctx->page_fault_vcpu_time =3D g_new0(int64_t, smp_cpus); + ctx->page_fault_vcpu_time =3D g_new0(uint32_t, smp_cpus); ctx->vcpu_addr =3D g_new0(uintptr_t, smp_cpus); - ctx->vcpu_blocktime =3D g_new0(int64_t, smp_cpus); + ctx->vcpu_blocktime =3D g_new0(uint32_t, smp_cpus); =20 ctx->exit_notifier.notify =3D migration_exit_cb; + ctx->start_time =3D qemu_clock_get_ms(QEMU_CLOCK_REALTIME); qemu_add_exit_notifier(&ctx->exit_notifier); return ctx; } =20 -static int64List *get_vcpu_blocktime_list(PostcopyBlocktimeContext *ctx) +static uint32List *get_vcpu_blocktime_list(PostcopyBlocktimeContext *ctx) { - int64List *list =3D NULL, *entry =3D NULL; + uint32List *list =3D NULL, *entry =3D NULL; int i; =20 for (i =3D smp_cpus - 1; i >=3D 0; i--) { - entry =3D g_new0(int64List, 1); + entry =3D g_new0(uint32List, 1); entry->value =3D ctx->vcpu_blocktime[i]; entry->next =3D list; list =3D entry; @@ -145,7 +147,7 @@ void fill_destination_postcopy_migration_info(Migration= Info *info) info->postcopy_vcpu_blocktime =3D get_vcpu_blocktime_list(bc); } =20 -static uint64_t get_postcopy_total_blocktime(void) +static uint32_t get_postcopy_total_blocktime(void) { MigrationIncomingState *mis =3D migration_incoming_get_current(); PostcopyBlocktimeContext *bc =3D mis->blocktime_ctx; @@ -633,7 +635,8 @@ static void mark_postcopy_blocktime_begin(uintptr_t add= r, uint32_t ptid, int cpu, already_received; MigrationIncomingState *mis =3D migration_incoming_get_current(); PostcopyBlocktimeContext *dc =3D mis->blocktime_ctx; - int64_t now_ms; + int64_t start_time_offset; + uint32_t low_time_offset; =20 if (!dc || ptid =3D=3D 0) { return; @@ -643,14 +646,15 @@ static void mark_postcopy_blocktime_begin(uintptr_t a= ddr, uint32_t ptid, return; } =20 - now_ms =3D qemu_clock_get_ms(QEMU_CLOCK_REALTIME); + start_time_offset =3D qemu_clock_get_ms(QEMU_CLOCK_REALTIME) - dc->sta= rt_time; + low_time_offset =3D start_time_offset & UINT32_MAX; if (dc->vcpu_addr[cpu] =3D=3D 0) { atomic_inc(&dc->smp_cpus_down); } =20 - atomic_xchg__nocheck(&dc->last_begin, now_ms); - atomic_xchg__nocheck(&dc->page_fault_vcpu_time[cpu], now_ms); - atomic_xchg__nocheck(&dc->vcpu_addr[cpu], addr); + atomic_xchg(&dc->last_begin, low_time_offset); + atomic_xchg(&dc->page_fault_vcpu_time[cpu], low_time_offset); + atomic_xchg(&dc->vcpu_addr[cpu], addr); =20 /* check it here, not at the begining of the function, * due to, check could accur early than bitmap_set in @@ -697,22 +701,23 @@ static void mark_postcopy_blocktime_end(uintptr_t add= r) MigrationIncomingState *mis =3D migration_incoming_get_current(); PostcopyBlocktimeContext *dc =3D mis->blocktime_ctx; int i, affected_cpu =3D 0; - int64_t now_ms; + int64_t start_time_offset; bool vcpu_total_blocktime =3D false; - int64_t read_vcpu_time; + uint32_t read_vcpu_time, low_time_offset; =20 if (!dc) { return; } =20 - now_ms =3D qemu_clock_get_ms(QEMU_CLOCK_REALTIME); + start_time_offset =3D qemu_clock_get_ms(QEMU_CLOCK_REALTIME) - dc->sta= rt_time; + low_time_offset =3D start_time_offset & UINT32_MAX; =20 /* lookup cpu, to clear it, * that algorithm looks straighforward, but it's not * optimal, more optimal algorithm is keeping tree or hash * where key is address value is a list of */ for (i =3D 0; i < smp_cpus; i++) { - uint64_t vcpu_blocktime =3D 0; + uint32_t vcpu_blocktime =3D 0; =20 read_vcpu_time =3D atomic_fetch_add(&dc->page_fault_vcpu_time[i], = 0); if (atomic_fetch_add(&dc->vcpu_addr[i], 0) !=3D addr || @@ -720,7 +725,7 @@ static void mark_postcopy_blocktime_end(uintptr_t addr) continue; } atomic_xchg__nocheck(&dc->vcpu_addr[i], 0); - vcpu_blocktime =3D now_ms - read_vcpu_time; + vcpu_blocktime =3D low_time_offset - read_vcpu_time; affected_cpu +=3D 1; /* we need to know is that mark_postcopy_end was due to * faulted page, another possible case it's prefetched @@ -735,7 +740,8 @@ static void mark_postcopy_blocktime_end(uintptr_t addr) =20 atomic_sub(&dc->smp_cpus_down, affected_cpu); if (vcpu_total_blocktime) { - dc->total_blocktime +=3D now_ms - atomic_fetch_add(&dc->last_begin= , 0); + dc->total_blocktime +=3D low_time_offset - atomic_fetch_add( + &dc->last_begin, 0); } trace_mark_postcopy_blocktime_end(addr, dc, dc->total_blocktime, affected_cpu); diff --git a/migration/trace-events b/migration/trace-events index 141e773..0defbc3 100644 --- a/migration/trace-events +++ b/migration/trace-events @@ -115,8 +115,8 @@ process_incoming_migration_co_end(int ret, int ps) "ret= =3D%d postcopy-state=3D%d" process_incoming_migration_co_postcopy_end_main(void) "" migration_set_incoming_channel(void *ioc, const char *ioctype) "ioc=3D%p i= octype=3D%s" migration_set_outgoing_channel(void *ioc, const char *ioctype, const char = *hostname) "ioc=3D%p ioctype=3D%s hostname=3D%s" -mark_postcopy_blocktime_begin(uint64_t addr, void *dd, int64_t time, int c= pu, int received) "addr: 0x%" PRIx64 ", dd: %p, time: %" PRId64 ", cpu: %d,= already_received: %d" -mark_postcopy_blocktime_end(uint64_t addr, void *dd, int64_t time, int aff= ected_cpu) "addr: 0x%" PRIx64 ", dd: %p, time: %" PRId64 ", affected_cpu: %= d" +mark_postcopy_blocktime_begin(uint64_t addr, void *dd, uint32_t time, int = cpu, int received) "addr: 0x%" PRIx64 ", dd: %p, time: %u, cpu: %d, already= _received: %d" +mark_postcopy_blocktime_end(uint64_t addr, void *dd, uint32_t time, int af= fected_cpu) "addr: 0x%" PRIx64 ", dd: %p, time: %u, affected_cpu: %d" =20 # migration/rdma.c qemu_rdma_accept_incoming_migration(void) "" diff --git a/qapi/migration.json b/qapi/migration.json index 70e7b67..ee55d7c 100644 --- a/qapi/migration.json +++ b/qapi/migration.json @@ -175,8 +175,8 @@ '*setup-time': 'int', '*cpu-throttle-percentage': 'int', '*error-desc': 'str', - '*postcopy-blocktime' : 'int64', - '*postcopy-vcpu-blocktime': ['int64']} } + '*postcopy-blocktime' : 'uint32', + '*postcopy-vcpu-blocktime': ['uint32']} } =20 ## # @query-migrate: --=20 2.7.4