All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH qemu] vmstate: Define VARRAY with VMS_ALLOC
@ 2016-03-15  3:17 Alexey Kardashevskiy
  2016-03-15 12:01 ` Dr. David Alan Gilbert
  2016-03-21  6:25 ` Alexey Kardashevskiy
  0 siblings, 2 replies; 6+ messages in thread
From: Alexey Kardashevskiy @ 2016-03-15  3:17 UTC (permalink / raw)
  To: qemu-devel; +Cc: Alexey Kardashevskiy, David Gibson, Juan Quintela

This allows dynamic allocation for migrating arrays.

Already existing VMSTATE_VARRAY_UINT32 requires an array to be
pre-allocated, however there are cases when the size is not known in
advance and there is no real need to enforce it.

This defines another variant of VMSTATE_VARRAY_UINT32 with WMS_ALLOC
flag which tells the receiving side to allocate memory for the array
before receiving the data.

The first user of it is the "pseries" machine (POWER8) with
dynamic DMA windows which existence and size are totally dynamic.

Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
Reviewed-by: Thomas Huth <thuth@redhat.com>
---


As David suggested, I am posting it alone (separately from the DDW patchset).

It would be nice either to get "ack" to get this pulled via the powerpc
tree or get it pulled to the upstream via some other tree. Thanks!



---
 include/migration/vmstate.h | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/include/migration/vmstate.h b/include/migration/vmstate.h
index 84ee355..1622638 100644
--- a/include/migration/vmstate.h
+++ b/include/migration/vmstate.h
@@ -386,6 +386,16 @@ extern const VMStateInfo vmstate_info_bitmap;
     .offset     = vmstate_offset_pointer(_state, _field, _type),     \
 }
 
+#define VMSTATE_VARRAY_UINT32_ALLOC(_field, _state, _field_num, _version, _info, _type) {\
+    .name       = (stringify(_field)),                               \
+    .version_id = (_version),                                        \
+    .num_offset = vmstate_offset_value(_state, _field_num, uint32_t),\
+    .info       = &(_info),                                          \
+    .size       = sizeof(_type),                                     \
+    .flags      = VMS_VARRAY_UINT32|VMS_POINTER|VMS_ALLOC,           \
+    .offset     = vmstate_offset_pointer(_state, _field, _type),     \
+}
+
 #define VMSTATE_VARRAY_UINT16_UNSAFE(_field, _state, _field_num, _version, _info, _type) {\
     .name       = (stringify(_field)),                               \
     .version_id = (_version),                                        \
-- 
2.5.0.rc3

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [Qemu-devel] [PATCH qemu] vmstate: Define VARRAY with VMS_ALLOC
  2016-03-15  3:17 [Qemu-devel] [PATCH qemu] vmstate: Define VARRAY with VMS_ALLOC Alexey Kardashevskiy
