* include/libvirt/libvirt.h[.in] src/driver.h src/openvz_driver.c

src/qemu_driver.c src/remote_internal.c src/test.c
  src/xen_internal.[ch] src/xen_unified.c src/xend_internal.[ch]
  src/libvirt.c src/libvirt_sym.version: adding NUMA support patches
  from Beth Kon adding new virNodeGetCellsFreeMemory entry point
  and extending the virConnectGetCapabilities one. Fix a couple of
  issues in the patch and add to exported symbols from shared lib.
* docs/virsh.pod docs/virsh.1 src/virsh.c: added new command
  freecell to get the available memory on the node or in a NUMA cell.
* docs/*: updated and regenerated the documentation
Daniel
This commit is contained in:
Daniel Veillard 2007-09-28 14:28:12 +00:00
parent dbd8f037e7
commit 4bf3bc9eda
35 changed files with 654 additions and 8 deletions

View File

@ -1,3 +1,16 @@
Fri Sep 28 16:17:41 CEST 2007 Daniel Veillard <veillard@redhat.com>
* include/libvirt/libvirt.h[.in] src/driver.h src/openvz_driver.c
src/qemu_driver.c src/remote_internal.c src/test.c
src/xen_internal.[ch] src/xen_unified.c src/xend_internal.[ch]
src/libvirt.c src/libvirt_sym.version: adding NUMA support patches
from Beth Kon adding new virNodeGetCellsFreeMemory entry point
and extending the virConnectGetCapabilities one. Fix a couple of
issues in the patch and add to exported symbols from shared lib.
* docs/virsh.pod docs/virsh.1 src/virsh.c: added new command
freecell to get the available memory on the node or in a NUMA cell.
* docs/*: updated and regenerated the documentation
Fri Sep 28 11:20:00 BST 2007 Richard W.M. Jones <rjones@redhat.com>
* docs/libvir.html: Clarified configuration required for

View File

@ -111,9 +111,11 @@
</dd><dt>Linux</dt><dd><a href="html/libvirt-libvirt.html#virDomainCreateLinux">virDomainCreateLinux</a><br />
</dd></dl><h2>Letter M:</h2><dl><dt>Macro</dt><dd><a href="html/libvirt-libvirt.html#LIBVIR_VERSION_NUMBER">LIBVIR_VERSION_NUMBER</a><br />
<a href="html/libvirt-libvirt.html#VIR_DOMAIN_SCHED_FIELD_LENGTH">VIR_DOMAIN_SCHED_FIELD_LENGTH</a><br />
</dd><dt>Maximum</dt><dd><a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
</dd><dt>Mbps</dt><dd><a href="html/libvirt-libvirt.html#virDomainMigrate">virDomainMigrate</a><br />
</dd><dt>Migrate</dt><dd><a href="html/libvirt-libvirt.html#virDomainMigrate">virDomainMigrate</a><br />
</dd></dl><h2>Letter N:</h2><dl><dt>NUMA</dt><dd><a href="html/libvirt-libvirt.html#_virNodeInfo">_virNodeInfo</a><br />
<a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
</dd><dt>Normally</dt><dd><a href="html/libvirt-libvirt.html#virConnectGetURI">virConnectGetURI</a><br />
</dd><dt>Note</dt><dd><a href="html/libvirt-libvirt.html#virDomainCoreDump">virDomainCoreDump</a><br />
<a href="html/libvirt-libvirt.html#virDomainGetInfo">virDomainGetInfo</a><br />

View File

@ -54,6 +54,7 @@
<a href="html/libvirt-libvirt.html#virConnectNumOfNetworks">virConnectNumOfNetworks</a><br />
<a href="html/libvirt-libvirt.html#virDomainSuspend">virDomainSuspend</a><br />
</dd><dt>add</dt><dd><a href="html/libvirt-libvirt.html#virDomainShutdown">virDomainShutdown</a><br />
</dd><dt>additional</dt><dd><a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
</dd><dt>address</dt><dd><a href="html/libvirt-libvirt.html#virDomainMigrate">virDomainMigrate</a><br />
</dd><dt>after</dt><dd><a href="html/libvirt-libvirt.html#virConnectGetCapabilities">virConnectGetCapabilities</a><br />
<a href="html/libvirt-libvirt.html#virDomainReboot">virDomainReboot</a><br />
@ -74,6 +75,7 @@
<a href="html/libvirt-libvirt.html#virDomainSetMaxMemory">virDomainSetMaxMemory</a><br />
<a href="html/libvirt-libvirt.html#virDomainSetMemory">virDomainSetMemory</a><br />
<a href="html/libvirt-libvirt.html#virDomainSuspend">virDomainSuspend</a><br />
<a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
<a href="html/libvirt-libvirt.html#virNodeGetInfo">virNodeGetInfo</a><br />
</dd><dt>allowed</dt><dd><a href="html/libvirt-libvirt.html#_virDomainInfo">_virDomainInfo</a><br />
</dd><dt>already</dt><dd><a href="html/libvirt-libvirt.html#virDomainDestroy">virDomainDestroy</a><br />
@ -83,6 +85,7 @@
</dd><dt>amount</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetMaxMemory">virDomainGetMaxMemory</a><br />
<a href="html/libvirt-libvirt.html#virDomainSetMaxMemory">virDomainSetMaxMemory</a><br />
<a href="html/libvirt-libvirt.html#virDomainSetMemory">virDomainSetMemory</a><br />
<a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
</dd><dt>analysis</dt><dd><a href="html/libvirt-libvirt.html#virDomainCoreDump">virDomainCoreDump</a><br />
</dd><dt>anymore</dt><dd><a href="html/libvirt-libvirt.html#virDomainSave">virDomainSave</a><br />
</dd><dt>application</dt><dd><a href="html/libvirt-libvirt.html#virConnectClose">virConnectClose</a><br />
@ -115,6 +118,7 @@
<a href="html/libvirt-libvirt.html#virDomainGetVcpus">virDomainGetVcpus</a><br />
<a href="html/libvirt-libvirt.html#virNetworkGetUUID">virNetworkGetUUID</a><br />
<a href="html/libvirt-libvirt.html#virNetworkGetUUIDString">virNetworkGetUUIDString</a><br />
<a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
</dd><dt>associated</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetConnect">virDomainGetConnect</a><br />
<a href="html/libvirt-libvirt.html#virNetworkGetConnect">virNetworkGetConnect</a><br />
</dd><dt>assumed</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetVcpus">virDomainGetVcpus</a><br />
@ -211,6 +215,7 @@
<a href="html/libvirt-libvirt.html#virNetworkCreate">virNetworkCreate</a><br />
<a href="html/libvirt-libvirt.html#virNetworkDestroy">virNetworkDestroy</a><br />
<a href="html/libvirt-libvirt.html#virNetworkGetConnect">virNetworkGetConnect</a><br />
<a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
</dd><dt>callback</dt><dd><a href="html/libvirt-virterror.html#virConnSetErrorFunc">virConnSetErrorFunc</a><br />
<a href="html/libvirt-virterror.html#virErrorFunc">virErrorFunc</a><br />
<a href="html/libvirt-virterror.html#virSetErrorFunc">virSetErrorFunc</a><br />
@ -227,6 +232,7 @@
<a href="html/libvirt-libvirt.html#virDomainGetXMLDesc">virDomainGetXMLDesc</a><br />
<a href="html/libvirt-libvirt.html#virNetworkGetBridgeName">virNetworkGetBridgeName</a><br />
<a href="html/libvirt-libvirt.html#virNetworkGetXMLDesc">virNetworkGetXMLDesc</a><br />
<a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
</dd><dt>calling</dt><dd><a href="html/libvirt-libvirt.html#virDomainBlockStats">virDomainBlockStats</a><br />
<a href="html/libvirt-libvirt.html#virDomainResume">virDomainResume</a><br />
</dd><dt>calloc</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetVcpus">virDomainGetVcpus</a><br />
@ -237,6 +243,7 @@
<a href="html/libvirt-libvirt.html#virDomainGetInfo">virDomainGetInfo</a><br />
<a href="html/libvirt-libvirt.html#virDomainMigrate">virDomainMigrate</a><br />
<a href="html/libvirt-libvirt.html#virDomainPinVcpu">virDomainPinVcpu</a><br />
<a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
</dd><dt>cannot</dt><dd><a href="html/libvirt-libvirt.html#virDomainLookupByID">virDomainLookupByID</a><br />
<a href="html/libvirt-libvirt.html#virDomainLookupByName">virDomainLookupByName</a><br />
<a href="html/libvirt-libvirt.html#virDomainLookupByUUID">virDomainLookupByUUID</a><br />
@ -256,6 +263,8 @@
<a href="html/libvirt-virterror.html#virResetLastError">virResetLastError</a><br />
<a href="html/libvirt-virterror.html#virSetErrorFunc">virSetErrorFunc</a><br />
</dd><dt>cell</dt><dd><a href="html/libvirt-libvirt.html#_virNodeInfo">_virNodeInfo</a><br />
<a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
</dd><dt>cells</dt><dd><a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
</dd><dt>change</dt><dd><a href="html/libvirt-libvirt.html#virDomainPinVcpu">virDomainPinVcpu</a><br />
<a href="html/libvirt-libvirt.html#virDomainSetMaxMemory">virDomainSetMaxMemory</a><br />
<a href="html/libvirt-libvirt.html#virDomainSetMemory">virDomainSetMemory</a><br />

View File

@ -82,10 +82,13 @@
<a href="html/libvirt-libvirt.html#virDomainInterfaceStats">virDomainInterfaceStats</a><br />
<a href="html/libvirt-libvirt.html#virDomainMigrate">virDomainMigrate</a><br />
<a href="html/libvirt-libvirt.html#virDomainPinVcpu">virDomainPinVcpu</a><br />
<a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
</dd><dt>either</dt><dd><a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
</dd><dt>element</dt><dd><a href="html/libvirt-libvirt.html#virConnectGetMaxVcpus">virConnectGetMaxVcpus</a><br />
</dd><dt>else</dt><dd><a href="html/libvirt-libvirt.html#virDomainMigrate">virDomainMigrate</a><br />
</dd><dt>encoded</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetXMLDesc">virDomainGetXMLDesc</a><br />
<a href="html/libvirt-libvirt.html#virNetworkGetXMLDesc">virNetworkGetXMLDesc</a><br />
</dd><dt>entries</dt><dd><a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
</dd><dt>especially</dt><dd><a href="html/libvirt-libvirt.html#virConnectClose">virConnectClose</a><br />
</dd><dt>etc</dt><dd><a href="html/libvirt-libvirt.html#virDomainMigrate">virDomainMigrate</a><br />
</dd><dt>even</dt><dd><a href="html/libvirt-libvirt.html#virDomainMigrate">virDomainMigrate</a><br />
@ -111,11 +114,13 @@
<a href="html/libvirt-libvirt.html#virDomainSave">virDomainSave</a><br />
</dd><dt>filled</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetSchedulerParameters">virDomainGetSchedulerParameters</a><br />
<a href="html/libvirt-libvirt.html#virDomainGetVcpus">virDomainGetVcpus</a><br />
<a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
</dd><dt>find</dt><dd><a href="html/libvirt-libvirt.html#virDomainLookupByID">virDomainLookupByID</a><br />
<a href="html/libvirt-libvirt.html#virDomainMigrate">virDomainMigrate</a><br />
</dd><dt>finding</dt><dd><a href="html/libvirt-libvirt.html#virDomainBlockStats">virDomainBlockStats</a><br />
</dd><dt>first</dt><dd><a href="html/libvirt-libvirt.html#virConnectOpen">virConnectOpen</a><br />
<a href="html/libvirt-libvirt.html#virConnectOpenReadOnly">virConnectOpenReadOnly</a><br />
<a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
</dd><dt>flags</dt><dd><a href="html/libvirt-libvirt.html#virDomainCoreDump">virDomainCoreDump</a><br />
<a href="html/libvirt-libvirt.html#virDomainGetXMLDesc">virDomainGetXMLDesc</a><br />
<a href="html/libvirt-libvirt.html#virDomainMigrate">virDomainMigrate</a><br />
@ -147,6 +152,8 @@
<a href="html/libvirt-libvirt.html#virDomainGetXMLDesc">virDomainGetXMLDesc</a><br />
<a href="html/libvirt-libvirt.html#virNetworkGetBridgeName">virNetworkGetBridgeName</a><br />
<a href="html/libvirt-libvirt.html#virNetworkGetXMLDesc">virNetworkGetXMLDesc</a><br />
<a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
</dd><dt>freeMems</dt><dd><a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
</dd><dt>freed</dt><dd><a href="html/libvirt-libvirt.html#virConnectGetHostname">virConnectGetHostname</a><br />
<a href="html/libvirt-libvirt.html#virConnectGetURI">virConnectGetURI</a><br />
<a href="html/libvirt-libvirt.html#virDomainDestroy">virDomainDestroy</a><br />

View File

@ -47,18 +47,21 @@
<a href="html/libvirt-libvirt.html#virDomainGetMaxVcpus">virDomainGetMaxVcpus</a><br />
</dd><dt>increased</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetConnect">virDomainGetConnect</a><br />
<a href="html/libvirt-libvirt.html#virNetworkGetConnect">virNetworkGetConnect</a><br />
</dd><dt>index</dt><dd><a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
</dd><dt>indicates</dt><dd><a href="html/libvirt-libvirt.html#virDomainBlockStats">virDomainBlockStats</a><br />
<a href="html/libvirt-libvirt.html#virDomainInterfaceStats">virDomainInterfaceStats</a><br />
</dd><dt>indicating</dt><dd><a href="html/libvirt-libvirt.html#_virNodeInfo">_virNodeInfo</a><br />
<a href="html/libvirt-libvirt.html#virDomainGetAutostart">virDomainGetAutostart</a><br />
<a href="html/libvirt-libvirt.html#virNetworkGetAutostart">virNetworkGetAutostart</a><br />
</dd><dt>info</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetVcpus">virDomainGetVcpus</a><br />
<a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
</dd><dt>information</dt><dd><a href="html/libvirt-virterror.html#_virError">_virError</a><br />
<a href="html/libvirt-libvirt.html#virDomainGetInfo">virDomainGetInfo</a><br />
<a href="html/libvirt-libvirt.html#virDomainGetUUIDString">virDomainGetUUIDString</a><br />
<a href="html/libvirt-libvirt.html#virDomainGetVcpus">virDomainGetVcpus</a><br />
<a href="html/libvirt-libvirt.html#virGetVersion">virGetVersion</a><br />
<a href="html/libvirt-libvirt.html#virNetworkGetUUIDString">virNetworkGetUUIDString</a><br />
<a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
<a href="html/libvirt-libvirt.html#virNodeGetInfo">virNodeGetInfo</a><br />
</dd><dt>informative</dt><dd><a href="html/libvirt-virterror.html#_virError">_virError</a><br />
</dd><dt>initializing</dt><dd><a href="html/libvirt-libvirt.html#virInitialize">virInitialize</a><br />
@ -95,6 +98,7 @@
<a href="html/libvirt-libvirt.html#virDomainGetMaxMemory">virDomainGetMaxMemory</a><br />
<a href="html/libvirt-libvirt.html#virDomainSetMaxMemory">virDomainSetMaxMemory</a><br />
<a href="html/libvirt-libvirt.html#virDomainSetMemory">virDomainSetMemory</a><br />
<a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
</dd><dt>knowing</dt><dd><a href="html/libvirt-libvirt.html#virDomainShutdown">virDomainShutdown</a><br />
</dd></dl><h2>Letter l:</h2><dl><dt>lack</dt><dd><a href="html/libvirt-libvirt.html#virConnectGetVersion">virConnectGetVersion</a><br />
</dd><dt>languages</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetConnect">virDomainGetConnect</a><br />
@ -153,6 +157,7 @@
</dd><dt>listed</dt><dd><a href="html/libvirt-libvirt.html#virDomainSave">virDomainSave</a><br />
</dd><dt>little-endian</dt><dd><a href="html/libvirt-libvirt.html#virDomainPinVcpu">virDomainPinVcpu</a><br />
</dd><dt>live</dt><dd><a href="html/libvirt-libvirt.html#virDomainMigrate">virDomainMigrate</a><br />
</dd><dt>long</dt><dd><a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
</dd><dt>looked</dt><dd><a href="html/libvirt-libvirt.html#virGetVersion">virGetVersion</a><br />
</dd><dt>lookup</dt><dd><a href="html/libvirt-libvirt.html#virDomainLookupByName">virDomainLookupByName</a><br />
<a href="html/libvirt-libvirt.html#virDomainLookupByUUID">virDomainLookupByUUID</a><br />
@ -188,6 +193,7 @@
</dd><dt>maplen</dt><dd><a href="">cpumap</a><br />
<a href="html/libvirt-libvirt.html#virDomainGetVcpus">virDomainGetVcpus</a><br />
<a href="html/libvirt-libvirt.html#virDomainPinVcpu">virDomainPinVcpu</a><br />
</dd><dt>maxCells</dt><dd><a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
</dd><dt>maximum</dt><dd><a href="html/libvirt-libvirt.html#_virDomainInfo">_virDomainInfo</a><br />
<a href="html/libvirt-libvirt.html#virConnectGetMaxVcpus">virConnectGetMaxVcpus</a><br />
<a href="html/libvirt-libvirt.html#virDomainGetMaxMemory">virDomainGetMaxMemory</a><br />
@ -225,6 +231,7 @@
<a href="html/libvirt-libvirt.html#virDomainSetMaxMemory">virDomainSetMaxMemory</a><br />
<a href="html/libvirt-libvirt.html#virDomainSetMemory">virDomainSetMemory</a><br />
<a href="html/libvirt-libvirt.html#virDomainSuspend">virDomainSuspend</a><br />
<a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
</dd><dt>message</dt><dd><a href="html/libvirt-virterror.html#_virError">_virError</a><br />
</dd><dt>method</dt><dd><a href="html/libvirt-libvirt.html#virDomainCoreDump">virDomainCoreDump</a><br />
<a href="html/libvirt-libvirt.html#virDomainMigrate">virDomainMigrate</a><br />
@ -246,6 +253,7 @@
<a href="html/libvirt-libvirt.html#virDomainInterfaceStats">virDomainInterfaceStats</a><br />
<a href="html/libvirt-libvirt.html#virDomainMigrate">virDomainMigrate</a><br />
<a href="html/libvirt-libvirt.html#virNetworkGetUUIDString">virNetworkGetUUIDString</a><br />
<a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
</dd><dt>moves</dt><dd><a href="html/libvirt-libvirt.html#virDomainCreate">virDomainCreate</a><br />
<a href="html/libvirt-libvirt.html#virNetworkCreate">virNetworkCreate</a><br />
</dd><dt>msg00096</dt><dd><a href="html/libvirt-libvirt.html#virConnectGetType">virConnectGetType</a><br />
@ -265,6 +273,7 @@
<a href="html/libvirt-libvirt.html#virDomainMigrate">virDomainMigrate</a><br />
<a href="html/libvirt-libvirt.html#virNetworkGetBridgeName">virNetworkGetBridgeName</a><br />
<a href="html/libvirt-libvirt.html#virNetworkGetXMLDesc">virNetworkGetXMLDesc</a><br />
<a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
</dd><dt>mysterious</dt><dd><a href="html/libvirt-libvirt.html#_virDomainBlockStats">_virDomainBlockStats</a><br />
</dd></dl><h2 align="center"><a href="APIchunk0.html">A-V</a>
<a href="APIchunk1.html">W-c</a>

View File

@ -50,6 +50,7 @@
<a href="html/libvirt-libvirt.html#virNetworkLookupByUUID">virNetworkLookupByUUID</a><br />
<a href="html/libvirt-libvirt.html#virNetworkLookupByUUIDString">virNetworkLookupByUUIDString</a><br />
</dd><dt>node</dt><dd><a href="html/libvirt-libvirt.html#_virNodeInfo">_virNodeInfo</a><br />
<a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
<a href="html/libvirt-libvirt.html#virNodeGetInfo">virNodeGetInfo</a><br />
</dd><dt>non</dt><dd><a href="html/libvirt-libvirt.html#VIR_CPU_USABLE">VIR_CPU_USABLE</a><br />
</dd><dt>non-NULL</dt><dd><a href="html/libvirt-libvirt.html#virConnectGetURI">virConnectGetURI</a><br />
@ -70,6 +71,7 @@
<a href="html/libvirt-libvirt.html#virDomainGetVcpus">virDomainGetVcpus</a><br />
<a href="html/libvirt-libvirt.html#virDomainMigrate">virDomainMigrate</a><br />
<a href="html/libvirt-libvirt.html#virNetworkCreateXML">virNetworkCreateXML</a><br />
<a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
</dd><dt>only</dt><dd><a href="html/libvirt-libvirt.html#virConnectGetVersion">virConnectGetVersion</a><br />
<a href="html/libvirt-libvirt.html#virDomainGetInfo">virDomainGetInfo</a><br />
</dd><dt>oo_req</dt><dd><a href="html/libvirt-libvirt.html#_virDomainBlockStats">_virDomainBlockStats</a><br />
@ -205,6 +207,7 @@
</dd><dt>reporting</dt><dd><a href="html/libvirt-virterror.html#virDefaultErrorFunc">virDefaultErrorFunc</a><br />
</dd><dt>request</dt><dd><a href="html/libvirt-libvirt.html#virDomainReboot">virDomainReboot</a><br />
<a href="html/libvirt-libvirt.html#virDomainShutdown">virDomainShutdown</a><br />
</dd><dt>requested</dt><dd><a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
</dd><dt>required</dt><dd><a href="html/libvirt-libvirt.html#VIR_CPU_MAPLEN">VIR_CPU_MAPLEN</a><br />
<a href="html/libvirt-libvirt.html#VIR_UUID_BUFLEN">VIR_UUID_BUFLEN</a><br />
<a href="html/libvirt-libvirt.html#VIR_UUID_STRING_BUFLEN">VIR_UUID_STRING_BUFLEN</a><br />
@ -242,6 +245,7 @@
<a href="html/libvirt-libvirt.html#virDomainMigrate">virDomainMigrate</a><br />
<a href="html/libvirt-libvirt.html#virGetVersion">virGetVersion</a><br />
<a href="html/libvirt-libvirt.html#virNetworkDestroy">virNetworkDestroy</a><br />
<a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
</dd><dt>returned</dt><dd><a href="html/libvirt-libvirt.html#virConnectGetCapabilities">virConnectGetCapabilities</a><br />
<a href="html/libvirt-libvirt.html#virDomainBlockStats">virDomainBlockStats</a><br />
<a href="html/libvirt-libvirt.html#virDomainCreateLinux">virDomainCreateLinux</a><br />
@ -258,6 +262,7 @@
<a href="html/libvirt-libvirt.html#virNetworkGetAutostart">virNetworkGetAutostart</a><br />
<a href="html/libvirt-libvirt.html#virNetworkGetBridgeName">virNetworkGetBridgeName</a><br />
<a href="html/libvirt-libvirt.html#virNetworkGetXMLDesc">virNetworkGetXMLDesc</a><br />
<a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
</dd><dt>returns</dt><dd><a href="html/libvirt-libvirt.html#VIR_CPU_MAPLEN">VIR_CPU_MAPLEN</a><br />
<a href="html/libvirt-libvirt.html#VIR_CPU_USABLE">VIR_CPU_USABLE</a><br />
<a href="html/libvirt-libvirt.html#VIR_GET_CPUMAP">VIR_GET_CPUMAP</a><br />
@ -267,6 +272,7 @@
<a href="html/libvirt-libvirt.html#virConnectGetVersion">virConnectGetVersion</a><br />
<a href="html/libvirt-libvirt.html#virDomainBlockStats">virDomainBlockStats</a><br />
<a href="html/libvirt-libvirt.html#virDomainInterfaceStats">virDomainInterfaceStats</a><br />
<a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
</dd><dt>reused</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetXMLDesc">virDomainGetXMLDesc</a><br />
<a href="html/libvirt-libvirt.html#virNetworkGetXMLDesc">virNetworkGetXMLDesc</a><br />
</dd><dt>routine</dt><dd><a href="html/libvirt-virterror.html#virDefaultErrorFunc">virDefaultErrorFunc</a><br />

View File

@ -67,6 +67,7 @@
<a href="html/libvirt-libvirt.html#virDomainPinVcpu">virDomainPinVcpu</a><br />
<a href="html/libvirt-libvirt.html#virDomainSetMaxMemory">virDomainSetMaxMemory</a><br />
<a href="html/libvirt-libvirt.html#virDomainSetMemory">virDomainSetMemory</a><br />
</dd><dt>smaller</dt><dd><a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
</dd><dt>socket</dt><dd><a href="html/libvirt-libvirt.html#_virNodeInfo">_virNodeInfo</a><br />
</dd><dt>software</dt><dd><a href="html/libvirt-libvirt.html#virConnectGetType">virConnectGetType</a><br />
</dd><dt>source</dt><dd><a href="html/libvirt-libvirt.html#virDomainMigrate">virDomainMigrate</a><br />
@ -78,10 +79,12 @@
</dd><dt>start</dt><dd><a href="html/libvirt-libvirt.html#virDomainDefineXML">virDomainDefineXML</a><br />
<a href="html/libvirt-libvirt.html#virNetworkCreate">virNetworkCreate</a><br />
<a href="html/libvirt-libvirt.html#virNetworkCreateXML">virNetworkCreateXML</a><br />
</dd><dt>startCell</dt><dd><a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
</dd><dt>started</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetAutostart">virDomainGetAutostart</a><br />
<a href="html/libvirt-libvirt.html#virDomainSetAutostart">virDomainSetAutostart</a><br />
<a href="html/libvirt-libvirt.html#virNetworkGetAutostart">virNetworkGetAutostart</a><br />
<a href="html/libvirt-libvirt.html#virNetworkSetAutostart">virNetworkSetAutostart</a><br />
</dd><dt>starting</dt><dd><a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
</dd><dt>startup</dt><dd><a href="html/libvirt-libvirt.html#virInitialize">virInitialize</a><br />
</dd><dt>state</dt><dd><a href="html/libvirt-libvirt.html#_virDomainInfo">_virDomainInfo</a><br />
<a href="html/libvirt-libvirt.html#virDomainResume">virDomainResume</a><br />

View File

@ -16,6 +16,7 @@
</dd><dt>uniform</dt><dd><a href="html/libvirt-libvirt.html#_virNodeInfo">_virNodeInfo</a><br />
</dd><dt>unknown</dt><dd><a href="html/libvirt-libvirt.html#virGetVersion">virGetVersion</a><br />
</dd><dt>unsigned</dt><dd><a href="html/libvirt-libvirt.html#virDomainGetID">virDomainGetID</a><br />
<a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
</dd><dt>unused</dt><dd><a href="html/libvirt-libvirt.html#virDomainCoreDump">virDomainCoreDump</a><br />
</dd><dt>uri</dt><dd><a href="html/libvirt-libvirt.html#virConnectOpen">virConnectOpen</a><br />
<a href="html/libvirt-libvirt.html#virConnectOpenReadOnly">virConnectOpenReadOnly</a><br />
@ -174,7 +175,9 @@
<a href="html/libvirt-virterror.html#virGetLastError">virGetLastError</a><br />
<a href="html/libvirt-libvirt.html#virGetVersion">virGetVersion</a><br />
<a href="html/libvirt-libvirt.html#virNetworkGetBridgeName">virNetworkGetBridgeName</a><br />
<a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
<a href="html/libvirt-virterror.html#virSetErrorFunc">virSetErrorFunc</a><br />
</dd><dt>whichever</dt><dd><a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
</dd><dt>while</dt><dd><a href="html/libvirt-libvirt.html#virGetVersion">virGetVersion</a><br />
</dd><dt>will</dt><dd><a href="html/libvirt-virterror.html#virConnCopyLastError">virConnCopyLastError</a><br />
<a href="html/libvirt-virterror.html#virConnSetErrorFunc">virConnSetErrorFunc</a><br />
@ -190,6 +193,7 @@
<a href="html/libvirt-libvirt.html#virDomainSuspend">virDomainSuspend</a><br />
<a href="html/libvirt-libvirt.html#virGetVersion">virGetVersion</a><br />
<a href="html/libvirt-libvirt.html#virNetworkGetName">virNetworkGetName</a><br />
<a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
<a href="html/libvirt-virterror.html#virSetErrorFunc">virSetErrorFunc</a><br />
</dd><dt>with</dt><dd><a href="html/libvirt-libvirt.html#VIR_COPY_CPUMAP">VIR_COPY_CPUMAP</a><br />
<a href="html/libvirt-libvirt.html#VIR_CPU_MAPLEN">VIR_CPU_MAPLEN</a><br />
@ -208,6 +212,7 @@
<a href="html/libvirt-libvirt.html#virDomainMigrate">virDomainMigrate</a><br />
<a href="html/libvirt-libvirt.html#virNetworkGetConnect">virNetworkGetConnect</a><br />
<a href="html/libvirt-libvirt.html#virNetworkGetXMLDesc">virNetworkGetXMLDesc</a><br />
<a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
</dd><dt>within</dt><dd><a href="html/libvirt-libvirt.html#virDomainBlockStats">virDomainBlockStats</a><br />
<a href="html/libvirt-libvirt.html#virDomainInterfaceStats">virDomainInterfaceStats</a><br />
</dd><dt>without</dt><dd><a href="html/libvirt-libvirt.html#virDomainSuspend">virDomainSuspend</a><br />

View File

@ -133,6 +133,7 @@
<a href="html/libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a><br />
<a href="html/libvirt-libvirt.html#virNetworkSetAutostart">virNetworkSetAutostart</a><br />
<a href="html/libvirt-libvirt.html#virNetworkUndefine">virNetworkUndefine</a><br />
<a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
<a href="html/libvirt-libvirt.html#virNodeGetInfo">virNodeGetInfo</a><br />
<a href="html/libvirt-libvirt.html#virNodeInfo">virNodeInfo</a><br />
<a href="html/libvirt-libvirt.html#virNodeInfoPtr">virNodeInfoPtr</a><br />

View File

@ -25,6 +25,7 @@
<a href="html/libvirt-libvirt.html#virDomainSetMemory">virDomainSetMemory</a><br />
</p><h2>Type unsigned long *:</h2><p><a href="html/libvirt-libvirt.html#virConnectGetVersion">virConnectGetVersion</a><br />
<a href="html/libvirt-libvirt.html#virGetVersion">virGetVersion</a><br />
</p><h2>Type unsigned long long *:</h2><p><a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
</p><h2>Type virConnectPtr:</h2><p><a href="html/libvirt-virterror.html#virConnCopyLastError">virConnCopyLastError</a><br />
<a href="html/libvirt-virterror.html#virConnGetLastError">virConnGetLastError</a><br />
<a href="html/libvirt-virterror.html#virConnResetLastError">virConnResetLastError</a><br />
@ -57,6 +58,7 @@
<a href="html/libvirt-libvirt.html#virNetworkLookupByName">virNetworkLookupByName</a><br />
<a href="html/libvirt-libvirt.html#virNetworkLookupByUUID">virNetworkLookupByUUID</a><br />
<a href="html/libvirt-libvirt.html#virNetworkLookupByUUIDString">virNetworkLookupByUUIDString</a><br />
<a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
<a href="html/libvirt-libvirt.html#virNodeGetInfo">virNodeGetInfo</a><br />
</p><h2>Type virDomainBlockStatsPtr:</h2><p><a href="html/libvirt-libvirt.html#virDomainBlockStats">virDomainBlockStats</a><br />
</p><h2>Type virDomainInfoPtr:</h2><p><a href="html/libvirt-libvirt.html#virDomainGetInfo">virDomainGetInfo</a><br />

View File

@ -210,6 +210,7 @@
<a href="html/libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a><br />
<a href="html/libvirt-libvirt.html#virNetworkSetAutostart">virNetworkSetAutostart</a><br />
<a href="html/libvirt-libvirt.html#virNetworkUndefine">virNetworkUndefine</a><br />
<a href="html/libvirt-libvirt.html#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a><br />
<a href="html/libvirt-libvirt.html#virNodeGetInfo">virNodeGetInfo</a><br />
<a href="html/libvirt-libvirt.html#virNodeInfo">virNodeInfo</a><br />
<a href="html/libvirt-libvirt.html#virNodeInfoPtr">virNodeInfoPtr</a><br />

View File

@ -124,6 +124,7 @@ int <a href="#virConnectNumOfDefinedDomains">virConnectNumOfDefinedDomains</a> (
<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> <a href="#virNetworkDefineXML">virNetworkDefineXML</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> const char * xml);
int <a href="#virNetworkCreate">virNetworkCreate</a> (<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> network);
int <a href="#virDomainSetSchedulerParameters">virDomainSetSchedulerParameters</a> (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br/> <a href="libvirt-libvirt.html#virSchedParameterPtr">virSchedParameterPtr</a> params, <br/> int nparams);
int <a href="#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> unsigned long long * freeMems, <br/> int startCell, <br/> int maxCells);
int <a href="#virConnectClose">virConnectClose</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn);
int <a href="#virDomainReboot">virDomainReboot</a> (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> domain, <br/> unsigned int flags);
int <a href="#virDomainBlockStats">virDomainBlockStats</a> (<a href="libvirt-libvirt.html#virDomainPtr">virDomainPtr</a> dom, <br/> const char * path, <br/> <a href="libvirt-libvirt.html#virDomainBlockStatsPtr">virDomainBlockStatsPtr</a> stats, <br/> size_t size);
@ -683,6 +684,10 @@ The content of this structure is not made public by the API.
<div class="refsect2" lang="en"><h3><a name="virNetworkUndefine"/>virNetworkUndefine ()</h3><pre class="programlisting">int virNetworkUndefine (<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> network)<br/>
</pre><p>Undefine a network but does not stop it if it is running</p>
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>network</tt></i>:</span></td><td>pointer to a defined network</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, -1 in case of error</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virNodeGetCellsFreeMemory"/>virNodeGetCellsFreeMemory ()</h3><pre class="programlisting">int virNodeGetCellsFreeMemory (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> unsigned long long * freeMems, <br/> int startCell, <br/> int maxCells)<br/>
</pre><p>This call returns the amount of free memory in one or more NUMA cells. The @freeMems array must be allocated by the caller and will be filled with the amount of free memory in kilobytes for each cell requested, starting with startCell (in freeMems[0]), up to either (startCell + maxCells), or the number of additional cells in the node, whichever is smaller.</p>
<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr><tr><td><span class="term"><i><tt>freeMems</tt></i>:</span></td><td>pointer to the array of unsigned long long</td></tr><tr><td><span class="term"><i><tt>startCell</tt></i>:</span></td><td>index of first cell to return freeMems info on.</td></tr><tr><td><span class="term"><i><tt>maxCells</tt></i>:</span></td><td>Maximum number of cells for which freeMems information can be returned.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of entries filled in freeMems, or -1 in case of error.</td></tr></tbody></table></div></div>
<hr/>
<div class="refsect2" lang="en"><h3><a name="virNodeGetInfo"/>virNodeGetInfo ()</h3><pre class="programlisting">int virNodeGetInfo (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br/> <a href="libvirt-libvirt.html#virNodeInfoPtr">virNodeInfoPtr</a> info)<br/>
</pre><p>Extract hardware information about the node.</p>

View File

@ -105,6 +105,7 @@ The content of this structure is not made public by the API.
<pre class="programlisting"><a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> <a href="#virNetworkLookupByUUIDString">virNetworkLookupByUUIDString</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> const char * uuidstr)</pre>
<pre class="programlisting">int <a href="#virNetworkSetAutostart">virNetworkSetAutostart</a> (<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> network, <br /> int autostart)</pre>
<pre class="programlisting">int <a href="#virNetworkUndefine">virNetworkUndefine</a> (<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> network)</pre>
<pre class="programlisting">int <a href="#virNodeGetCellsFreeMemory">virNodeGetCellsFreeMemory</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> unsigned long long * freeMems, <br /> int startCell, <br /> int maxCells)</pre>
<pre class="programlisting">int <a href="#virNodeGetInfo">virNodeGetInfo</a> (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> <a href="libvirt-libvirt.html#virNodeInfoPtr">virNodeInfoPtr</a> info)</pre>
<h2>Description</h2>
<h3><a name="LIBVIR_VERSION_NUMBER" id="LIBVIR_VERSION_NUMBER"></a>Macro: LIBVIR_VERSION_NUMBER</h3><pre>#define LIBVIR_VERSION_NUMBER</pre><p>Macro providing the version of the library as version * 1,000,000 + minor * 1000 + micro</p>
@ -368,6 +369,8 @@ The content of this structure is not made public by the API.
</pre><p>Configure the network to be automatically started when the host machine boots.</p>
<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>network</tt></i>:</span></td><td>a network object</td></tr><tr><td><span class="term"><i><tt>autostart</tt></i>:</span></td><td>whether the network should be automatically started 0 or 1</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>-1 in case of error, 0 in case of success</td></tr></tbody></table></div><h3><a name="virNetworkUndefine" id="virNetworkUndefine"></a>Function: virNetworkUndefine</h3><pre class="programlisting">int virNetworkUndefine (<a href="libvirt-libvirt.html#virNetworkPtr">virNetworkPtr</a> network)<br />
</pre><p>Undefine a network but does not stop it if it is running</p>
<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>network</tt></i>:</span></td><td>pointer to a defined network</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, -1 in case of error</td></tr></tbody></table></div><h3><a name="virNodeGetInfo" id="virNodeGetInfo"></a>Function: virNodeGetInfo</h3><pre class="programlisting">int virNodeGetInfo (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> <a href="libvirt-libvirt.html#virNodeInfoPtr">virNodeInfoPtr</a> info)<br />
<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>network</tt></i>:</span></td><td>pointer to a defined network</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, -1 in case of error</td></tr></tbody></table></div><h3><a name="virNodeGetCellsFreeMemory" id="virNodeGetCellsFreeMemory"></a>Function: virNodeGetCellsFreeMemory</h3><pre class="programlisting">int virNodeGetCellsFreeMemory (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> unsigned long long * freeMems, <br /> int startCell, <br /> int maxCells)<br />
</pre><p>This call returns the amount of free memory in one or more NUMA cells. The @freeMems array must be allocated by the caller and will be filled with the amount of free memory in kilobytes for each cell requested, starting with startCell (in freeMems[0]), up to either (startCell + maxCells), or the number of additional cells in the node, whichever is smaller.</p>
<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr><tr><td><span class="term"><i><tt>freeMems</tt></i>:</span></td><td>pointer to the array of unsigned long long</td></tr><tr><td><span class="term"><i><tt>startCell</tt></i>:</span></td><td>index of first cell to return freeMems info on.</td></tr><tr><td><span class="term"><i><tt>maxCells</tt></i>:</span></td><td>Maximum number of cells for which freeMems information can be returned.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of entries filled in freeMems, or -1 in case of error.</td></tr></tbody></table></div><h3><a name="virNodeGetInfo" id="virNodeGetInfo"></a>Function: virNodeGetInfo</h3><pre class="programlisting">int virNodeGetInfo (<a href="libvirt-libvirt.html#virConnectPtr">virConnectPtr</a> conn, <br /> <a href="libvirt-libvirt.html#virNodeInfoPtr">virNodeInfoPtr</a> info)<br />
</pre><p>Extract hardware information about the node.</p>
<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>conn</tt></i>:</span></td><td>pointer to the hypervisor connection</td></tr><tr><td><span class="term"><i><tt>info</tt></i>:</span></td><td>pointer to a <a href="libvirt-libvirt.html#virNodeInfo">virNodeInfo</a> structure allocated by the user</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success and -1 in case of failure.</td></tr></tbody></table></div></div></div><div class="linkList2"><div class="llinks2"><h3 class="links2"><span>main menu</span></h3><ul><li><a href="../index.html">Home</a></li><li><a href="../html/index.html">API Menu</a></li><li><a href="../examples/index.html">C code examples</a></li><li><a href="../ChangeLog.html">Recent Changes</a></li></ul></div><div class="llinks2"><h3 class="links2"><span>related links</span></h3><ul><li><a href="https://www.redhat.com/archives/libvir-list/">Mail archive</a></li><li><a href="https://bugzilla.redhat.com/bugzilla/buglist.cgi?product=Fedora+Core&amp;component=libvirt&amp;bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;bug_status=MODIFIED&amp;short_desc_type=allwordssubstr&amp;short_desc=&amp;long_desc_type=allwordssubstr">Open bugs</a></li><li><a href="http://virt-manager.et.redhat.com/">virt-manager</a></li><li><a href="http://search.cpan.org/~danberr/Sys-Virt-0.1.0/">Perl bindings</a></li><li><a href="http://et.redhat.com/~rjones/ocaml-libvirt/">OCaml bindings</a></li><li><a href="http://www.cl.cam.ac.uk/Research/SRG/netos/xen/index.html">Xen project</a></li><li><form action="../search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="12" value="Search..." /><input name="submit" type="submit" value="Go" /></form></li><li><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-90x34.gif" alt="Made with Libxml2 Logo" /></a></li></ul><p class="credits">Graphics and design by <a href="mail:dfong@redhat.com">Diana Fong</a></p></div></div><div id="bottom"><p class="p1"></p></div></div></body></html>

View File

@ -352,6 +352,12 @@ updated on <i>2007-08-20</i>.
<td> &#8805; 0.2.0 </td>
<td> &#8805; 0.2.0 </td>
<td> &#8805; 0.3.0 </td>
</tr><tr><td> virNodeGetCellsFreeMemory </td>
<td> 0.3.3 </td>
<td> &#8805; 0.3.3 </td>
<td></td>
<td></td>
<td></td>
</tr></table><h3>Network functions</h3><p>
Network functions are not hypervisor-specific. For historical
reasons they require the QEMU daemon to be running (this

View File

@ -3235,6 +3235,14 @@ updated on <i>2007-08-20</i>.
<td> &ge; 0.2.0 </td>
<td> &ge; 0.3.0 </td>
</tr>
<tr>
<td> virNodeGetCellsFreeMemory </td>
<td> 0.3.3 </td>
<td> &ge; 0.3.3 </td>
<td></td>
<td></td>
<td></td>
</tr>
</table>
<h3>Network functions</h3>

View File

@ -119,6 +119,7 @@
<exports symbol='virNetworkDefineXML' type='function'/>
<exports symbol='virNetworkCreate' type='function'/>
<exports symbol='virDomainSetSchedulerParameters' type='function'/>
<exports symbol='virNodeGetCellsFreeMemory' type='function'/>
<exports symbol='virConnectClose' type='function'/>
<exports symbol='virDomainReboot' type='function'/>
<exports symbol='virDomainBlockStats' type='function'/>
@ -966,6 +967,14 @@
<return type='int' info='0 in case of success, -1 in case of error'/>
<arg name='network' type='virNetworkPtr' info='pointer to a defined network'/>
</function>
<function name='virNodeGetCellsFreeMemory' file='libvirt' module='libvirt'>
<info>This call returns the amount of free memory in one or more NUMA cells. The @freeMems array must be allocated by the caller and will be filled with the amount of free memory in kilobytes for each cell requested, starting with startCell (in freeMems[0]), up to either (startCell + maxCells), or the number of additional cells in the node, whichever is smaller.</info>
<return type='int' info='the number of entries filled in freeMems, or -1 in case of error.'/>
<arg name='conn' type='virConnectPtr' info='pointer to the hypervisor connection'/>
<arg name='freeMems' type='unsigned long long *' info='pointer to the array of unsigned long long'/>
<arg name='startCell' type='int' info='index of first cell to return freeMems info on.'/>
<arg name='maxCells' type='int' info='Maximum number of cells for which freeMems information can be returned.'/>
</function>
<function name='virNodeGetInfo' file='libvirt' module='libvirt'>
<info>Extract hardware information about the node.</info>
<return type='int' info='0 in case of success and -1 in case of failure.'/>

View File

@ -211,6 +211,7 @@
<reference name='virNetworkPtr' href='html/libvirt-libvirt.html#virNetworkPtr'/>
<reference name='virNetworkSetAutostart' href='html/libvirt-libvirt.html#virNetworkSetAutostart'/>
<reference name='virNetworkUndefine' href='html/libvirt-libvirt.html#virNetworkUndefine'/>
<reference name='virNodeGetCellsFreeMemory' href='html/libvirt-libvirt.html#virNodeGetCellsFreeMemory'/>
<reference name='virNodeGetInfo' href='html/libvirt-libvirt.html#virNodeGetInfo'/>
<reference name='virNodeInfo' href='html/libvirt-libvirt.html#virNodeInfo'/>
<reference name='virNodeInfoPtr' href='html/libvirt-libvirt.html#virNodeInfoPtr'/>
@ -442,6 +443,7 @@
<ref name='virNetworkPtr'/>
<ref name='virNetworkSetAutostart'/>
<ref name='virNetworkUndefine'/>
<ref name='virNodeGetCellsFreeMemory'/>
<ref name='virNodeGetInfo'/>
<ref name='virNodeInfo'/>
<ref name='virNodeInfoPtr'/>
@ -532,6 +534,9 @@
<ref name='virConnectGetVersion'/>
<ref name='virGetVersion'/>
</type>
<type name='unsigned long long *'>
<ref name='virNodeGetCellsFreeMemory'/>
</type>
<type name='virConnectPtr'>
<ref name='virConnCopyLastError'/>
<ref name='virConnGetLastError'/>
@ -565,6 +570,7 @@
<ref name='virNetworkLookupByName'/>
<ref name='virNetworkLookupByUUID'/>
<ref name='virNetworkLookupByUUIDString'/>
<ref name='virNodeGetCellsFreeMemory'/>
<ref name='virNodeGetInfo'/>
</type>
<type name='virDomainBlockStatsPtr'>
@ -789,6 +795,7 @@
<ref name='virNetworkPtr'/>
<ref name='virNetworkSetAutostart'/>
<ref name='virNetworkUndefine'/>
<ref name='virNodeGetCellsFreeMemory'/>
<ref name='virNodeGetInfo'/>
<ref name='virNodeInfo'/>
<ref name='virNodeInfoPtr'/>
@ -1080,6 +1087,9 @@
<ref name='LIBVIR_VERSION_NUMBER'/>
<ref name='VIR_DOMAIN_SCHED_FIELD_LENGTH'/>
</word>
<word name='Maximum'>
<ref name='virNodeGetCellsFreeMemory'/>
</word>
<word name='Mbps'>
<ref name='virDomainMigrate'/>
</word>
@ -1090,6 +1100,7 @@
<letter name='N'>
<word name='NUMA'>
<ref name='_virNodeInfo'/>
<ref name='virNodeGetCellsFreeMemory'/>
</word>
<word name='Normally'>
<ref name='virConnectGetURI'/>
@ -1359,6 +1370,9 @@
<word name='add'>
<ref name='virDomainShutdown'/>
</word>
<word name='additional'>
<ref name='virNodeGetCellsFreeMemory'/>
</word>
<word name='address'>
<ref name='virDomainMigrate'/>
</word>
@ -1390,6 +1404,7 @@
<ref name='virDomainSetMaxMemory'/>
<ref name='virDomainSetMemory'/>
<ref name='virDomainSuspend'/>
<ref name='virNodeGetCellsFreeMemory'/>
<ref name='virNodeGetInfo'/>
</word>
<word name='allowed'>
@ -1409,6 +1424,7 @@
<ref name='virDomainGetMaxMemory'/>
<ref name='virDomainSetMaxMemory'/>
<ref name='virDomainSetMemory'/>
<ref name='virNodeGetCellsFreeMemory'/>
</word>
<word name='analysis'>
<ref name='virDomainCoreDump'/>
@ -1459,6 +1475,7 @@
<ref name='virDomainGetVcpus'/>
<ref name='virNetworkGetUUID'/>
<ref name='virNetworkGetUUIDString'/>
<ref name='virNodeGetCellsFreeMemory'/>
</word>
<word name='associated'>
<ref name='virDomainGetConnect'/>
@ -1621,6 +1638,7 @@
<ref name='virNetworkCreate'/>
<ref name='virNetworkDestroy'/>
<ref name='virNetworkGetConnect'/>
<ref name='virNodeGetCellsFreeMemory'/>
</word>
<word name='callback'>
<ref name='virConnSetErrorFunc'/>
@ -1643,6 +1661,7 @@
<ref name='virDomainGetXMLDesc'/>
<ref name='virNetworkGetBridgeName'/>
<ref name='virNetworkGetXMLDesc'/>
<ref name='virNodeGetCellsFreeMemory'/>
</word>
<word name='calling'>
<ref name='virDomainBlockStats'/>
@ -1661,6 +1680,7 @@
<ref name='virDomainGetInfo'/>
<ref name='virDomainMigrate'/>
<ref name='virDomainPinVcpu'/>
<ref name='virNodeGetCellsFreeMemory'/>
</word>
<word name='cannot'>
<ref name='virDomainLookupByID'/>
@ -1692,6 +1712,10 @@
</word>
<word name='cell'>
<ref name='_virNodeInfo'/>
<ref name='virNodeGetCellsFreeMemory'/>
</word>
<word name='cells'>
<ref name='virNodeGetCellsFreeMemory'/>
</word>
<word name='change'>
<ref name='virDomainPinVcpu'/>
@ -1954,6 +1978,10 @@
<ref name='virDomainInterfaceStats'/>
<ref name='virDomainMigrate'/>
<ref name='virDomainPinVcpu'/>
<ref name='virNodeGetCellsFreeMemory'/>
</word>
<word name='either'>
<ref name='virNodeGetCellsFreeMemory'/>
</word>
<word name='element'>
<ref name='virConnectGetMaxVcpus'/>
@ -1965,6 +1993,9 @@
<ref name='virDomainGetXMLDesc'/>
<ref name='virNetworkGetXMLDesc'/>
</word>
<word name='entries'>
<ref name='virNodeGetCellsFreeMemory'/>
</word>
<word name='especially'>
<ref name='virConnectClose'/>
</word>
@ -2025,6 +2056,7 @@
<word name='filled'>
<ref name='virDomainGetSchedulerParameters'/>
<ref name='virDomainGetVcpus'/>
<ref name='virNodeGetCellsFreeMemory'/>
</word>
<word name='find'>
<ref name='virDomainLookupByID'/>
@ -2036,6 +2068,7 @@
<word name='first'>
<ref name='virConnectOpen'/>
<ref name='virConnectOpenReadOnly'/>
<ref name='virNodeGetCellsFreeMemory'/>
</word>
<word name='flags'>
<ref name='virDomainCoreDump'/>
@ -2079,6 +2112,10 @@
<ref name='virDomainGetXMLDesc'/>
<ref name='virNetworkGetBridgeName'/>
<ref name='virNetworkGetXMLDesc'/>
<ref name='virNodeGetCellsFreeMemory'/>
</word>
<word name='freeMems'>
<ref name='virNodeGetCellsFreeMemory'/>
</word>
<word name='freed'>
<ref name='virConnectGetHostname'/>
@ -2264,6 +2301,9 @@
<ref name='virDomainGetConnect'/>
<ref name='virNetworkGetConnect'/>
</word>
<word name='index'>
<ref name='virNodeGetCellsFreeMemory'/>
</word>
<word name='indicates'>
<ref name='virDomainBlockStats'/>
<ref name='virDomainInterfaceStats'/>
@ -2275,6 +2315,7 @@
</word>
<word name='info'>
<ref name='virDomainGetVcpus'/>
<ref name='virNodeGetCellsFreeMemory'/>
</word>
<word name='information'>
<ref name='_virError'/>
@ -2283,6 +2324,7 @@
<ref name='virDomainGetVcpus'/>
<ref name='virGetVersion'/>
<ref name='virNetworkGetUUIDString'/>
<ref name='virNodeGetCellsFreeMemory'/>
<ref name='virNodeGetInfo'/>
</word>
<word name='informative'>
@ -2353,6 +2395,7 @@
<ref name='virDomainGetMaxMemory'/>
<ref name='virDomainSetMaxMemory'/>
<ref name='virDomainSetMemory'/>
<ref name='virNodeGetCellsFreeMemory'/>
</word>
<word name='knowing'>
<ref name='virDomainShutdown'/>
@ -2458,6 +2501,9 @@
<word name='live'>
<ref name='virDomainMigrate'/>
</word>
<word name='long'>
<ref name='virNodeGetCellsFreeMemory'/>
</word>
<word name='looked'>
<ref name='virGetVersion'/>
</word>
@ -2517,6 +2563,9 @@
<ref name='virDomainGetVcpus'/>
<ref name='virDomainPinVcpu'/>
</word>
<word name='maxCells'>
<ref name='virNodeGetCellsFreeMemory'/>
</word>
<word name='maximum'>
<ref name='_virDomainInfo'/>
<ref name='virConnectGetMaxVcpus'/>
@ -2565,6 +2614,7 @@
<ref name='virDomainSetMaxMemory'/>
<ref name='virDomainSetMemory'/>
<ref name='virDomainSuspend'/>
<ref name='virNodeGetCellsFreeMemory'/>
</word>
<word name='message'>
<ref name='_virError'/>
@ -2610,6 +2660,7 @@
<ref name='virDomainInterfaceStats'/>
<ref name='virDomainMigrate'/>
<ref name='virNetworkGetUUIDString'/>
<ref name='virNodeGetCellsFreeMemory'/>
</word>
<word name='moves'>
<ref name='virDomainCreate'/>
@ -2639,6 +2690,7 @@
<ref name='virDomainMigrate'/>
<ref name='virNetworkGetBridgeName'/>
<ref name='virNetworkGetXMLDesc'/>
<ref name='virNodeGetCellsFreeMemory'/>
</word>
<word name='mysterious'>
<ref name='_virDomainBlockStats'/>
@ -2706,6 +2758,7 @@
</word>
<word name='node'>
<ref name='_virNodeInfo'/>
<ref name='virNodeGetCellsFreeMemory'/>
<ref name='virNodeGetInfo'/>
</word>
<word name='non'>
@ -2744,6 +2797,7 @@
<ref name='virDomainGetVcpus'/>
<ref name='virDomainMigrate'/>
<ref name='virNetworkCreateXML'/>
<ref name='virNodeGetCellsFreeMemory'/>
</word>
<word name='only'>
<ref name='virConnectGetVersion'/>
@ -3000,6 +3054,9 @@
<ref name='virDomainReboot'/>
<ref name='virDomainShutdown'/>
</word>
<word name='requested'>
<ref name='virNodeGetCellsFreeMemory'/>
</word>
<word name='required'>
<ref name='VIR_CPU_MAPLEN'/>
<ref name='VIR_UUID_BUFLEN'/>
@ -3058,6 +3115,7 @@
<ref name='virDomainMigrate'/>
<ref name='virGetVersion'/>
<ref name='virNetworkDestroy'/>
<ref name='virNodeGetCellsFreeMemory'/>
</word>
<word name='returned'>
<ref name='virConnectGetCapabilities'/>
@ -3076,6 +3134,7 @@
<ref name='virNetworkGetAutostart'/>
<ref name='virNetworkGetBridgeName'/>
<ref name='virNetworkGetXMLDesc'/>
<ref name='virNodeGetCellsFreeMemory'/>
</word>
<word name='returns'>
<ref name='VIR_CPU_MAPLEN'/>
@ -3087,6 +3146,7 @@
<ref name='virConnectGetVersion'/>
<ref name='virDomainBlockStats'/>
<ref name='virDomainInterfaceStats'/>
<ref name='virNodeGetCellsFreeMemory'/>
</word>
<word name='reused'>
<ref name='virDomainGetXMLDesc'/>
@ -3210,6 +3270,9 @@
<ref name='virDomainSetMaxMemory'/>
<ref name='virDomainSetMemory'/>
</word>
<word name='smaller'>
<ref name='virNodeGetCellsFreeMemory'/>
</word>
<word name='socket'>
<ref name='_virNodeInfo'/>
</word>
@ -3235,12 +3298,18 @@
<ref name='virNetworkCreate'/>
<ref name='virNetworkCreateXML'/>
</word>
<word name='startCell'>
<ref name='virNodeGetCellsFreeMemory'/>
</word>
<word name='started'>
<ref name='virDomainGetAutostart'/>
<ref name='virDomainSetAutostart'/>
<ref name='virNetworkGetAutostart'/>
<ref name='virNetworkSetAutostart'/>
</word>
<word name='starting'>
<ref name='virNodeGetCellsFreeMemory'/>
</word>
<word name='startup'>
<ref name='virInitialize'/>
</word>
@ -3525,6 +3594,7 @@
</word>
<word name='unsigned'>
<ref name='virDomainGetID'/>
<ref name='virNodeGetCellsFreeMemory'/>
</word>
<word name='unused'>
<ref name='virDomainCoreDump'/>
@ -3783,8 +3853,12 @@
<ref name='virGetLastError'/>
<ref name='virGetVersion'/>
<ref name='virNetworkGetBridgeName'/>
<ref name='virNodeGetCellsFreeMemory'/>
<ref name='virSetErrorFunc'/>
</word>
<word name='whichever'>
<ref name='virNodeGetCellsFreeMemory'/>
</word>
<word name='while'>
<ref name='virGetVersion'/>
</word>
@ -3803,6 +3877,7 @@
<ref name='virDomainSuspend'/>
<ref name='virGetVersion'/>
<ref name='virNetworkGetName'/>
<ref name='virNodeGetCellsFreeMemory'/>
<ref name='virSetErrorFunc'/>
</word>
<word name='with'>
@ -3823,6 +3898,7 @@
<ref name='virDomainMigrate'/>
<ref name='virNetworkGetConnect'/>
<ref name='virNetworkGetXMLDesc'/>
<ref name='virNodeGetCellsFreeMemory'/>
</word>
<word name='within'>
<ref name='virDomainBlockStats'/>

View File

@ -71,8 +71,8 @@ Remote libvirt supports a range of transports:
<a href="http://www.openssh.com/" title="OpenSSH homepage">ssh
(secure shell)</a> connection.
Requires <a href="http://netcat.sourceforge.net/">Netcat (nc)</a>
installed on the remote machine, and the remote libvirtd should
be listening on the unix transport. You should use some sort of
installed and libvirtd should be running
on the remote machine. You should use some sort of
ssh key management (eg.
<a href="http://mah.everybody.org/docs/ssh" title="Using ssh-agent with ssh">ssh-agent</a>)
otherwise programs which use

View File

@ -121,6 +121,7 @@ capabilities in terms of CPU and features, and a set of description
for each kind of guest which can be virtualized. For a more complete
description see:
L<http://libvirt.org/format.html#Capa1>
The XML also show the NUMA topology informations if available.
=item B<list>
@ -141,6 +142,11 @@ B<virsh> list
Name is the name of the domain. ID the domain numeric id.
State is the run state (see below).
=item B<freecell> optional I<cellno>
Prints the available amount of memory on the machine or within a
NUMA cell if I<cellno> is provided.
=over 4
B<STATES>

View File

@ -581,6 +581,15 @@ int virDomainGetVcpus (virDomainPtr domain,
int virDomainAttachDevice(virDomainPtr domain, char *xml);
int virDomainDetachDevice(virDomainPtr domain, char *xml);
/*
* NUMA support
*/
int virNodeGetCellsFreeMemory(virConnectPtr conn,
unsigned long long *freeMems,
int startCell,
int maxCells);
/*
* Virtual Networks API
*/

