Vladimir Sementsov-Ogievskiy <vsement...@virtuozzo.com> writes:

> On 03.02.2016 18:42, Markus Armbruster wrote:
>> Eric Blake <ebl...@redhat.com> writes:
>>
>>> On 01/27/2016 11:51 PM, Vladimir Sementsov-Ogievskiy wrote:
>>>> 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 <vsement...@virtuozzo.com>
>>>> Signed-off-by: Denis V. Lunev <d...@openvz.org>
>>>> CC: Stefan Hajnoczi <stefa...@redhat.com>
>>>> CC: Xiao Guangrong <guangrong.x...@linux.intel.com>
>>>> CC: "Michael S. Tsirkin" <m...@redhat.com>
>>>> CC: Igor Mammedov <imamm...@redhat.com>
>>>> CC: Eric Blake <ebl...@redhat.com>
>>>> CC: Markus Armbruster <arm...@redhat.com>
>>>> ---
>>>> @@ -308,7 +309,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 (strcmp(value->u.dimm->type, TYPE_NVDIMM)) {
>>> If you fix 2/3 to use a QAPI enum, then this will be an integer compare
>>> instead of a strcmp().
>> Another option is to add a flag to the subtypes of TYPE_PC_DIMM, set it
>> for the subtypes that should be counted here, and accumulate the sizes
>> of devices where the flag is set.  Requires iterating directly over the
>> devices here (like qmp_pc_dimm_device_list() does under the hood) rather
>> than the MemoryDeviceInfoList returned by qmp_pc_dimm_device_list(),
> It was my first approach but it was rejected)
>
> As another option I can make a function iterating over the devices and
> return list of them, and then use it instead of
> qmp_pc_dimm_device_list.. Then, I'll have pointers to devices and can
> use object_dynamic_cast.

I fail to see how splitting a tree walk doing stuff into a tree walk
creating a list and a list walk doing stuff makes things better :)

Anyway, you guys figure it out.  The only part where I get involved is
QAPI design.

Reply via email to