@ 2016-03-15 12:01 ` Dr. David Alan Gilbert
  2016-03-16  0:37   ` David Gibson
  2016-03-21  6:25 ` Alexey Kardashevskiy
  1 sibling, 1 reply; 6+ messages in thread
From: Dr. David Alan Gilbert @ 2016-03-15 12:01 UTC (permalink / raw)
  To: Alexey Kardashevskiy; +Cc: Juan Quintela, qemu-devel, David Gibson

* Alexey Kardashevskiy (aik@ozlabs.ru) wrote:
> This allows dynamic allocation for migrating arrays.
> 
> Already existing VMSTATE_VARRAY_UINT32 requires an array to be
> pre-allocated, however there are cases when the size is not known in
> advance and there is no real need to enforce it.
> 
> This defines another variant of VMSTATE_VARRAY_UINT32 with WMS_ALLOC
> flag which tells the receiving side to allocate memory for the array
> before receiving the data.
> 
> The first user of it is the "pseries" machine (POWER8) with
> dynamic DMA windows which existence and size are totally dynamic.

You say totally dynamic, how big do they get out of interest?

Dave

> 
> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
> Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
> Reviewed-by: Thomas Huth <thuth@redhat.com>
> ---
> 
> 
> As David suggested, I am posting it alone (separately from the DDW patchset).
> 
> It would be nice either to get "ack" to get this pulled via the powerpc
> tree or get it pulled to the upstream via some other tree. Thanks!
> 
> 
> 
> ---
>  include/migration/vmstate.h | 10 ++++++++++
>  1 file changed, 10 insertions(+)
> 
> diff --git a/include/migration/vmstate.h b/include/migration/vmstate.h
> index 84ee355..1622638 100644
> --- a/include/migration/vmstate.h
> +++ b/include/migration/vmstate.h
> @@ -386,6 +386,16 @@ extern const VMStateInfo vmstate_info_bitmap;
>      .offset     = vmstate_offset_pointer(_state, _field, _type),     \
>  }
>  
> +#define VMSTATE_VARRAY_UINT32_ALLOC(_field, _state, _field_num, _version, _info, _type) {\
> +    .name       = (stringify(_field)),                               \
> +    .version_id = (_version),                                        \
> +    .num_offset = vmstate_offset_value(_state, _field_num, uint32_t),\
> +    .info       = &(_info),                                          \
> +    .size       = sizeof(_type),                                     \
> +    .flags      = VMS_VARRAY_UINT32|VMS_POINTER|VMS_ALLOC,           \
> +    .offset     = vmstate_offset_pointer(_state, _field, _type),     \
> +}
> +
>  #define VMSTATE_VARRAY_UINT16_UNSAFE(_field, _state, _field_num, _version, _info, _type) {\
>      .name       = (stringify(_field)),                               \
>      .version_id = (_version),                                        \
> -- 
> 2.5.0.rc3
> 
> 
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [Qemu-devel] [PATCH qemu] vmstate: Define VARRAY with VMS_ALLOC
  2016-03-15 12:01 ` Dr. David Alan Gilbert
@ 2016-03-16  0:37   ` David Gibson
  2016-03-16  9:07     ` Dr. David Alan Gilbert
  0 siblings, 1 reply; 6+ messages in thread
From: David Gibson @ 2016-03-16  0:37 UTC (permalink / raw)
  To: Dr. David Alan Gilbert; +Cc: Alexey Kardashevskiy, qemu-devel, Juan Quintela

[-- Attachment #1: Type: text/plain, Size: 3141 bytes --]

On Tue, Mar 15, 2016 at 12:01:04PM +0000, Dr. David Alan Gilbert wrote:
> * Alexey Kardashevskiy (aik@ozlabs.ru) wrote:
> > This allows dynamic allocation for migrating arrays.
> > 
> > Already existing VMSTATE_VARRAY_UINT32 requires an array to be
> > pre-allocated, however there are cases when the size is not known in
> > advance and there is no real need to enforce it.
> > 
> > This defines another variant of VMSTATE_VARRAY_UINT32 with WMS_ALLOC
> > flag which tells the receiving side to allocate memory for the array
> > before receiving the data.
> > 
> > The first user of it is the "pseries" machine (POWER8) with
> > dynamic DMA windows which existence and size are totally dynamic.
> 
> You say totally dynamic, how big do they get out of interest?

They're basically used to map all guest RAM.  Typically we'd be
looking at one 64-bit TCE per 64K guest page, so we'd be looking at
1/8192th of RAM size.

Since we can in theory have guests in the 1T+ range, that might start
getting pretty big, so we probably should look at incremental transfer
of the TCE tables at some point.

> 
> Dave
> 
> > 
> > Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
> > Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
> > Reviewed-by: Thomas Huth <thuth@redhat.com>
> > ---
> > 
> > 
> > As David suggested, I am posting it alone (separately from the DDW patchset).
> > 
> > It would be nice either to get "ack" to get this pulled via the powerpc
> > tree or get it pulled to the upstream via some other tree. Thanks!
> > 
> > 
> > 
> > ---
> >  include/migration/vmstate.h | 10 ++++++++++
> >  1 file changed, 10 insertions(+)
> > 
> > diff --git a/include/migration/vmstate.h b/include/migration/vmstate.h
> > index 84ee355..1622638 100644
> > --- a/include/migration/vmstate.h
> > +++ b/include/migration/vmstate.h
> > @@ -386,6 +386,16 @@ extern const VMStateInfo vmstate_info_bitmap;
> >      .offset     = vmstate_offset_pointer(_state, _field, _type),     \
> >  }
> >  
> > +#define VMSTATE_VARRAY_UINT32_ALLOC(_field, _state, _field_num, _version, _info, _type) {\
> > +    .name       = (stringify(_field)),                               \
> > +    .version_id = (_version),                                        \
> > +    .num_offset = vmstate_offset_value(_state, _field_num, uint32_t),\
> > +    .info       = &(_info),                                          \
> > +    .size       = sizeof(_type),                                     \
> > +    .flags      = VMS_VARRAY_UINT32|VMS_POINTER|VMS_ALLOC,           \
> > +    .offset     = vmstate_offset_pointer(_state, _field, _type),     \
> > +}
> > +
> >  #define VMSTATE_VARRAY_UINT16_UNSAFE(_field, _state, _field_num, _version, _info, _type) {\
> >      .name       = (stringify(_field)),                               \
> >      .version_id = (_version),                                        \

