[libvirt] [PATCH v4] memtune: Let virsh know the unlimited value for memory tunables
Matthias Bolte
matthias.bolte at googlemail.com
Thu Jan 13 08:24:09 UTC 2011
2011/1/13 Nikunj A. Dadhania <nikunj at linux.vnet.ibm.com>:
> On Wed, 12 Jan 2011 10:21:04 -0700, Eric Blake <eblake at redhat.com> wrote:
>> On 01/12/2011 12:56 AM, Nikunj A. Dadhania wrote:
>> > Here is the patch, now the set calls are also ull.
>> >
>> > Still virCgroupGetMemoryUsage is not changed, this will require changes
>> > in virDomainInfoPtr (info->memory). I am not sure if I should have them
>> > in this patch.
>>
>> It can be a separate patch, if desired, but it is probably still needed.
>>
> virCgroupGetMemoryUsage is called only from lxcDomainGetInfo, that is
> the reason I thought that this change may not be needed.
>
>> > +++ b/tools/virsh.c
>> > @@ -2987,9 +2987,14 @@ cmdMemtune(vshControl * ctl, const vshCmd * cmd)
>> > params[i].value.l);
>> > break;
>> > case VIR_DOMAIN_MEMORY_PARAM_ULLONG:
>> > - vshPrint(ctl, "%-15s: %llu\n", params[i].field,
>> > - params[i].value.ul);
>> > + {
>> > + if (params[i].value.ul == VIR_DOMAIN_MEMORY_PARAM_UNLIMITED)
>> > + vshPrint(ctl, "%-15s: unlimited\n", params[i].field);
>> > + else
>> > + vshPrint(ctl, "%-15s: %llu\n", params[i].field,
>> > + params[i].value.ul);
>>
>> Do we want any back-compat considerations? That is, if a newer virsh is
>> talking to an older server, which still answered INT64_MAX>>10 instead
>> of the new VIR_DOMAIN_MEMORY_PARAM_UNLIMITED, should we recognize that
>> situation as another reason to print "unlimited"?
>>
> As Mattias suggested in the other mail, this adds more complications. My
> take is to have VIR_DOMAIN_MEMORY_PARAM_UNLIMITED as the max value.
>
> Here is the patch which adds setting as well as displaying the
> "unlimited" values. Now in virsh to specify "unlimited" the user would
> need to pass "-1"
>
> for example:
> virsh # memtune lxcbb1 --hard-limit -1
>
> From: Nikunj A. Dadhania <nikunj at linux.vnet.ibm.com>
>
> Display and set unlimited when the memory cgroup settings. Unlimited is
> represented by INT64_MAX in memory cgroup.
>
> v4: Fix handling of setting unlimited values
> v3: Make virCgroupSet memory call ull
>
> Signed-off-by: Nikunj A. Dadhania <nikunj at linux.vnet.ibm.com>
> Reported-by: Justin Clift <jclift at redhat.com>
> ---
> include/libvirt/libvirt.h.in | 1
> src/lxc/lxc_driver.c | 2 -
> src/qemu/qemu_driver.c | 2 -
> src/util/cgroup.c | 93 +++++++++++++++++++++++++++++++-----------
> src/util/cgroup.h | 14 +++---
> tools/virsh.c | 13 +++++-
> 6 files changed, 90 insertions(+), 35 deletions(-)
>
> diff --git a/include/libvirt/libvirt.h.in b/include/libvirt/libvirt.h.in
> index 3c6a54a..3ee47b9 100644
> --- a/include/libvirt/libvirt.h.in
> +++ b/include/libvirt/libvirt.h.in
> @@ -696,6 +696,7 @@ typedef enum {
> */
>
> #define VIR_DOMAIN_MEMORY_FIELD_LENGTH 80
> +#define VIR_DOMAIN_MEMORY_PARAM_UNLIMITED INT64_MAX
If I understand it correctly we currently use INT64_MAX>>10 to
indicate "unlimited". Therefore, we should define
VIR_DOMAIN_MEMORY_PARAM_UNLIMITED to INT64_MAX>>10 as this would
preserve the existing behavior.
I think this patch started to fix the problem that virsh memtune
reports 9007199254740991 (== INT64_MAX>>10) when the value actually
means unlimited. We want virsh to report "unlimited" in this case.
As we cannot fix the problem in a better way (like using -1 for
unlimited) anymore, we try to workaround it:
First add a define VIR_DOMAIN_MEMORY_PARAM_UNLIMITED for the magic
value INT64_MAX>>10, but stick to this value, because changing it
could break existing applications.
Second make virsh memtune detect VIR_DOMAIN_MEMORY_PARAM_UNLIMITED and
print "unlimited" in that case instead of the actual numeric value.
Third make virsh memtune accept -1 as unlimited and translate it to
VIR_DOMAIN_MEMORY_PARAM_UNLIMITED.
You already addressed the second and third point in your patch so
we're close to a proper workaround.
Matthias
More information about the libvir-list
mailing list