Message ID | 1453901069-18091-3-git-send-email-den@openvz.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Wed, 27 Jan 2016 16:24:29 +0300 "Denis V. Lunev" <den@openvz.org> wrote: suggest to change subj to: don't use NVDIMM for balooning > From: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> > > NVDIMM for now is planned to use as a backing store for DAX filesystem > in the guest and thus this memory is excluded from guest memory > management > and LRUs. > > In this case libvirt running QEMU along with configured balloon almost > immediately inflates balloon and effectively kill the guest as > qemu counts nvdimm as part of the ram. > > Counting dimm devices as part of the ram for ballooning was started from > commit 463756d03: > virtio-balloon: Fix balloon not working correctly when hotplug memory > > Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> > Signed-off-by: Denis V. Lunev <den@openvz.org> > CC: Stefan Hajnoczi <stefanha@redhat.com> > CC: Xiao Guangrong <guangrong.xiao@linux.intel.com> > CC: "Michael S. Tsirkin" <mst@redhat.com> > CC: Igor Mammedov <imammedo@redhat.com> > CC: Eric Blake <eblake@redhat.com> > CC: Markus Armbruster <armbru@redhat.com> > --- > hw/mem/pc-dimm.c | 2 ++ > hw/virtio/virtio-balloon.c | 4 +++- > qapi-schema.json | 5 ++++- > 3 files changed, 9 insertions(+), 2 deletions(-) > > diff --git a/hw/mem/pc-dimm.c b/hw/mem/pc-dimm.c > index 4f30950..2ff9f95 100644 > --- a/hw/mem/pc-dimm.c > +++ b/hw/mem/pc-dimm.c > @@ -19,6 +19,7 @@ > */ > > #include "hw/mem/pc-dimm.h" > +#include "hw/mem/nvdimm.h" > #include "qemu/config-file.h" > #include "qapi/visitor.h" > #include "qemu/range.h" > @@ -178,6 +179,7 @@ int qmp_pc_dimm_device_list(Object *obj, void *opaque) > di->size = object_property_get_int(OBJECT(dimm), PC_DIMM_SIZE_PROP, > NULL); > di->memdev = object_get_canonical_path(OBJECT(dimm->hostmem)); > + di->balloonable = (object_dynamic_cast(obj, TYPE_NVDIMM) == NULL); I don't think that balloonable is property of DIMM and that it should be displayed by MemoryDeviceInfo. I'd drop this + the last hunk and put check directly into get_current_ram_size() in this patch. And another path on top that adds 'type' to PCDIMMDeviceInfo and shows it in hmp_info_memory_devices() so that management tools/users would be able to distinguish entries. > > info->u.dimm = di; > elem->value = info; > diff --git a/hw/virtio/virtio-balloon.c b/hw/virtio/virtio-balloon.c > index 6a4c4d2..0a3de75 100644 > --- a/hw/virtio/virtio-balloon.c > +++ b/hw/virtio/virtio-balloon.c > @@ -308,7 +308,9 @@ static ram_addr_t get_current_ram_size(void) > if (value) { > switch (value->type) { > case MEMORY_DEVICE_INFO_KIND_DIMM: > - size += value->u.dimm->size; > + if (value->u.dimm->balloonable) { > + size += value->u.dimm->size; > + } > break; > default: > break; > diff --git a/qapi-schema.json b/qapi-schema.json > index 8d04897..5934f81 100644 > --- a/qapi-schema.json > +++ b/qapi-schema.json > @@ -3924,6 +3924,8 @@ > # > # @hotpluggable: true if device if could be added/removed while machine is running > # > +# @balloonable: true if device take part in ballooning (since 2.6) > +# > # Since: 2.1 > ## > { 'struct': 'PCDIMMDeviceInfo', > @@ -3934,7 +3936,8 @@ > 'node': 'int', > 'memdev': 'str', > 'hotplugged': 'bool', > - 'hotpluggable': 'bool' > + 'hotpluggable': 'bool', > + 'balloonable': 'bool' > } > } >
On 01/27/2016 06:24 AM, Denis V. Lunev wrote: > From: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> > > NVDIMM for now is planned to use as a backing store for DAX filesystem > in the guest and thus this memory is excluded from guest memory > management > and LRUs. Intentional mid-line break? > > In this case libvirt running QEMU along with configured balloon almost > immediately inflates balloon and effectively kill the guest as > qemu counts nvdimm as part of the ram. > > Counting dimm devices as part of the ram for ballooning was started from > commit 463756d03: > virtio-balloon: Fix balloon not working correctly when hotplug memory > > Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> > Signed-off-by: Denis V. Lunev <den@openvz.org> > CC: Stefan Hajnoczi <stefanha@redhat.com> > CC: Xiao Guangrong <guangrong.xiao@linux.intel.com> > CC: "Michael S. Tsirkin" <mst@redhat.com> > CC: Igor Mammedov <imammedo@redhat.com> > CC: Eric Blake <eblake@redhat.com> > CC: Markus Armbruster <armbru@redhat.com> > --- > hw/mem/pc-dimm.c | 2 ++ > hw/virtio/virtio-balloon.c | 4 +++- > qapi-schema.json | 5 ++++- > 3 files changed, 9 insertions(+), 2 deletions(-) > > diff --git a/hw/mem/pc-dimm.c b/hw/mem/pc-dimm.c > index 4f30950..2ff9f95 100644 > --- a/hw/mem/pc-dimm.c > +++ b/hw/mem/pc-dimm.c > @@ -19,6 +19,7 @@ > */ > > #include "hw/mem/pc-dimm.h" > +#include "hw/mem/nvdimm.h" > #include "qemu/config-file.h" > #include "qapi/visitor.h" > #include "qemu/range.h" > @@ -178,6 +179,7 @@ int qmp_pc_dimm_device_list(Object *obj, void *opaque) > di->size = object_property_get_int(OBJECT(dimm), PC_DIMM_SIZE_PROP, > NULL); > di->memdev = object_get_canonical_path(OBJECT(dimm->hostmem)); > + di->balloonable = (object_dynamic_cast(obj, TYPE_NVDIMM) == NULL); The outer () seem spurious to me; I might have shortened this to: di->balloonable = !object_dynamic_cast(obj, TYPE_NVDIMM); > +++ b/qapi-schema.json > @@ -3924,6 +3924,8 @@ > # > # @hotpluggable: true if device if could be added/removed while machine is running > # > +# @balloonable: true if device take part in ballooning (since 2.6) s/take/takes/
diff --git a/hw/mem/pc-dimm.c b/hw/mem/pc-dimm.c index 4f30950..2ff9f95 100644 --- a/hw/mem/pc-dimm.c +++ b/hw/mem/pc-dimm.c @@ -19,6 +19,7 @@ */ #include "hw/mem/pc-dimm.h" +#include "hw/mem/nvdimm.h" #include "qemu/config-file.h" #include "qapi/visitor.h" #include "qemu/range.h" @@ -178,6 +179,7 @@ int qmp_pc_dimm_device_list(Object *obj, void *opaque) di->size = object_property_get_int(OBJECT(dimm), PC_DIMM_SIZE_PROP, NULL); di->memdev = object_get_canonical_path(OBJECT(dimm->hostmem)); + di->balloonable = (object_dynamic_cast(obj, TYPE_NVDIMM) == NULL); info->u.dimm = di; elem->value = info; diff --git a/hw/virtio/virtio-balloon.c b/hw/virtio/virtio-balloon.c index 6a4c4d2..0a3de75 100644 --- a/hw/virtio/virtio-balloon.c +++ b/hw/virtio/virtio-balloon.c @@ -308,7 +308,9 @@ static ram_addr_t get_current_ram_size(void) if (value) { switch (value->type) { case MEMORY_DEVICE_INFO_KIND_DIMM: - size += value->u.dimm->size; + if (value->u.dimm->balloonable) { + size += value->u.dimm->size; + } break; default: break; diff --git a/qapi-schema.json b/qapi-schema.json index 8d04897..5934f81 100644 --- a/qapi-schema.json +++ b/qapi-schema.json @@ -3924,6 +3924,8 @@ # # @hotpluggable: true if device if could be added/removed while machine is running # +# @balloonable: true if device take part in ballooning (since 2.6) +# # Since: 2.1 ## { 'struct': 'PCDIMMDeviceInfo', @@ -3934,7 +3936,8 @@ 'node': 'int', 'memdev': 'str', 'hotplugged': 'bool', - 'hotpluggable': 'bool' + 'hotpluggable': 'bool', + 'balloonable': 'bool' } }