On Fri, May 12, 2023 at 11:36:36AM +0000, mailing-libvirt(a)posteo.de wrote:
Hi there,
Hi, sorry for the late answer.
I have a question regarding the shares option of the cputune section.
I
want to illustrate my question with the following example. Let's assume
I have two virtual machines like the following on four dedicated core
with two threads each:
VM1:
<cputune>
<shares>512</shares>
<vcpupin vcpu="0" cpuset="0"/>
<vcpupin vcpu="1" cpuset="4"/>
</cputune>
VM2:
cputune>
<shares>512</shares>
<vcpupin vcpu="0" cpuset="1"/>
<vcpupin vcpu="1" cpuset="5"/>
<vcpupin vcpu="2" cpuset="2"/>
<vcpupin vcpu="3" cpuset="6"/>
<vcpupin vcpu="4" cpuset="3"/>
<vcpupin vcpu="5" cpuset="7"/>
</cputune>
Those two virtual machines I just mentioned won't interfere with one
another since they are pinned to different cores. However I introduce
another, third virtual machine, like this:
VM3:
<cputune>
<shares>512</shares>
<vcpupin vcpu="0" cpuset="0"/>
<vcpupin vcpu="1" cpuset="4"/>
<vcpupin vcpu="2" cpuset="1"/>
<vcpupin vcpu="3" cpuset="5"/>
<vcpupin vcpu="4" cpuset="2"/>
<vcpupin vcpu="5" cpuset="6"/>
<vcpupin vcpu="6" cpuset="3"/>
<vcpupin vcpu="7" cpuset="7"/>
</cputune>
What I want is that VM1, VM2 and VM3 all receive half of the cores CPU
time if congestion appears. My question is how the shares are
That is what should, theoretically, happen, yes. And it does not matter
if the value is 512, 7 or 20000.
calculated. Are they calculated on a per core basis? Meaning VM1 and
No, they are set per-VM.
VM3 use the first core so each will get half of the cores capacity
when
congestion appears, or are the shares calculated over all cores a
virtual machine uses and I need to scale the amount of shares with
increasing number of cores. What is the correct setting here so that
all virtual machines in this example are guaranteed half of the
capacity of each of their respective cores if congestion appears?
The above is okay from this point of view. But it depends on the rest
of your system. What scheduler you have, what are the other processes
running, etc. You can have a look at the settings in cgroups (in v1
this is cpu.shares, in v2 I think that's cpu.weight) and see how they
are set.
Hope that helps,
Martin