[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 06/15] postcopy: Record largest page size
From: |
Juan Quintela |
Subject: |
Re: [Qemu-devel] [PATCH 06/15] postcopy: Record largest page size |
Date: |
Wed, 25 Jan 2017 11:17:12 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/25.1 (gnu/linux) |
"Dr. David Alan Gilbert (git)" <address@hidden> wrote:
> From: "Dr. David Alan Gilbert" <address@hidden>
>
> Record the largest page size in use; we'll need it soon for allocating
> temporary buffers.
>
> Signed-off-by: Dr. David Alan Gilbert <address@hidden>
Not that I object, but .... could we store this in ram_list, and update it
it at RAMBlock creation time? Why searh for the value later when we can
store it from the beggining. Instead of putting it on migration_state,
put it on the ram_list itself?
Later, Juan.
> ---
> exec.c | 13 +++++++++++++
> include/exec/cpu-common.h | 1 +
> include/migration/migration.h | 1 +
> migration/migration.c | 1 +
> 4 files changed, 16 insertions(+)
>
> diff --git a/exec.c b/exec.c
> index 8d4bb0e..69331d0 100644
> --- a/exec.c
> +++ b/exec.c
> @@ -1485,6 +1485,19 @@ size_t qemu_ram_pagesize(RAMBlock *rb)
> return rb->page_size;
> }
>
> +/* Returns the largest size of page in use */
> +size_t qemu_ram_pagesize_largest(void)
> +{
> + RAMBlock *block;
> + size_t largest = 0;
> +
> + QLIST_FOREACH_RCU(block, &ram_list.blocks, next) {
> + largest = MAX(largest, qemu_ram_pagesize(block));
> + }
> +
> + return largest;
> +}
> +
> static int memory_try_enable_merging(void *addr, size_t len)
> {
> if (!machine_mem_merge(current_machine)) {
> diff --git a/include/exec/cpu-common.h b/include/exec/cpu-common.h
> index bd15853..0e67727 100644
> --- a/include/exec/cpu-common.h
> +++ b/include/exec/cpu-common.h
> @@ -64,6 +64,7 @@ void qemu_ram_set_idstr(RAMBlock *block, const char *name,
> DeviceState *dev);
> void qemu_ram_unset_idstr(RAMBlock *block);
> const char *qemu_ram_get_idstr(RAMBlock *rb);
> size_t qemu_ram_pagesize(RAMBlock *block);
> +size_t qemu_ram_pagesize_largest(void);
>
> void cpu_physical_memory_rw(hwaddr addr, uint8_t *buf,
> int len, int is_write);
> diff --git a/include/migration/migration.h b/include/migration/migration.h
> index 0188bcf..7b311dd 100644
> --- a/include/migration/migration.h
> +++ b/include/migration/migration.h
> @@ -89,6 +89,7 @@ struct MigrationIncomingState {
> */
> QemuEvent main_thread_load_event;
>
> + size_t largest_page_size;
> bool have_fault_thread;
> QemuThread fault_thread;
> QemuSemaphore fault_thread_sem;
> diff --git a/migration/migration.c b/migration/migration.c
> index f498ab8..d8dafde 100644
> --- a/migration/migration.c
> +++ b/migration/migration.c
> @@ -387,6 +387,7 @@ static void process_incoming_migration_co(void *opaque)
> int ret;
>
> mis = migration_incoming_state_new(f);
> + mis->largest_page_size = qemu_ram_pagesize_largest();
> postcopy_state_set(POSTCOPY_INCOMING_NONE);
> migrate_set_state(&mis->state, MIGRATION_STATUS_NONE,
> MIGRATION_STATUS_ACTIVE);
[Qemu-devel] [PATCH 08/15] postcopy: Use temporary for placing zero huge pages, Dr. David Alan Gilbert (git), 2017/01/06
[Qemu-devel] [PATCH 07/15] postcopy: Plumb pagesize down into place helpers, Dr. David Alan Gilbert (git), 2017/01/06
[Qemu-devel] [PATCH 09/15] postcopy: Load huge pages in one go, Dr. David Alan Gilbert (git), 2017/01/06
[Qemu-devel] [PATCH 10/15] postcopy: Mask fault addresses to huge page boundary, Dr. David Alan Gilbert (git), 2017/01/06