xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
From: Juergen Gross <jgross@suse.com>
To: Olaf Hering <olaf@aepfle.de>, xen-devel@lists.xenproject.org
Cc: Ian Jackson <iwj@xenproject.org>, Wei Liu <wl@xen.org>
Subject: Re: [PATCH v20210601 09/38] tools/guest: prepare to allocate arrays once
Date: Wed, 2 Jun 2021 09:29:08 +0200	[thread overview]
Message-ID: <531fe9c5-aa7f-be99-5d78-85d817139740@suse.com> (raw)
In-Reply-To: <20210601161118.18986-10-olaf@aepfle.de>


[-- Attachment #1.1.1: Type: text/plain, Size: 4374 bytes --]

On 01.06.21 18:10, Olaf Hering wrote:
> The hotpath 'send_dirty_pages' is supposed to do just one thing: sending.
> The other end 'handle_page_data' is supposed to do just receiving.
> 
> But instead both do other costly work like memory allocations and data moving.
> Do the allocations once, the array sizes are a compiletime constant.
> Avoid unneeded copying of data by receiving data directly into mapped guest memory.
> 
> This patch is just prepartion, subsequent changes will populate the arrays.
> 
> Once all changes are applied, migration of a busy HVM domU changes like 
that:
> 
> Without this series, from sr650 to sr950 (xen-4.15.20201027T173911.16a20963b3 xen_testing):
> 2020-10-29 10:23:10.711+0000: xc: show_transfer_rate: 23663128 bytes + 2879563 pages in 55.324905335 sec, 203 MiB/sec: Internal error
> 2020-10-29 10:23:35.115+0000: xc: show_transfer_rate: 16829632 bytes + 2097552 pages in 24.401179720 sec, 335 MiB/sec: Internal error
> 2020-10-29 10:23:59.436+0000: xc: show_transfer_rate: 16829032 bytes + 2097478 pages in 24.319025928 sec, 336 MiB/sec: Internal error
> 2020-10-29 10:24:23.844+0000: xc: show_transfer_rate: 16829024 bytes + 2097477 pages in 24.406992500 sec, 335 MiB/sec: Internal error
> 2020-10-29 10:24:48.292+0000: xc: show_transfer_rate: 16828912 bytes + 2097463 pages in 24.446489027 sec, 335 MiB/sec: Internal error
> 2020-10-29 10:25:01.816+0000: xc: show_transfer_rate: 16836080 bytes + 2098356 pages in 13.447091818 sec, 609 MiB/sec: Internal error
> 
> With this series, from sr650 to sr950 (xen-4.15.20201027T173911.16a20963b3 xen_unstable):
> 2020-10-28 21:26:05.074+0000: xc: show_transfer_rate: 23663128 bytes + 2879563 pages in 52.564054368 sec, 213 MiB/sec: Internal error
> 2020-10-28 21:26:23.527+0000: xc: show_transfer_rate: 16830040 bytes + 2097603 pages in 18.450592015 sec, 444 MiB/sec: Internal error
> 2020-10-28 21:26:41.926+0000: xc: show_transfer_rate: 16830944 bytes + 2097717 pages in 18.397862306 sec, 445 MiB/sec: Internal error
> 2020-10-28 21:27:00.339+0000: xc: show_transfer_rate: 16829176 bytes + 2097498 pages in 18.411973339 sec, 445 MiB/sec: Internal error
> 2020-10-28 21:27:18.643+0000: xc: show_transfer_rate: 16828592 bytes + 2097425 pages in 18.303326695 sec, 447 MiB/sec: Internal error
> 2020-10-28 21:27:26.289+0000: xc: show_transfer_rate: 16835952 bytes + 2098342 pages in 7.579846749 sec, 1081 MiB/sec: Internal error
> 
> Signed-off-by: Olaf Hering <olaf@aepfle.de>
> ---
>   tools/libs/saverestore/common.h  | 8 ++++++++
>   tools/libs/saverestore/restore.c | 8 ++++++++
>   tools/libs/saverestore/save.c    | 4 +++-
>   3 files changed, 19 insertions(+), 1 deletion(-)
> 
> diff --git a/tools/libs/saverestore/common.h b/tools/libs/saverestore/common.h
> index f5fe23caad..80b2e878aa 100644
> --- a/tools/libs/saverestore/common.h
> +++ b/tools/libs/saverestore/common.h
> @@ -223,6 +223,12 @@ static inline int update_blob(struct xc_sr_blob *blob,
>       return 0;
>   }
>   
> +struct xc_sr_save_arrays {
> +};
> +
> +struct xc_sr_restore_arrays {
> +};

Can you please add the mfns/pfns arrays to above types, as ...

> +
>   struct xc_sr_context
>   {
>       xc_interface *xch;
> @@ -260,6 +266,7 @@ struct xc_sr_context
>               unsigned long *deferred_pages;
>               unsigned long nr_deferred_pages;
>               xc_hypercall_buffer_t dirty_bitmap_hbuf;
> +            struct xc_sr_save_arrays *m;
>           } save;
>   
>           struct /* Restore data. */
> @@ -311,6 +318,7 @@ struct xc_sr_context
>   
>               /* Sender has invoked verify mode on the stream. */
>               bool verify;
> +            struct xc_sr_restore_arrays *m;
>           } restore;
>       };
>   
> diff --git a/tools/libs/saverestore/restore.c b/tools/libs/saverestore/restore.c
> index 700f9e74b5..a6cf9ee41c 100644
> --- a/tools/libs/saverestore/restore.c
> +++ b/tools/libs/saverestore/restore.c
> @@ -739,6 +739,13 @@ static int setup(struct xc_sr_context *ctx)
>       }
>       ctx->restore.allocated_rec_num = DEFAULT_BUF_RECORDS;
>   
> +    ctx->restore.m = malloc(sizeof(*ctx->restore.m));
> +    if ( !ctx->restore.m ) {

... this case might trigger without the full series applied, due to
allocating zero bytes (same for the save side below).


Juergen

[-- Attachment #1.1.2: OpenPGP public key --]
[-- Type: application/pgp-keys, Size: 3135 bytes --]

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 495 bytes --]

  reply	other threads:[~2021-06-02  7:29 UTC|newest]

Thread overview: 87+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-06-01 16:10 [PATCH v20210601 00/38] leftover from 2020 Olaf Hering
2021-06-01 16:10 ` [PATCH v20210601 01/38] tools: add API to work with sevaral bits at once Olaf Hering
2021-06-02  6:19   ` Juergen Gross
2021-06-01 16:10 ` [PATCH v20210601 02/38] xl: fix description of migrate --debug Olaf Hering
2021-06-02  6:09   ` Juergen Gross
2021-06-02 10:43     ` Olaf Hering
2021-06-02 11:43       ` Juergen Gross
2021-06-02 12:32   ` [PATCH v20210602 " Olaf Hering
2021-06-02 13:48     ` Juergen Gross
2021-06-01 16:10 ` [PATCH v20210601 03/38] tools: create libxensaverestore Olaf Hering
2021-06-01 16:10 ` [PATCH v20210601 04/38] tools: add readv_exact to libxenctrl Olaf Hering
2021-06-02  6:30   ` Juergen Gross
2021-06-02 10:57     ` Olaf Hering
2021-06-02 11:05       ` Olaf Hering
2021-06-02 11:41       ` Juergen Gross
2021-06-07  9:46         ` Olaf Hering
2021-06-07 11:31         ` Olaf Hering
2021-06-01 16:10 ` [PATCH v20210601 05/38] tools: add xc_is_known_page_type " Olaf Hering
2021-06-02  6:51   ` Juergen Gross
2021-06-02 11:10     ` Olaf Hering
2021-06-02 11:48       ` Juergen Gross
2021-06-01 16:10 ` [PATCH v20210601 06/38] tools: use xc_is_known_page_type Olaf Hering
2021-06-02  6:53   ` Juergen Gross
2021-06-01 16:10 ` [PATCH v20210601 07/38] tools: unify type checking for data pfns in migration stream Olaf Hering
2021-06-02  6:59   ` Juergen Gross
2021-06-02 11:21     ` Olaf Hering
2021-06-02 12:03       ` Juergen Gross
2021-06-07 10:12         ` Olaf Hering
2021-06-07 10:22           ` Juergen Gross
2021-06-18 12:25     ` Olaf Hering
2021-06-01 16:10 ` [PATCH v20210601 08/38] tools: show migration transfer rate in send_dirty_pages Olaf Hering
2021-06-02  7:10   ` Juergen Gross
2021-06-08  8:58     ` Olaf Hering
2021-06-08 10:07       ` Juergen Gross
2021-06-01 16:10 ` [PATCH v20210601 09/38] tools/guest: prepare to allocate arrays once Olaf Hering
2021-06-02  7:29   ` Juergen Gross [this message]
2021-06-02 12:03     ` Olaf Hering
2021-06-02 12:09       ` Juergen Gross
2021-06-01 16:10 ` [PATCH v20210601 10/38] tools/guest: save: move batch_pfns Olaf Hering
2021-06-02  7:31   ` Juergen Gross
2021-06-01 16:10 ` [PATCH v20210601 11/38] tools/guest: save: move mfns array Olaf Hering
2021-06-02  7:32   ` Juergen Gross
2021-06-01 16:10 ` [PATCH v20210601 12/38] tools/guest: save: move types array Olaf Hering
2021-06-02  7:32   ` Juergen Gross
2021-06-01 16:10 ` [PATCH v20210601 13/38] tools/guest: save: move errors array Olaf Hering
2021-06-02  7:33   ` Juergen Gross
2021-06-01 16:10 ` [PATCH v20210601 14/38] tools/guest: save: move iov array Olaf Hering
2021-06-02  7:34   ` Juergen Gross
2021-06-01 16:10 ` [PATCH v20210601 15/38] tools/guest: save: move rec_pfns array Olaf Hering
2021-06-02  7:35   ` Juergen Gross
2021-06-01 16:10 ` [PATCH v20210601 16/38] tools/guest: save: move guest_data array Olaf Hering
2021-06-02  7:39   ` Juergen Gross
2021-06-01 16:10 ` [PATCH v20210601 17/38] tools/guest: save: move local_pages array Olaf Hering
2021-06-02  7:47   ` Juergen Gross
2021-06-01 16:10 ` [PATCH v20210601 18/38] tools/guest: restore: move pfns array Olaf Hering
2021-06-02  7:55   ` Juergen Gross
2021-06-01 16:10 ` [PATCH v20210601 19/38] tools/guest: restore: move types array Olaf Hering
2021-06-02  7:56   ` Juergen Gross
2021-06-01 16:11 ` [PATCH v20210601 20/38] tools/guest: restore: move mfns array Olaf Hering
2021-06-02  7:57   ` Juergen Gross
2021-06-01 16:11 ` [PATCH v20210601 21/38] tools/guest: restore: move map_errs array Olaf Hering
2021-06-02  7:58   ` Juergen Gross
2021-06-01 16:11 ` [PATCH v20210601 22/38] tools/guest: restore: move mfns array in populate_pfns Olaf Hering
2021-06-02  7:59   ` Juergen Gross
2021-06-01 16:11 ` [PATCH v20210601 23/38] tools/guest: restore: move pfns " Olaf Hering
2021-06-02  7:59   ` Juergen Gross
2021-06-01 16:11 ` [PATCH v20210601 24/38] tools/guest: restore: split record processing Olaf Hering
2021-06-02  9:57   ` Juergen Gross
2021-06-01 16:11 ` [PATCH v20210601 25/38] tools/guest: restore: split handle_page_data Olaf Hering
2021-06-01 16:11 ` [PATCH v20210601 26/38] tools/guest: restore: write data directly into guest Olaf Hering
2021-06-01 16:11 ` [PATCH v20210601 27/38] tools: recognize LIBXL_API_VERSION for 4.16 Olaf Hering
2021-06-01 16:11 ` [PATCH v20210601 28/38] tools: adjust libxl_domain_suspend to receive a struct props Olaf Hering
2021-06-01 16:11 ` [PATCH v20210601 29/38] tools: change struct precopy_stats to precopy_stats_t Olaf Hering
2021-06-01 16:11 ` [PATCH v20210601 30/38] tools: add callback to libxl for precopy_policy and precopy_stats_t Olaf Hering
2021-06-01 16:11 ` [PATCH v20210601 31/38] tools: add --max_iters to libxl_domain_suspend Olaf Hering
2021-06-01 16:11 ` [PATCH v20210601 32/38] tools: add --min_remaining " Olaf Hering
2021-06-01 16:11 ` [PATCH v20210601 33/38] tools: add --abort_if_busy " Olaf Hering
2021-06-01 16:11 ` [PATCH v20210601 34/38] tools: add API for expandable bitmaps Olaf Hering
2021-06-01 16:11 ` [PATCH v20210601 35/38] tools: use xg_sr_bitmap for populated_pfns Olaf Hering
2021-06-01 16:11 ` [PATCH v20210601 36/38] tools: use superpages during restore of HVM guest Olaf Hering
2021-06-01 16:11 ` [PATCH v20210601 37/38] tools: remove migration stream verify code Olaf Hering
2021-06-01 16:11 ` [PATCH v20210601 38/38] hotplug/Linux: fix starting of xenstored with restarting systemd Olaf Hering
2021-06-02  6:10 ` [PATCH v20210601 00/38] leftover from 2020 Juergen Gross
2021-06-02  6:54   ` Olaf Hering
2021-06-02  7:00     ` Juergen Gross
2021-06-02 12:07       ` Olaf Hering
2021-06-02 12:15         ` Juergen Gross

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=531fe9c5-aa7f-be99-5d78-85d817139740@suse.com \
    --to=jgross@suse.com \
    --cc=iwj@xenproject.org \
    --cc=olaf@aepfle.de \
    --cc=wl@xen.org \
    --cc=xen-devel@lists.xenproject.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).