-- 
David Gibson			| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you.  NOT _the_ _other_
				| _way_ _around_!
http://www.ozlabs.org/~dgibson

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [Qemu-devel] [PATCH qemu] vmstate: Define VARRAY with VMS_ALLOC
  2016-03-16  0:37   ` David Gibson
@ 2016-03-16  9:07     ` Dr. David Alan Gilbert
  2016-03-16 22:32       ` David Gibson
  0 siblings, 1 reply; 6+ messages in thread
From: Dr. David Alan Gilbert @ 2016-03-16  9:07 UTC (permalink / raw)
  To: David Gibson; +Cc: Alexey Kardashevskiy, qemu-devel, Juan Quintela

* David Gibson (david@gibson.dropbear.id.au) wrote:
> On Tue, Mar 15, 2016 at 12:01:04PM +0000, Dr. David Alan Gilbert wrote:
> > * Alexey Kardashevskiy (aik@ozlabs.ru) wrote:
> > > This allows dynamic allocation for migrating arrays.
> > > 
> > > Already existing VMSTATE_VARRAY_UINT32 requires an array to be
> > > pre-allocated, however there are cases when the size is not known in
> > > advance and there is no real need to enforce it.
> > > 
> > > This defines another variant of VMSTATE_VARRAY_UINT32 with WMS_ALLOC
> > > flag which tells the receiving side to allocate memory for the array
> > > before receiving the data.
> > > 
> > > The first user of it is the "pseries" machine (POWER8) with
> > > dynamic DMA windows which existence and size are totally dynamic.
> > 
> > You say totally dynamic, how big do they get out of interest?
> 
> They're basically used to map all guest RAM.  Typically we'd be
> looking at one 64-bit TCE per 64K guest page, so we'd be looking at
> 1/8192th of RAM size.
> 
> Since we can in theory have guests in the 1T+ range, that might start
> getting pretty big, so we probably should look at incremental transfer
> of the TCE tables at some point.

OK, you probably need to bump up MAX_VM_CMD_PACKAGED_SIZE (sysemu.h)
which is an arbitrary size limit for postcopies device data; it's currently
16MB.  It's just there to stop anything silly, so just turn it up a bit.

However, if it is fixed at one 64-bit TCE per guest page, why do you
need to dynamically allocate it during migration load, can't you
statically allocate once you know guests memory size?

Dave

> 
> > 
> > Dave
> > 
> > > 
> > > Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
> > > Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
> > > Reviewed-by: Thomas Huth <thuth@redhat.com>
> > > ---
> > > 
> > > 
> > > As David suggested, I am posting it alone (separately from the DDW patchset).
> > > 
> > > It would be nice either to get "ack" to get this pulled via the powerpc
> > > tree or get it pulled to the upstream via some other tree. Thanks!
> > > 
> > > 
> > > 
> > > ---
> > >  include/migration/vmstate.h | 10 ++++++++++
> > >  1 file changed, 10 insertions(+)
> > > 
> > > diff --git a/include/migration/vmstate.h b/include/migration/vmstate.h
> > > index 84ee355..1622638 100644
> > > --- a/include/migration/vmstate.h
> > > +++ b/include/migration/vmstate.h
> > > @@ -386,6 +386,16 @@ extern const VMStateInfo vmstate_info_bitmap;
> > >      .offset     = vmstate_offset_pointer(_state, _field, _type),     \
> > >  }
> > >  
> > > +#define VMSTATE_VARRAY_UINT32_ALLOC(_field, _state, _field_num, _version, _info, _type) {\
> > > +    .name       = (stringify(_field)),                               \
> > > +    .version_id = (_version),                                        \
> > > +    .num_offset = vmstate_offset_value(_state, _field_num, uint32_t),\
> > > +    .info       = &(_info),                                          \
> > > +    .size       = sizeof(_type),                                     \
> > > +    .flags      = VMS_VARRAY_UINT32|VMS_POINTER|VMS_ALLOC,           \
> > > +    .offset     = vmstate_offset_pointer(_state, _field, _type),     \
> > > +}
> > > +
> > >  #define VMSTATE_VARRAY_UINT16_UNSAFE(_field, _state, _field_num, _version, _info, _type) {\
> > >      .name       = (stringify(_field)),                               \
> > >      .version_id = (_version),                                        \
> 
> -- 
> David Gibson			| I'll have my music baroque, and my code
> david AT gibson.dropbear.id.au	| minimalist, thank you.  NOT _the_ _other_
> 				| _way_ _around_!
> http://www.ozlabs.org/~dgibson


--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [Qemu-devel] [PATCH qemu] vmstate: Define VARRAY with VMS_ALLOC
  2016-03-16  9:07     ` Dr. David Alan Gilbert
