From nobody Fri May 3 21:41:56 2024 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 Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 15168990591268.37734077711309; Thu, 25 Jan 2018 08:50:59 -0800 (PST) Received: from localhost ([::1]:50740 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eekjl-00039n-58 for importer@patchew.org; Thu, 25 Jan 2018 11:50:53 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:48483) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eekdW-0006xz-5C for qemu-devel@nongnu.org; Thu, 25 Jan 2018 11:44:27 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eekdS-00016Q-Qo for qemu-devel@nongnu.org; Thu, 25 Jan 2018 11:44:26 -0500 Received: from mailout1.w1.samsung.com ([210.118.77.11]:47718) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1eekdS-00014J-EI for qemu-devel@nongnu.org; Thu, 25 Jan 2018 11:44:22 -0500 Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout1.w1.samsung.com (KnoxPortal) with ESMTP id 20180125164417euoutp01d332c42894c4cb07d97de2d4853b35f8~NG0qr0Zi82363723637euoutp01h; Thu, 25 Jan 2018 16:44:17 +0000 (GMT) Received: from eusmges4.samsung.com (unknown [203.254.199.244]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20180125164416eucas1p2fec5ef12e38505369599d3966ff14386~NG0qCVvhg3135831358eucas1p2N; Thu, 25 Jan 2018 16:44:16 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges4.samsung.com (EUCPMTA) with SMTP id 1D.D5.30163.0690A6A5; Thu, 25 Jan 2018 16:44:16 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20180125164415eucas1p11691d02bf89c112ff25cfc43c400b5b2~NG0pdRpbK0275002750eucas1p1l; Thu, 25 Jan 2018 16:44:15 +0000 (GMT) Received: from eusync4.samsung.com ( [203.254.199.214]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id DE.45.18832.F590A6A5; Thu, 25 Jan 2018 16:44:15 +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 <0P34002I3EHJ8480@eusync4.samsung.com>; Thu, 25 Jan 2018 16:44:15 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com 20180125164417euoutp01d332c42894c4cb07d97de2d4853b35f8~NG0qr0Zi82363723637euoutp01h DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1516898657; bh=lNPQZ8zoVJCh4dJcDiSUWNu0zFWAID3Dy/U7jsyMfe4=; h=From:To:Cc:Subject:Date:In-reply-to:References:From; b=Q58OmFBCM9gmjJXjSF7VQGqoVTqSrAf+34n8KivqUdzdNgvjC3PUZn9zLQ3W1UYEa Yd7D02EY4zVCsg2bCfKWVvAKNDBm6ajPOABUVxDGB20sesnZ+Yli2tILJRXSYdoenB PaZU+idJiSTRPLWklmLh5YQn48ht5ak/A0+BAFNU= X-AuditID: cbfec7f4-f790c6d0000075d3-3d-5a6a0960242a From: Alexey Perevalov To: qemu-devel@nongnu.org, dgilbert@redhat.com Date: Thu, 25 Jan 2018 19:43:40 +0300 Message-id: <1516898620-9486-2-git-send-email-a.perevalov@samsung.com> X-Mailer: git-send-email 2.7.4 In-reply-to: <1516898620-9486-1-git-send-email-a.perevalov@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrLIsWRmVeSWpSXmKPExsWy7djP87oJnFlRBp/fMlvMvXuexWLl5CVM Fr3b7rFbnNh0kNniU4OUxZb939gtjvfuYLG4s6WPyYHD48CLheweT65tZvJ4v+8qm0ffllWM ASxRXDYpqTmZZalF+nYJXBkvfl1nKbjjWnGhbTJjA+NBsy5GTg4JAROJ+6ves0PYYhIX7q1n A7GFBJYySlw+WdDFyAVkf2aUWHl8GmsXIwdYw6Nufoj4MkaJh5/nskI43UwSC69tYwQpYhMw kNh3zxbEFBHQk5hwNRKkhFlgBqPE6annmEAWCAs4SLxuX8oCYrMIqEqsnXkdzOYVcJOYcOcs C8RBchI3z3Uyg9icAu4Ss55OYQQZJCEwhU2iacsCJogiF4nnfw+yQtjCEq+Ob4H6Rkais+Mg E0RDO6NE985OVghnAqPEmel/oarsJU7dvAo2iVmAT2LStunMEG/ySnS0CUGUeEgs6V7NBmE7 Stz99I0Z4uNZjBLrH+xknMAovYCRYRWjSGppcW56arGJXnFibnFpXrpecn7uJkZgpJ7+d/zL DsbFx6wOMQpwMCrx8Brcy4wSYk0sK67MPcQowcGsJMJ7uT0jSog3JbGyKrUoP76oNCe1+BCj NAeLkjivbVRbpJBAemJJanZqakFqEUyWiYNTqoFxvdPCmU3bxTybI5Pqdgt7lacbMQZMuyT+ Tm9f5una29xth/nOCaX/D7NwWlbtePz0HslXFafPtSW/ndPBEBDwPVn10KzqW9Mi67O9nk0Q FJ5Qv/teUkqy9j+XlFsauv0778omfWrna/K+NnlDa4HmJncX1x0H67vXP83onPlcsGPZs78N CzqUWIozEg21mIuKEwFEaVT00AIAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprALMWRmVeSWpSXmKPExsVy+t/xa7rxnFlRBitbNS3m3j3PYrFy8hIm i95t99gtTmw6yGzxqUHKYsv+b+wWx3t3sFjc2dLH5MDhceDFQnaPJ9c2M3m833eVzaNvyyrG AJYoLpuU1JzMstQifbsErowXv66zFNxxrbjQNpmxgfGgWRcjB4eEgInEo27+LkZOIFNM4sK9 9WxdjFwcQgJLGCUe7fvNAuH0Mkkc+9zJDtLAJmAgse+eLYgpIqAnMeFqJEgJs8AMRok9czex ggwSFnCQeN2+lAXEZhFQlVg78zqYzSvgJjHhzlkWiGVyEjfPdTKD2JwC7hKznk5hBJkpBFRz aDn/BEbeBYwMqxhFUkuLc9Nziw31ihNzi0vz0vWS83M3MQLDaduxn5t3MF7aGHyIUYCDUYmH 1+BeZpQQa2JZcWXuIUYJDmYlEd7L7RlRQrwpiZVVqUX58UWlOanFhxilOViUxHl796yOFBJI TyxJzU5NLUgtgskycXBKNTAGzK1ibY2/tSNkz1FNptk35LS61c9PvfDZ5/eyfywfFrC/2lh5 7eCsw2kv7eqz+pTdipxsZm6c+3xfceE57UIho4PW6pOnp+RUXOd33rY8nVXJI+4rW3du+36t lxUTN6xOfXYtvF+17PzFifte/H7j1larxepTJLmDtYQt7cPq0hdbI32WfQpUYinOSDTUYi4q TgQAo1GBaiMCAAA= X-CMS-MailID: 20180125164415eucas1p11691d02bf89c112ff25cfc43c400b5b2 X-Msg-Generator: CA CMS-TYPE: 201P X-CMS-RootMailID: 20180125164415eucas1p11691d02bf89c112ff25cfc43c400b5b2 X-RootMTR: 20180125164415eucas1p11691d02bf89c112ff25cfc43c400b5b2 References: <1516898620-9486-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 v1] 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, quintela@redhat.com, ash.billore@samsung.com, f4bug@amsat.org, peterx@redhat.com, Alexey Perevalov 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 | 47 ++++++++++++++++++++++++++++++--------------= --- migration/trace-events | 4 ++-- qapi/migration.json | 4 ++-- 4 files changed, 36 insertions(+), 23 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..ce91de8 100644 --- a/migration/postcopy-ram.c +++ b/migration/postcopy-ram.c @@ -63,14 +63,14 @@ 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; =20 @@ -99,22 +99,22 @@ 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; 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 +145,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; @@ -619,6 +619,16 @@ static int get_mem_fault_cpu_index(uint32_t pid) return -1; } =20 +static uint32_t get_least_significant_part(int64_t value) +{ + unsigned char *t =3D (unsigned char *)&value; +#if defined(HOST_WORDS_BIGENDIAN) + return t[4] << 24 | t[5] << 16 | t[6] << 8 | t[7] << 0; +#else + return t[0] << 0 | t[1] << 8 | t[2] << 16 | t[3] << 24; +#endif /* HOST_WORDS_BIGENDIAN */ +} + /* * This function is being called when pagefault occurs. It * tracks down vCPU blocking time. @@ -634,6 +644,7 @@ static void mark_postcopy_blocktime_begin(uintptr_t add= r, uint32_t ptid, MigrationIncomingState *mis =3D migration_incoming_get_current(); PostcopyBlocktimeContext *dc =3D mis->blocktime_ctx; int64_t now_ms; + uint32_t least_now; =20 if (!dc || ptid =3D=3D 0) { return; @@ -644,13 +655,14 @@ static void mark_postcopy_blocktime_begin(uintptr_t a= ddr, uint32_t ptid, } =20 now_ms =3D qemu_clock_get_ms(QEMU_CLOCK_REALTIME); + least_now =3D get_least_significant_part(now_ms); 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, least_now); + atomic_xchg(&dc->page_fault_vcpu_time[cpu], least_now); + 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 @@ -699,20 +711,21 @@ static void mark_postcopy_blocktime_end(uintptr_t add= r) int i, affected_cpu =3D 0; int64_t now_ms; bool vcpu_total_blocktime =3D false; - int64_t read_vcpu_time; + uint32_t read_vcpu_time, least_now; =20 if (!dc) { return; } =20 now_ms =3D qemu_clock_get_ms(QEMU_CLOCK_REALTIME); + least_now =3D get_least_significant_part(now_ms); =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 +733,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 least_now - 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 +748,7 @@ 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 least_now - atomic_fetch_add(&dc->last_be= gin, 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