On Thu 06 Mar 2014 20:16:45 CET, Martin Pavlásek wrote:
On 06/03/14 10:35, Daniel P. Berrange wrote:
> On Thu, Mar 06, 2014 at 12:32:28AM +0100, Martin Pavlásek wrote:
>> Hi
>>
>> I tried to restrict usage of some running VM by cpu.shares (i.e. set to
>> 10 from original 1024) on loaded system and it seem doesn't work as I
>> expected... all running processes has same CPU usage (by htop) :-/
>> Does anyone has same experience?
> The cpu.shares variable doesn't provide absolute restriction on
> CPU usage, rather it is doing relative prioritization.
>
> eg if you have 2 cgroups that are at the same level in the hierarchy
> and you give one shares=512 and one shared=1024, then the latter VM
> will get twice the CPU scheduler time of the former. If the latter
> VM is completely idle though, the former VM will not be capped in any
> way.
>
> If you want absolute caps then you need to use period/quota settings.
> Also you want todo this via the virsh schedinfo command, not accessing
> cgroups directly.
>
> Regards,
> Daniel
Thanks Daniel for reply, nice example!
In my case I've got quite weird results
guest: dd if=/dev/zero of=/dev/null for simulating heavy load
host: dd if=... same as guest (to make host also loaded)
host: htop for watching CPU usage (host has only one core), qemu (one
VM, two threads) + dd (host) = 99% usage that is correct, as expected
host: virsh schedinfo --set cpu_shares=10 <domain-ID>
...but whole load is still distributed equally - still ~30% for each.
All processes are under itself default cgroup, so / for host dd and each
VM in their own (something like /machine/<domain-name>). I didn't change
any cgroup directly in this case.
After that qemu processes should shoconsume significantly less cpu than
others, isn't it (change "relative priority" from 1024 to 10)?
Limiting by period or quota works, but I would be really happy to use
just cpu.shares - I don't want to write own process scheduler, weights
of cpu sharing is sufficient for me.
Do you have idea why this behaviour happen?
Regards
I just find out what was wrong... :-) cpu.shares is applied only to
process in same cgroup, so all common processes belong to / (cgroup
root), all VMs under /machine/. So dd running on host belongs to /, but
when I set cpu.shares of any VM, it wouldn't apply as I expected,
because these processes are exists in different cgroups.
PS: I'm sorry Danied for answer only to you, I've mismatched Reply and
Reply to all...
--
--
Martin Pavlásek <mpavlase(a)redhat.com>
OpenStack QA Associate/Red Hat Czech/BRQ
irc: mpavlase