@ 2016-03-16 22:32       ` David Gibson
  0 siblings, 0 replies; 6+ messages in thread
From: David Gibson @ 2016-03-16 22:32 UTC (permalink / raw)
  To: Dr. David Alan Gilbert; +Cc: Alexey Kardashevskiy, qemu-devel, Juan Quintela

[-- Attachment #1: Type: text/plain, Size: 2136 bytes --]

On Wed, Mar 16, 2016 at 09:07:59AM +0000, Dr. David Alan Gilbert wrote:
> * David Gibson (david@gibson.dropbear.id.au) wrote:
> > On Tue, Mar 15, 2016 at 12:01:04PM +0000, Dr. David Alan Gilbert wrote:
> > > * Alexey Kardashevskiy (aik@ozlabs.ru) wrote:
> > > > This allows dynamic allocation for migrating arrays.
> > > > 
> > > > Already existing VMSTATE_VARRAY_UINT32 requires an array to be
> > > > pre-allocated, however there are cases when the size is not known in
> > > > advance and there is no real need to enforce it.
> > > > 
> > > > This defines another variant of VMSTATE_VARRAY_UINT32 with WMS_ALLOC
> > > > flag which tells the receiving side to allocate memory for the array
> > > > before receiving the data.
> > > > 
> > > > The first user of it is the "pseries" machine (POWER8) with
> > > > dynamic DMA windows which existence and size are totally dynamic.
> > > 
> > > You say totally dynamic, how big do they get out of interest?
> > 
> > They're basically used to map all guest RAM.  Typically we'd be
> > looking at one 64-bit TCE per 64K guest page, so we'd be looking at
> > 1/8192th of RAM size.
> > 
> > Since we can in theory have guests in the 1T+ range, that might start
> > getting pretty big, so we probably should look at incremental transfer
> > of the TCE tables at some point.
> 
> OK, you probably need to bump up MAX_VM_CMD_PACKAGED_SIZE (sysemu.h)
> which is an arbitrary size limit for postcopies device data; it's currently
> 16MB.  It's just there to stop anything silly, so just turn it up a bit.
> 
> However, if it is fixed at one 64-bit TCE per guest page, why do you
> need to dynamically allocate it during migration load, can't you
> statically allocate once you know guests memory size?

So, guest memory size is what it will be in practice (with Linux
guests), but that's under the guest's control, not ours; at least in
theory it can be different.

-- 
David Gibson			| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you.  NOT _the_ _other_
				| _way_ _around_!
http://www.ozlabs.org/~dgibson

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [Qemu-devel] [PATCH qemu] vmstate: Define VARRAY with VMS_ALLOC
  2016-03-15  3:17 [Qemu-devel] [PATCH qemu] vmstate: Define VARRAY with VMS_ALLOC Alexey Kardashevskiy
  2016-03-15 12:01 ` Dr. David Alan Gilbert
