[libvirt] [PATCH 2/3] qemu_driver: clamp value for setting sched cpu_shares with --config.

Dongsheng Yang yangds.fnst at cn.fujitsu.com
Thu May 15 11:01:44 UTC 2014


On 05/15/2014 08:56 PM, Martin Kletzander wrote:
> On Thu, May 15, 2014 at 06:39:50PM +0900, Dongsheng Yang wrote:
>> As shown in 'man virsh' about schedinfo:
>>
>>           Note: The cpu_shares parameter has a valid value range of 
>> 0-262144;
>>        Negative values are wrapped to positive, and larger values are 
>> capped at
>>           the maximum.  Therefore, -1 is a useful shorthand for 262144.
>>        On the Linux kernel, the values 0 and 1 are automatically 
>> converted to
>>        a minimal value of 2.
>> it works well with --live, but not with --config.
>>
>> Example:
>>     # virsh schedinfo rhel7-ful --set cpu_shares=0 --config
>>         Scheduler      : posix
>>         cpu_shares     : 0
>>         vcpu_period    : 0
>>         vcpu_quota     : 0
>>         emulator_period: 0
>>         emulator_quota : 0
>> cpu_shares is 0 rather than expected 2.
>>
>> What's worse, when we start it again, it is the default value of
>> cpu_shares 1024.
>>
>> Because when we set the value of cpu_shares, when flag is --live,
>> write the value into cgroup/cpu.shares. Then it will convert the
>> value into the range of [2, 262144]. When flag is --config, we
>> set the value into vmdef immidiately and 0 means no settting for
>> cpu_shares. When we start vm again, libvirt use default value(1024)
>> for it.
>>
>> This patch clamp the cpu_shares value when flag is --config, then
>> we will get then "correct" settting in output of virsh schedinfo
>> and value in cgroup after next booting of vm.
>>
>
> I was under the impression that this was meant to be fixed by commit
> 97814d8a, what's the difference to that?

Commit 97814d8a is to make the output of virsh schedinfo --live showing
the real value in cgroup.

This patch here is to do another thing, it is about --config. When we 
use --live
to set cpu_shares, as shown in "man virsh", we depend on the conversion by
cgroup. But when we set it with --config, we did not actually write the 
value
into cgroup, then the value will not be converted to the expected value 
in manpage.

And as I described above, when we set cpu_shares=0 with --config, we 
will get
1024 in next booting.


>
> Martin
>
>> Signed-off-by: Dongsheng Yang <yangds.fnst at cn.fujitsu.com>
>> ---
>> src/qemu/qemu_driver.c | 6 +++++-
>> 1 file changed, 5 insertions(+), 1 deletion(-)
>>
>> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
>> index 52ca47c..7648865 100644
>> --- a/src/qemu/qemu_driver.c
>> +++ b/src/qemu/qemu_driver.c
>> @@ -112,6 +112,8 @@ VIR_LOG_INIT("qemu.qemu_driver");
>> #define QEMU_SCHED_MAX_PERIOD           1000000LL
>> #define QEMU_SCHED_MIN_QUOTA               1000LL
>> #define QEMU_SCHED_MAX_QUOTA  18446744073709551LL
>> +#define QEMU_SCHED_MIN_SHARES                 2LL
>> +#define QEMU_SCHED_MAX_SHARES            262144LL
>>
>> #if HAVE_LINUX_KVM_H
>> # include <linux/kvm.h>
>> @@ -9063,7 +9065,9 @@ 
>> qemuDomainSetSchedulerParametersFlags(virDomainPtr dom,
>>             }
>>
>>             if (flags & VIR_DOMAIN_AFFECT_CONFIG) {
>> -                vmdef->cputune.shares = value_ul;
>> +                vmdef->cputune.shares = CLAMP(value_ul,
>> + QEMU_SCHED_MIN_SHARES,
>> + QEMU_SCHED_MAX_SHARES);
>>                 vmdef->cputune.sharesSpecified = true;
>>             }
>>
>> -- 
>> 1.8.2.1
>>
>> -- 
>> libvir-list mailing list
>> libvir-list at redhat.com
>> https://www.redhat.com/mailman/listinfo/libvir-list




More information about the libvir-list mailing list