<div>
<br>
</div>
<div><div><br></div><div>-- </div><div>Eli Qiao</div><div>Sent with <a href="http://www.sparrowmailapp.com/?sig">Sparrow</a></div><div><br></div></div>
<p style="color: #A0A0A8;">On Tuesday, 7 February 2017 at 12:02 AM, Daniel P. Berrange wrote:</p><blockquote type="cite"><div>
<span><div><div><div>On Mon, Feb 06, 2017 at 10:23:37AM +0800, Eli Qiao wrote:</div><blockquote type="cite"><div><div>This patch expose cache information to host's capabilites xml.</div><div><br></div><div>For l3 cache allocation</div><div><cache></div><div> <bank id='0' type='l3' size='56320' unit='KiB' cpus='0-21,44-65'></div><div> <control min='2816' reserved='2816' unit='KiB' scope='L3'/></div><div> </bank></div><div> <bank id='1' type='l3' size='56320' unit='KiB' cpus='22-43,66-87'></div><div> <control min='2816' reserved='2816' unit='KiB' scope='L3'/></div><div> </bank></div><div></cache></div><div><br></div><div>For l3 cache allocation supported cdp(seperate data/code):</div><div><cache></div><div> <bank id='0' type='l3' size='56320' unit='KiB' cpus='0-21,44-65'></div><div> <control min='2816' reserved='2816' unit='KiB' scope='L3DATA'/></div><div> <control min='2816' reserved='2816' unit='KiB' scope='L3CODE'/></div><div> </bank></div><div> <bank id='1' type='l3' size='56320' unit='KiB' cpus='22-43,66-87'></div><div> <control min='2816' reserved='2816' unit='KiB' scope='L3DATA'/></div><div> <control min='2816' reserved='2816' unit='KiB' scope='L3CODE'/></div><div> </bank></div><div></cache></div><div><br></div><div>RFC on mailing list.</div><div><a href="https://www.redhat.com/archives/libvir-list/2017-January/msg00644.html">https://www.redhat.com/archives/libvir-list/2017-January/msg00644.html</a></div><div><br></div><div>Signed-off-by: Eli Qiao <<a href="mailto:liyong.qiao@intel.com">liyong.qiao@intel.com</a>></div><div>---</div><div> src/conf/capabilities.c | 56 ++++++++++++++++++++++++++++++++++++</div><div> src/conf/capabilities.h | 23 +++++++++++++++</div><div> src/libvirt_private.syms | 1 +</div><div> src/qemu/qemu_capabilities.c | 68 ++++++++++++++++++++++++++++++++++++++++++++</div><div> src/qemu/qemu_driver.c | 4 +++</div><div> 5 files changed, 152 insertions(+)</div></div></blockquote><div><br></div><div><br></div><blockquote type="cite"><div><div>diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c</div><div>index 3247d25..23f416d 100644</div><div>--- a/src/qemu/qemu_capabilities.c</div><div>+++ b/src/qemu/qemu_capabilities.c</div><div>@@ -45,6 +45,7 @@</div><div> #include "qemu_domain.h"</div><div> #define __QEMU_CAPSRIV_H_ALLOW__</div><div> #include "qemu_capspriv.h"</div><div>+#include "virresctrl.h"</div><div> </div><div> #include <fcntl.h></div><div> #include <sys/stat.h></div><div>@@ -1098,7 +1099,71 @@ virQEMUCapsInitCPU(virCapsPtr caps,</div><div> goto cleanup;</div><div> }</div><div> </div><div>+static int</div><div>+virQEMUCapsInitCache(virCapsPtr caps)</div><div>+{</div><div>+ int i, j;</div><div>+ virResCtrlPtr resctrl;</div><div>+ virCapsHostCacheBankPtr bank;</div><div>+</div><div>+ for (i = 0; i < RDT_NUM_RESOURCES; i ++)</div><div>+ {</div><div>+ /* L3DATA and L3CODE share L3 resources */</div><div>+ if ( i == RDT_RESOURCE_L3CODE )</div><div>+ continue;</div><div> </div><div>+ resctrl = virResCtrlGet(i);</div><div>+</div><div>+ if(resctrl->enabled) {</div><div>+ for( j = 0; j < resctrl->num_banks; j++)</div><div>+ {</div><div>+ if(VIR_RESIZE_N(caps->host.cachebank, caps->host.ncachebank_max,</div><div>+ caps->host.ncachebank, 1) < 0)</div><div>+ return -1;</div><div>+</div><div>+ if(VIR_ALLOC(bank) < 0)</div><div>+ return -1;</div><div>+</div><div>+ bank->id = resctrl->cache_banks[j].host_id;</div><div>+ if(VIR_STRDUP(bank->type, resctrl->cache_level) < 0)</div><div>+ goto err;</div><div>+ if(VIR_STRDUP(bank->cpus, virBitmapFormat(resctrl->cache_banks[j].cpu_mask)) < 0)</div><div>+ goto err;</div><div>+ bank->size = resctrl->cache_banks[j].cache_size;</div><div>+ /*L3DATA and L3CODE shares L3 cache resources, so fill them to the control element*/</div><div>+ if ( i == RDT_RESOURCE_L3DATA ) {</div><div>+ if(VIR_EXPAND_N(bank->control, bank->ncontrol, 2) < 0)</div><div>+ goto err;</div><div>+</div><div>+ bank->control[0].min = virResCtrlGet(RDT_RESOURCE_L3DATA)->cache_banks[j].cache_min;</div><div>+ bank->control[0].reserved = bank->control[0].min * (virResCtrlGet(RDT_RESOURCE_L3DATA)->min_cbm_bits);</div><div>+ if(VIR_STRDUP(bank->control[0].scope,</div><div>+ virResCtrlGet(RDT_RESOURCE_L3DATA)->name) < 0)</div><div>+ goto err;</div><div>+</div><div>+ bank->control[1].min = virResCtrlGet(RDT_RESOURCE_L3CODE)->cache_banks[j].cache_min;</div><div>+ bank->control[1].reserved = bank->control[1].min * (virResCtrlGet(RDT_RESOURCE_L3CODE)->min_cbm_bits);</div><div>+ if(VIR_STRDUP(bank->control[1].scope,</div><div>+ virResCtrlGet(RDT_RESOURCE_L3CODE)->name) < 0)</div><div>+ goto err;</div><div>+ }</div><div>+ else {</div><div>+ if(VIR_EXPAND_N(bank->control, bank->ncontrol, 1) < 0)</div><div>+ goto err;</div><div>+ bank->control[0].min = resctrl->cache_banks[j].cache_min;</div><div>+ bank->control[0].reserved = bank->control[0].min * resctrl->min_cbm_bits;</div><div>+ if(VIR_STRDUP(bank->control[0].scope, resctrl->name) < 0)</div><div>+ goto err;</div><div>+ }</div><div>+ caps->host.cachebank[caps->host.ncachebank++] = bank;</div><div>+ }</div><div>+ }</div><div>+ }</div><div>+ return 0;</div><div>+err:</div><div>+ VIR_FREE(bank);</div><div>+ return -1;</div><div>+}</div></div></blockquote><div><br></div><div>I don't think this code should be in the QEMU driver - better to have</div><div>it in nodeinfo.c so it is common to all drivers.</div><div><br></div></div></div></span></div></blockquote><div>Sure, I will move it to nodeinfo.c </div><blockquote type="cite"><div><span><div><div><div><br></div><div>Regards,</div><div>Daniel</div><div>-- </div><div>|: <a href="http://berrange.com">http://berrange.com</a> -o- <a href="http://www.flickr.com/photos/dberrange/">http://www.flickr.com/photos/dberrange/</a> :|</div><div>|: <a href="http://libvirt.org">http://libvirt.org</a> -o- <a href="http://virt-manager.org">http://virt-manager.org</a> :|</div><div>|: <a href="http://entangle-photo.org">http://entangle-photo.org</a> -o- <a href="http://search.cpan.org/~danberr/">http://search.cpan.org/~danberr/</a> :|</div></div></div></span>
</div></blockquote><div>
<br>
</div>