hi all


Thanks all for the comment for previous RFC version, I summary all input
here also with Opens which I am not sure, can you please review again?



#Propose Changes



## Expose cache information into capabilities





Extend capabilities to expose all level cache resource information and
should tell the topology of caches also tell which kinds of resources can
be tuned/allocation



There information comes from
/sys/devices/system/cpu/cpu0/cache/index${level}/size
also /sys/fs/resctrl/ (this is CAT sys interface in linux kernel)



virsh capabilities



    <cache>

      <bank id='0, 'type="l3" size="56320" units="KiB" cpus="0,1,2,6,7,8"/>
 <--------------------- level 3 cache is per socket, so group them by
socket id

           <control unit="KiB" min="2816"/>

      <bank id='1', type="l3" size="56320" units="KiB"
cpus="3,4,5,9,10,11"/>

      <bank id='2' type="l2" size="256" units="KiB" cpus="0"/>

      <bank id='3' type="l2" size="256" units="KiB" cpus="1"/>

      <bank id='4' type="l2" size="256" units="KiB" cpus="2"/>

      <bank id='5' type="l2" size="256" units="KiB" cpus="3"/>

      <bank id='6' type="l2" size="256" units="KiB" cpus="4"/>

...

     <cache>



Opens

1.      how about add socket id to bank for bank type = l3 ?

2.      do we really want to expose l2/l3 cache for now , they are per core
resource and linux kernel don't support l2 yet (depend no hardware)?

3.      if enable CDP in resctrl, for bank type=l3 , it will be split to
l3data l3code, should expose this ability.

      <bank type="l3" size="56320" units="KiB" cpus="0,1,2,6,7,8"/>
 <--------------------- level 3 cache is per socket, so group them by
socket id

           <control unit="KiB" min="2816" cdp="enabled"/>



## Provide a new API to get the avail cache on each bank, such as the
output are:



   id=0

   type=l3

   avail=56320

   total = ?? <--------- do we need this?



   id=1

   type=l3

   avail=56320



   id=3

   type=l2

   avail=256



Opens:

·         Don't expose the avail cache information if the host can not do
the allocation of that type cache(eg, for l2 currently) ?

·         We can not make all of the cache , the reservation amount is the
min_cbm_len (=1) * min_unit .

·         do we need to expose total?







##  enable CAT for a domain



1 Domain XML changes



   <cputune>

       <cache id="1" host_id="0" type="l3" size="5632" unit="KiB"/>

       <cache id="2" host_id="1" type="l3" size="5632" unit="KiB"/>



       <cpu_cache vcpus="0-3" id="1"/>

       <cpu_cache vcpus="4-7" id="2"/>

       <iothread_cache iothreads="0-1" id="1"/>

       <emulator_cache id="2"/>

   </cputune>



2. Extend cputune command ?





Opens:



1. Do we accept to extend existed API ? or using new API/virsh?

2. How to calculate cache size -> CBM bit?



eg:

5632/ 2816 = 2 bits

5733/ 2816 = 2 bits or 3 bits?







## Restriction for using cache tune on multiple sockets' host.



The l3 cache is per socket resource, kernel need to know about what's
affinity looks like, so for a VM which running on a multiple socket's host,
it should have NUMA setting or vcpuset pin setting. Or cache tune will fail.



[1] kernel support https://git.kernel.org/cgit/linux/kernel/git/tip/
tip.git/tree/arch/x86/kernel/cpu/intel_rdt.c?h=x86/cache



[2] libvirt PoC(not finished yet) https://github.com/taget/
libvirt/commits/cat_new




-- 
Best regards
- Eli

天涯无处不重逢
a leaf duckweed belongs to the sea , where not to meet in life
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Reply via email to