@ 2016-03-21  6:25 ` Alexey Kardashevskiy
  1 sibling, 0 replies; 6+ messages in thread
From: Alexey Kardashevskiy @ 2016-03-21  6:25 UTC (permalink / raw)
  To: qemu-devel; +Cc: David Gibson, Juan Quintela

On 03/15/2016 02:17 PM, Alexey Kardashevskiy wrote:
> This allows dynamic allocation for migrating arrays.
>
> Already existing VMSTATE_VARRAY_UINT32 requires an array to be
> pre-allocated, however there are cases when the size is not known in
> advance and there is no real need to enforce it.
>
> This defines another variant of VMSTATE_VARRAY_UINT32 with WMS_ALLOC
> flag which tells the receiving side to allocate memory for the array
> before receiving the data.
>
> The first user of it is the "pseries" machine (POWER8) with
> dynamic DMA windows which existence and size are totally dynamic.
>
> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
> Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
> Reviewed-by: Thomas Huth <thuth@redhat.com>
> ---
>
>
> As David suggested, I am posting it alone (separately from the DDW patchset).
>
> It would be nice either to get "ack" to get this pulled via the powerpc
> tree or get it pulled to the upstream via some other tree. Thanks!


So what is about this patch? Ack, nack? Thanks!


>
>
> ---
>   include/migration/vmstate.h | 10 ++++++++++
>   1 file changed, 10 insertions(+)
>
> diff --git a/include/migration/vmstate.h b/include/migration/vmstate.h
> index 84ee355..1622638 100644
> --- a/include/migration/vmstate.h
> +++ b/include/migration/vmstate.h
> @@ -386,6 +386,16 @@ extern const VMStateInfo vmstate_info_bitmap;
>       .offset     = vmstate_offset_pointer(_state, _field, _type),     \
>   }
>
> +#define VMSTATE_VARRAY_UINT32_ALLOC(_field, _state, _field_num, _version, _info, _type) {\
> +    .name       = (stringify(_field)),                               \
> +    .version_id = (_version),                                        \
> +    .num_offset = vmstate_offset_value(_state, _field_num, uint32_t),\
> +    .info       = &(_info),                                          \
> +    .size       = sizeof(_type),                                     \
> +    .flags      = VMS_VARRAY_UINT32|VMS_POINTER|VMS_ALLOC,           \
> +    .offset     = vmstate_offset_pointer(_state, _field, _type),     \
> +}
> +
>   #define VMSTATE_VARRAY_UINT16_UNSAFE(_field, _state, _field_num, _version, _info, _type) {\
>       .name       = (stringify(_field)),                               \
>       .version_id = (_version),                                        \
>


-- 
Alexey

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2016-03-21  6:25 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-03-15  3:17 [Qemu-devel] [PATCH qemu] vmstate: Define VARRAY with VMS_ALLOC Alexey Kardashevskiy
2016-03-15 12:01 ` Dr. David Alan Gilbert
2016-03-16  0:37   ` David Gibson
2016-03-16  9:07     ` Dr. David Alan Gilbert
2016-03-16 22:32       ` David Gibson
2016-03-21  6:25 ` Alexey Kardashevskiy

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.