--
Eli Qiao
Sent with Sparrow (
http://www.sparrowmailapp.com/?sig)
On Friday, 10 February 2017 at 10:19 PM, Marcelo Tosatti wrote:
On Fri, Feb 10, 2017 at 02:42:04PM +0800, Eli Qiao wrote:
> Addressed comment from v3 -> v4:
>
> Daniel & Marcelo:
> * Added concurrence support
>
> Addressed comment from v2 -> v3:
>
> Daniel:
> * Fixed coding style, passed `make check` and `make syntax-check`
>
> * Variables renaming and move from header file to c file.
>
> * For locking/mutex support, no progress.
>
> There are some discussion from mailing list, but I can not find a better
> way to add locking support without performance impact.
>
> I'll explain the process and please help to advice what shoud we do.
>
> VM create:
> 1) Get the cache left value on each bank of the host. This should be
> shared amount all VMs.
> 2) Calculate the schemata on the bank based on all created resctrl
> domain's schemata
> 3) Calculate the default schemata by scaning all domain's schemata.
> 4) Flush default schemata to /sys/fs/resctrl/schemata
>
> VM destroy:
> 1) Remove the resctrl domain of that VM
> 2) Recalculate default schemata
> 3) Flush default schemata to /sys/fs/resctrl/schemata
>
> The key point is that all VMs shares /sys/fs/resctrl/schemata, and
> when a VM create a resctrl domain, the schemata of that VM depends on
> the default schemata and all other exsited schematas. So a global
> mutex is reqired.
>
> Before calculate a schemata or update default schemata, libvirt
> should gain this global mutex.
>
> I will try to think more about how to support this gracefully in next
> patch set.
>
> Marcelo:
> * Added vcpu support for cachetune, this will allow user to define which
> vcpu using which cache allocation bank.
>
> <cachetune id='0' host_id=0 size='3072' unit='KiB'
vcpus='0,1'/>
>
> vcpus is a cpumap, the vcpu pids will be added to tasks file
Working as expected.
> * Added cdp compatible, user can specify l3 cache even host enable cdp.
> See patch 8.
> On a cdp enabled host, specify l3code/l3data by
>
> <cachetune id='0' host_id='0' type='l3'
size='3072' unit='KiB'/>
>
> This will create a schemata like:
> L3data:0=0xff00;...
> L3code:0=0xff00;...
>
> * Would you please help to test if the functions work.
Setting up CDP machine.
Unrelated:
Found a bug:
The code should scan for all directories in resctrlfs,
and then find free CBM space from that:
free_cbm_space = ~(resctrldir1.CBM_bits &
resctrldir2.CBM_bits &
...
resctrldirN.CBM_bits)
For all resctrlfs directories.
The bug is as follows:
Create a directory in resctrlfs by hand:
# mkdir newres
Libvirt will not aware this after it starts running, so we should not allow operate
/sys/fs/.
we will scan for all directors while the libvirt daemon begin running, and libvirt will
remove exist directories if no tasks inside of it.
# cd newres
# echo "L3:0=3;1=f0000" > schemata
# virsh start guest
# cd ../b4c270b5-e0f9-4106-a446-69032872ed7e
# cat schemata
L3:0=3;1=f0000
That is, it is using the same CBM space as the "newres"
reservation.
As user create a new directory after libvirt running, it don’t notice newly created
directory under /sys/fs/resctrl.
That will lead mess, this should be forbidden.