View File

@ -581,6 +581,15 @@ int virDomainGetVcpus (virDomainPtr domain,
int virDomainAttachDevice(virDomainPtr domain, char *xml);
int virDomainDetachDevice(virDomainPtr domain, char *xml);
/*
* NUMA support
*/
int virNodeGetCellsFreeMemory(virConnectPtr conn,
unsigned long long *freeMems,
int startCell,
int maxCells);
/*
* Virtual Networks API
*/

View File

@ -255,6 +255,13 @@ typedef virDomainPtr
typedef struct _virDriver virDriver;
typedef virDriver *virDriverPtr;
typedef int
(*virDrvNodeGetCellsFreeMemory)
(virConnectPtr conn,
unsigned long long *freeMems,
int startCell,
int maxCells);
/**
* _virDriver:
*
@ -322,6 +329,7 @@ struct _virDriver {
virDrvDomainMigrateFinish domainMigrateFinish;
virDrvDomainBlockStats domainBlockStats;
virDrvDomainInterfaceStats domainInterfaceStats;
virDrvNodeGetCellsFreeMemory nodeGetCellsFreeMemory;
};
typedef int

View File

@ -2633,6 +2633,45 @@ virDomainDetachDevice(virDomainPtr domain, char *xml)
return -1;
}
/**
* virNodeGetCellsFreeMemory:
* @conn: pointer to the hypervisor connection
* @freeMems: pointer to the array of unsigned long long
* @startCell: index of first cell to return freeMems info on.
* @maxCells: Maximum number of cells for which freeMems information can
* be returned.
*
* This call returns the amount of free memory in one or more NUMA cells.
* The @freeMems array must be allocated by the caller and will be filled
* with the amount of free memory in kilobytes for each cell requested,
* starting with startCell (in freeMems[0]), up to either
* (startCell + maxCells), or the number of additional cells in the node,
* whichever is smaller.
*
* Returns the number of entries filled in freeMems, or -1 in case of error.
*/
int
virNodeGetCellsFreeMemory(virConnectPtr conn, unsigned long long *freeMems,
int startCell, int maxCells)
{
if (!VIR_IS_CONNECT(conn)) {
virLibConnError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__);
return (-1);
}
if ((freeMems == NULL) || (maxCells <= 0)) {
virLibConnError(conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
return (-1);
}
if (conn->driver->nodeGetCellsFreeMemory)
return conn->driver->nodeGetCellsFreeMemory (conn, freeMems, startCell, maxCells);
virLibConnError (conn, VIR_ERR_NO_SUPPORT, __FUNCTION__);
return -1;
}
/**
* virNetworkGetConnect:
* @net: pointer to a network

View File

@ -20,6 +20,7 @@
virDomainGetUUID;
virDomainGetUUIDString;
virDomainGetInfo;
virNodeGetCellsFreeMemory;
virDomainGetMaxMemory;
virDomainGetName;
virDomainGetOSType;
@ -57,6 +58,7 @@
virDefaultErrorFunc;
virNodeGetInfo;
virConnectGetCapabilities;
virNodeGetCellsFreeMemory;
virDomainSetVcpus;
virDomainPinVcpu;

View File

@ -753,6 +753,7 @@ static virDriver openvzDriver = {
NULL, /* domainMigrateFinish */
NULL, /* domainBlockStats */
NULL, /* domainInterfaceStats */
NULL, /* nodeGetCellsFreeMemory */
};
static virNetworkDriver openvzNetworkDriver = {

View File

@ -2704,6 +2704,7 @@ static virDriver qemuDriver = {
NULL, /* domainMigrateFinish */
NULL, /* domainBlockStats */
NULL, /* domainInterfaceStats */
NULL, /* nodeGetCellsFreeMemory */
};
static virNetworkDriver qemuNetworkDriver = {

View File

@ -3150,6 +3150,7 @@ static virDriver driver = {
.domainMigrateFinish = remoteDomainMigrateFinish,
.domainBlockStats = remoteDomainBlockStats,
.domainInterfaceStats = remoteDomainInterfaceStats,
.nodeGetCellsFreeMemory = NULL,
};
static virNetworkDriver network_driver = {

View File

@ -1969,6 +1969,7 @@ static virDriver testDriver = {
NULL, /* domainMigrateFinish */
NULL, /* domainBlockStats */
NULL, /* domainInterfaceStats */
NULL, /* nodeGetCellsFreeMemory */
};
static virNetworkDriver testNetworkDriver = {

View File

@ -1561,6 +1561,48 @@ cmdDominfo(vshControl * ctl, vshCmd * cmd)
return ret;
}
/*
* "freecell" command
*/
static vshCmdInfo info_freecell[] = {
{"syntax", "freecell [<cellno>]"},
{"help", gettext_noop("NUMA free memory")},
{"desc", gettext_noop("display available free memory for the NUMA cell.")},
{NULL, NULL}
};
static vshCmdOptDef opts_freecell[] = {
{"cellno", VSH_OT_DATA, 0, gettext_noop("NUMA cell number")},
{NULL, 0, 0, NULL}
};
static int
cmdFreecell(vshControl * ctl, vshCmd * cmd)
{
int ret;
int cell, cell_given;
unsigned long long memory;
if (!vshConnectionUsability(ctl, ctl->conn, TRUE))
return FALSE;
cell = vshCommandOptInt(cmd, "cellno", &cell_given);
if (!cell_given) {
cell = -1;
}
ret = virNodeGetCellsFreeMemory(ctl->conn, &memory, cell, 1);
if (ret != 1)
return FALSE;
if (cell == -1)
vshPrint(ctl, "%s: %llu kB\n", _("Total"), memory);
else
vshPrint(ctl, "%d: %llu kB\n", cell, memory);
return TRUE;
}
/*
* "vcpuinfo" command
*/
@ -3661,6 +3703,7 @@ static vshCmdDef commands[] = {
{"domblkstat", cmdDomblkstat, opts_domblkstat, info_domblkstat},
{"domifstat", cmdDomIfstat, opts_domifstat, info_domifstat},
{"dumpxml", cmdDumpXML, opts_dumpxml, info_dumpxml},
{"freecell", cmdFreecell, opts_freecell, info_freecell},
{"hostname", cmdHostname, NULL, info_hostname},
{"list", cmdList, opts_list, info_list},
{"migrate", cmdMigrate, opts_migrate, info_migrate},

View File

@ -28,6 +28,7 @@
#include <errno.h>
#include <sys/utsname.h>
#include "xs_internal.h"
#include "xend_internal.h"
/* required for dom0_getdomaininfo_t */
#include <xen/dom0_ops.h>
@ -201,6 +202,15 @@ union xen_getschedulerid {
};
typedef union xen_getschedulerid xen_getschedulerid;
struct xen_v2s4_availheap {
uint32_t min_bitwidth; /* Smallest address width (zero if don't care). */
uint32_t max_bitwidth; /* Largest address width (zero if don't care). */
int32_t node; /* NUMA node (-1 for sum across all nodes). */
uint64_t avail_bytes; /* Bytes available in the specified region. */
};
typedef struct xen_v2s4_availheap xen_v2s4_availheap;
#define XEN_GETDOMAININFOLIST_ALLOC(domlist, size) \
(hypervisor_version < 2 ? \
@ -523,6 +533,11 @@ typedef struct xen_v2d5_setvcpumap xen_v2d5_getvcpumap;
*/
#define XEN_V2_OP_GETSCHEDULERID 4
/*
* from V2 we get the available heap information
*/
#define XEN_V2_OP_GETAVAILHEAP 9
/*
* from V2 we get the scheduler parameter
*/
@ -584,6 +599,7 @@ struct xen_op_v2_sys {
xen_v2_getdomaininfolistop getdomaininfolist;
xen_v2s3_getdomaininfolistop getdomaininfolists3;
xen_v2_getschedulerid getschedulerid;
xen_v2s4_availheap availheap;
uint8_t padding[128];
} u;
};
@ -2012,7 +2028,7 @@ xenHypervisorInit(void)
#endif
return(-1);
}
/* Currently consider RHEL5.0 Fedora7 and xen-unstable */
/* Currently consider RHEL5.0 Fedora7, xen-3.1, and xen-unstable */
sys_interface_version = 2; /* XEN_SYSCTL_INTERFACE_VERSION */
if (virXen_getdomaininfo(fd, 0, &info) == 1) {
/* RHEL 5.0 */
@ -2035,7 +2051,7 @@ xenHypervisorInit(void)
sys_interface_version = 3; /* XEN_SYSCTL_INTERFACE_VERSION */
if (virXen_getdomaininfo(fd, 0, &info) == 1) {
/* xen-unstable */
/* xen-3.1 */
dom_interface_version = 5; /* XEN_DOMCTL_INTERFACE_VERSION */
if (virXen_getvcpusinfo(fd, 0, 0, ipt, NULL, 0) == 0){
#ifdef DEBUG
@ -2045,6 +2061,18 @@ xenHypervisorInit(void)
}
}
sys_interface_version = 4; /* XEN_SYSCTL_INTERFACE_VERSION */
if (virXen_getdomaininfo(fd, 0, &info) == 1) {
/* xen-unstable */
dom_interface_version = 5; /* XEN_DOMCTL_INTERFACE_VERSION */
if (virXen_getvcpusinfo(fd, 0, 0, ipt, NULL, 0) == 0){
#ifdef DEBUG
fprintf(stderr, "Using hypervisor call v2, sys ver4 dom ver5\n");
#endif
goto done;
}
}
hypervisor_version = 1;
sys_interface_version = -1;
if (virXen_getdomaininfo(fd, 0, &info) == 1) {
@ -2200,7 +2228,7 @@ xenHypervisorMakeCapabilitiesXML(virConnectPtr conn ATTRIBUTE_UNUSED,
char line[1024], *str, *token;
regmatch_t subs[4];
char *saveptr = NULL;
int i, r;
int i, r, topology;
char hvm_type[4] = ""; /* "vmx" or "svm" (or "" if not in CPU). */
int host_pae = 0;
@ -2377,6 +2405,12 @@ xenHypervisorMakeCapabilitiesXML(virConnectPtr conn ATTRIBUTE_UNUSED,
</host>\n", -1);
if (r == -1) goto vir_buffer_failed;
if (sys_interface_version >= 4) {
topology = xenDaemonNodeGetTopology(conn, xml);
if (topology != 0)
goto topology_failed;
}
for (i = 0; i < nr_guest_archs; ++i) {
r = virBufferVSprintf (xml,
"\
@ -2438,6 +2472,7 @@ xenHypervisorMakeCapabilitiesXML(virConnectPtr conn ATTRIBUTE_UNUSED,
</guest>\n", -1);
if (r == -1) goto vir_buffer_failed;
}
r = virBufferAdd (xml,
"\
</capabilities>\n", -1);
@ -2450,6 +2485,7 @@ xenHypervisorMakeCapabilitiesXML(virConnectPtr conn ATTRIBUTE_UNUSED,
vir_buffer_failed:
virXenError(VIR_ERR_NO_MEMORY, __FUNCTION__, 0);
topology_failed:
virBufferFree (xml);
return NULL;
}
@ -2938,6 +2974,79 @@ xenHypervisorGetDomainInfo(virDomainPtr domain, virDomainInfoPtr info)
}
#ifndef PROXY
/**
* xenHypervisorNodeGetCellsFreeMemory:
* @conn: pointer to the hypervisor connection
* @freeMems: pointer to the array of unsigned long long
* @startCell: index of first cell to return freeMems info on.
* @maxCells: Maximum number of cells for which freeMems information can
* be returned.
*
* This call returns the amount of free memory in one or more NUMA cells.
* The @freeMems array must be allocated by the caller and will be filled
* with the amount of free memory in kilobytes for each cell requested,
* starting with startCell (in freeMems[0]), up to either
* (startCell + maxCells), or the number of additional cells in the node,
* whichever is smaller.
*
* Returns the number of entries filled in freeMems, or -1 in case of error.
*/
int
xenHypervisorNodeGetCellsFreeMemory(virConnectPtr conn, unsigned long long *freeMems,
int startCell, int maxCells)
{
xen_op_v2_sys op_sys;
int i, j, ret;
xenUnifiedPrivatePtr priv;
static int nbNodeCells = -1;
virNodeInfo nodeInfo;
if (nbNodeCells == -1) {
if (xenDaemonNodeGetInfo(conn, &nodeInfo)) {
virXenErrorFunc (VIR_ERR_XEN_CALL, __FUNCTION__,
"cannot determine actual number of cells",0);
return -1;
}
nbNodeCells = nodeInfo.nodes;
}
if ((conn == NULL) || (maxCells < 1) || (startCell >= nbNodeCells)) {
virXenErrorFunc (VIR_ERR_INVALID_ARG, __FUNCTION__,
"invalid argument", 0);
return -1;
}
/*
* Support only sys_interface_version >=4
*/
if (sys_interface_version < 4) {
virXenErrorFunc (VIR_ERR_XEN_CALL, __FUNCTION__,
"unsupported in sys interface < 4", 0);
return -1;
}
priv = (xenUnifiedPrivatePtr) conn->privateData;
if (priv->handle < 0) {
virXenErrorFunc (VIR_ERR_INTERNAL_ERROR, __FUNCTION__,
"priv->handle invalid", 0);
return -1;
}
memset(&op_sys, 0, sizeof(op_sys));
op_sys.cmd = XEN_V2_OP_GETAVAILHEAP;
for (i = startCell, j = 0;(i < nbNodeCells) && (j < maxCells);i++,j++) {
op_sys.u.availheap.node = i;
ret = xenHypervisorDoV2Sys(priv->handle, &op_sys);
if (ret < 0) {
return(-1);
}
freeMems[j] = op_sys.u.availheap.avail_bytes;
}
return (j);
}
/**
* xenHypervisorPauseDomain:
* @domain: pointer to the domain block

View File

@ -93,6 +93,10 @@ int xenHypervisorDomainInterfaceStats (virDomainPtr domain,
const char *path,
struct _virDomainInterfaceStats *stats);
int xenHypervisorNodeGetCellsFreeMemory(virConnectPtr conn,
unsigned long long *freeMems,
int startCell,
int maxCells);
#ifdef __cplusplus
}
#endif

View File

@ -1053,6 +1053,20 @@ xenUnifiedDomainInterfaceStats (virDomainPtr dom, const char *path,
return -1;
}
static int
xenUnifiedNodeGetCellsFreeMemory (virConnectPtr conn, unsigned long long *freeMems,
int startCell, int maxCells)
{
GET_PRIVATE (conn);
if (priv->opened[XEN_UNIFIED_HYPERVISOR_OFFSET])
return xenHypervisorNodeGetCellsFreeMemory (conn, freeMems,
startCell, maxCells);
xenUnifiedError (conn, VIR_ERR_NO_SUPPORT, __FUNCTION__);
return -1;
}
/*----- Register with libvirt.c, and initialise Xen drivers. -----*/
#define VERSION ((DOM0_INTERFACE_VERSION >> 24) * 1000000 + \
@ -1113,6 +1127,7 @@ static virDriver xenUnifiedDriver = {
.domainMigrateFinish = xenUnifiedDomainMigrateFinish,
.domainBlockStats = xenUnifiedDomainBlockStats,
.domainInterfaceStats = xenUnifiedDomainInterfaceStats,
.nodeGetCellsFreeMemory = xenUnifiedNodeGetCellsFreeMemory,
};
/**

View File

@ -30,6 +30,7 @@
#include <arpa/inet.h>
#include <netdb.h>
#include <libxml/uri.h>
#include <ctype.h>
#include <errno.h>
#include "libvirt/libvirt.h"
@ -1871,6 +1872,198 @@ sexpr_to_xend_node_info(struct sexpr *root, virNodeInfoPtr info)
return (0);
}
/**
* getNumber:
* @pointer: pointer to string beginning with numerical characters
* @result: pointer to integer for storing the numerical result
*
* Internal routine extracting a number from the beginning of a string
*
* Returns the number of characters that were extracted as digits
* or -1 if no digits were found.
*/
static int
getNumber (const char * pointer, int * result) {
int len = 0;
while (isdigit(*(pointer + len)))
len++;
if (len == 0)
return -1;
*(result) = atoi(pointer);
return (len);
}
/**
* sexpr_to_xend_topology_xml:
* @root: an S-Expression describing a node
*
* Internal routine creating an XML string with the values from
* the node root provided.
*
* Returns 0 in case of success, -1 in case of error
*/
static int
sexpr_to_xend_topology_xml(virConnectPtr conn, struct sexpr *root, virBufferPtr xml)
{
const char *nodeToCpu;
const char *offset;
int cellNum;
int numCells = 0;
int numCpus;
int cellCpuCount = 0;
int nodeCpuCount = 0;
int start;
int finish;
int r;
int i;
int len;
int cpuNum;
int *cpuIdsPtr = NULL;
int *iCpuIdsPtr = NULL;
char next;
nodeToCpu = sexpr_node(root, "node/node_to_cpu");
if (nodeToCpu == NULL) {
virXendError(conn, VIR_ERR_INTERNAL_ERROR,
_("failed to parse topology information"));
goto error;
}
numCells = sexpr_int(root, "node/nr_nodes");
numCpus = sexpr_int(root, "node/nr_cpus");
/* array for holding all cpu numbers associated with a single cell.
* Should never need more than numCpus (which is total number of
* cpus for the node)
*/
cpuIdsPtr = iCpuIdsPtr = malloc(numCpus * sizeof(int));
if (cpuIdsPtr == NULL) {
goto vir_buffer_failed;
}
/* start filling in xml */
r = virBufferVSprintf (xml,
"\
<topology>\n\
<cells num='%d'>\n",
numCells);
if (r == -1) goto vir_buffer_failed;
offset = nodeToCpu;
/* now iterate through all cells and find associated cpu ids */
/* example of string being parsed: "node0:0-3,7,9-10\n node1:11-14\n" */
while ((offset = strstr(offset, "node")) != NULL) {
cpuIdsPtr = iCpuIdsPtr;
cellCpuCount = 0;
offset +=4;
if ((len = getNumber(offset, &cellNum)) < 0) {
virXendError(conn, VIR_ERR_XEN_CALL, " topology string syntax error");
goto error;
}
offset += len;
if (*(offset) != ':') {
virXendError(conn, VIR_ERR_XEN_CALL, " topology string syntax error");
goto error;
}
offset++;
/* get list of cpus associated w/ single cell */
while (1) {
if ((len = getNumber(offset, &cpuNum)) < 0) {
virXendError(conn, VIR_ERR_XEN_CALL, " topology string syntax error");
goto error;
}
offset += len;
next = *(offset);
if (next == '-') {
offset++;
start = cpuNum;
if ((len = getNumber(offset, &finish)) < 0) {
virXendError(conn, VIR_ERR_XEN_CALL, " topology string syntax error");
goto error;
}
if (start > finish) {
virXendError(conn, VIR_ERR_XEN_CALL, " topology string syntax error");
goto error;
}
for (i=start; i<=finish && nodeCpuCount<numCpus; i++) {
*(cpuIdsPtr++) = i;
cellCpuCount++;
nodeCpuCount++;
}
if (nodeCpuCount > numCpus) {
virXendError(conn, VIR_ERR_XEN_CALL,
"conflicting cpu counts");
goto error;
}
offset += len;
next = *(offset);
offset++;
if (next == ',') {
continue;
} else if ((next == '\\') || (next =='\0')) {
break;
} else {
virXendError(conn, VIR_ERR_XEN_CALL,
" topology string syntax error");
goto error;
}
} else {
/* add the single number */
if (nodeCpuCount >= numCpus) {
virXendError(conn, VIR_ERR_XEN_CALL,
"conflicting cpu counts");
goto error;
}
*(cpuIdsPtr++) = cpuNum;
cellCpuCount++;
nodeCpuCount++;
if (next == ',') {
offset++;
continue;
} else if ((next == '\\') || (next =='\0')) {
break;
} else {
virXendError(conn, VIR_ERR_XEN_CALL,
" topology string syntax error");
goto error;
}
}
}
/* add xml for all cpus associated with one cell */
r = virBufferVSprintf (xml, "\
<cell id='%d'>\n\
<cpus num='%d'>\n", cellNum, cellCpuCount);
if (r == -1) goto vir_buffer_failed;
for (i = 0; i < cellCpuCount; i++) {
r = virBufferVSprintf (xml, "\
<cpu id='%d'/>\n", *(iCpuIdsPtr + i));
if (r == -1) goto vir_buffer_failed;
}
r = virBufferAdd (xml, "\
</cpus>\n\
</cell>\n", -1);
if (r == -1) goto vir_buffer_failed;
}
r = virBufferAdd (xml, "\
</cells>\n\
</topology>\n", -1);
if (r == -1) goto vir_buffer_failed;
free(iCpuIdsPtr);
return (0);
vir_buffer_failed:
virXendError(conn, VIR_ERR_NO_MEMORY, _("allocate new buffer"));
error:
if (iCpuIdsPtr)
free(iCpuIdsPtr);
return (-1);
}
#ifndef PROXY
/**
* sexpr_to_domain:
@ -2588,6 +2781,39 @@ xenDaemonNodeGetInfo(virConnectPtr conn, virNodeInfoPtr info) {
return (ret);
}
/**
* xenDaemonNodeGetTopology:
* @conn: pointer to the Xen Daemon block
*
* This method retrieves a node's topology information.
*
* Returns -1 in case of error, 0 otherwise.
*/
int
xenDaemonNodeGetTopology(virConnectPtr conn, virBufferPtr xml) {
int ret = -1;
struct sexpr *root;
if (!VIR_IS_CONNECT(conn)) {
virXendError(conn, VIR_ERR_INVALID_CONN, __FUNCTION__);
return (-1);
}
if (xml == NULL) {
virXendError(conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
return (-1);
}
root = sexpr_get(conn, "/xend/node/");
if (root == NULL) {
return (-1);
}
ret = sexpr_to_xend_topology_xml(conn, root, xml);
sexpr_free(root);
return (ret);
}
#ifndef PROXY
/**
* xenDaemonGetType:

View File

@ -19,6 +19,7 @@
#include <stdbool.h>
#include "libvirt/libvirt.h"
#include "buf.h"
#ifdef __cplusplus
extern "C" {
@ -182,6 +183,7 @@ int xenDaemonOpen(virConnectPtr conn, const char *name, int flags);
int xenDaemonClose(virConnectPtr conn);
int xenDaemonGetVersion(virConnectPtr conn, unsigned long *hvVer);
int xenDaemonNodeGetInfo(virConnectPtr conn, virNodeInfoPtr info);
int xenDaemonNodeGetTopology(virConnectPtr conn, virBufferPtr xml);
int xenDaemonDomainSuspend(virDomainPtr domain);
int xenDaemonDomainResume(virDomainPtr domain);
int xenDaemonDomainShutdown(virDomainPtr domain);

View File

@ -129,7 +129,7 @@
.\" ========================================================================
.\"
.IX Title "VIRSH 1"
.TH VIRSH 1 "2007-08-14" "perl v5.8.8" "Virtualization Support"
.TH VIRSH 1 "2007-09-28" "perl v5.8.8" "Virtualization Support"
.SH "NAME"
virsh \- management user interface
.SH "SYNOPSIS"
@ -241,6 +241,7 @@ capabilities in terms of \s-1CPU\s0 and features, and a set of description
for each kind of guest which can be virtualized. For a more complete
description see:
<http://libvirt.org/format.html#Capa1>
The \s-1XML\s0 also show the \s-1NUMA\s0 topology informations if available.
.IP "\fBlist\fR" 4
.IX Item "list"
Prints information about one or more domains. If no domains are
@ -260,6 +261,10 @@ An example format for the list is as follows:
.Sp
Name is the name of the domain. \s-1ID\s0 the domain numeric id.
State is the run state (see below).
.IP "\fBfreecell\fR optional \fIcellno\fR" 4
.IX Item "freecell optional cellno"
Prints the available amount of memory on the machine or within a
\&\s-1NUMA\s0 cell if \fIcellno\fR is provided.
.RS 4
.Sp
.RS 4