qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v7 26/42] postcopy: Incoming initialisation


From: Juan Quintela
Subject: Re: [Qemu-devel] [PATCH v7 26/42] postcopy: Incoming initialisation
Date: Mon, 13 Jul 2015 14:04:34 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.5 (gnu/linux)

"Dr. David Alan Gilbert (git)" <address@hidden> wrote:
> From: "Dr. David Alan Gilbert" <address@hidden>
>
> Signed-off-by: Dr. David Alan Gilbert <address@hidden>
> Reviewed-by: David Gibson <address@hidden>
> ---
>  include/migration/migration.h    |   3 +
>  include/migration/postcopy-ram.h |  12 ++++
>  migration/postcopy-ram.c         | 116 
> +++++++++++++++++++++++++++++++++++++++
>  migration/ram.c                  |  11 ++++
>  migration/savevm.c               |   4 ++
>  trace-events                     |   2 +
>  6 files changed, 148 insertions(+)
>

qemu_hugepage_enable(host_addr, length)?

> +#ifdef MADV_NOHUGEPAGE
> +    if (madvise(host_addr, length, MADV_NOHUGEPAGE)) {
> +        error_report("%s: NOHUGEPAGE: %s", __func__, strerror(errno));
> +        return -1;
> +    }
> +#endif

qemu_hugepage_disable(host_addr, length)?
> +#ifdef MADV_HUGEPAGE
> +    if (madvise(host_addr, length, MADV_HUGEPAGE)) {
> +        error_report("%s HUGEPAGE: %s", __func__, strerror(errno));
> +        return -1;
> +    }
> +#endif
> +
> +    /*
> +     * We can also turn off userfault now since we should have all the
> +     * pages.   It can be useful to leave it on to debug postcopy
> +     * if you're not sure it's always getting every page.
> +     */

qemu_userfault_unregister(host_addr, length)?

> +    range_struct.start = (uintptr_t)host_addr;
> +    range_struct.len = length;
> +
> +    if (ioctl(mis->userfault_fd, UFFDIO_UNREGISTER, &range_struct)) {
> +        error_report("%s: userfault unregister %s", __func__, 
> strerror(errno));
> +
> +        return -1;
> +    }

>  
> +/*
> + * Allocate data structures etc needed by incoming migration with 
> postcopy-ram
> + * postcopy-ram's similarly names postcopy_ram_incoming_init does the work
> + */
> +int ram_postcopy_incoming_init(MigrationIncomingState *mis)
> +{
> +    size_t ram_pages = last_ram_offset() >> TARGET_PAGE_BITS;
> +
> +    return postcopy_ram_incoming_init(mis, ram_pages);
> +}
> +

ram_postocpy_incoming_init()
and
postcopy_ram_incoming_init()

ouch  Thinking about better names ....



>  static int ram_load(QEMUFile *f, void *opaque, int version_id)
>  {
>      int flags = 0, ret = 0;
> diff --git a/migration/savevm.c b/migration/savevm.c
> index e6398dd..f4de52d 100644
> --- a/migration/savevm.c
> +++ b/migration/savevm.c
> @@ -1238,6 +1238,10 @@ static int 
> loadvm_postcopy_handle_advise(MigrationIncomingState *mis,
>          return -1;
>      }
>  
> +    if (ram_postcopy_incoming_init(mis)) {
> +        return -1;
> +    }
> +

how/where we know that this is called soon enough?

>      postcopy_state_set(mis, POSTCOPY_INCOMING_ADVISE);
>  
>      return 0;
> diff --git a/trace-events b/trace-events
> index 5e8a120..2ffc1c6 100644
> --- a/trace-events
> +++ b/trace-events
> @@ -1498,7 +1498,9 @@ 
> rdma_start_outgoing_migration_after_rdma_source_init(void) ""
>  
>  # migration/postcopy-ram.c
>  postcopy_discard_send_finish(const char *ramblock, int nwords, int ncmds) 
> "%s mask words sent=%d in %d commands"
> +postcopy_cleanup_area(const char *ramblock, void *host_addr, size_t offset, 
> size_t length) "%s: %p offset=%zx length=%zx"
>  postcopy_ram_discard_range(void *start, void *end) "%p,%p"
> +postcopy_init_area(const char *ramblock, void *host_addr, size_t offset, 
> size_t length) "%s: %p offset=%zx length=%zx"

once here, if we have range names before, what about:

postcopy_ram_cleanup_range()
postcopy_ram_init_range()

And let the ram* functions the same?



reply via email to

[Prev in Thread] Current Thread [Next in Thread]