From 0214e54162f75e6749c6423d79c5dee90b1a4226 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Wed, 26 Jul 2023 16:10:08 +0200 Subject: [libvirt] Add methods for setting CPU migratable and pinning --- .../java/org/openslx/libvirt/domain/Domain.java | 44 ++++++++++++++++++++++ 1 file changed, 44 insertions(+) (limited to 'src/main/java/org/openslx/libvirt/domain/Domain.java') diff --git a/src/main/java/org/openslx/libvirt/domain/Domain.java b/src/main/java/org/openslx/libvirt/domain/Domain.java index 9dc7200..a8b57ff 100644 --- a/src/main/java/org/openslx/libvirt/domain/Domain.java +++ b/src/main/java/org/openslx/libvirt/domain/Domain.java @@ -730,6 +730,22 @@ public class Domain extends LibvirtXmlDocument this.getRootXmlNode().setXmlElementAttributeValue( "cpu", "mode", mode.toString() ); } + /** + * Returns if the CPU migratable flag is set in the Libvirt domain XML document. + */ + public boolean getCpuMigratable() + { + return this.getRootXmlNode().getXmlElementAttributeValueAsBool( "cpu", "migratable" ); + } + + /** + * Sets if vCPU is migratable in the Libvirt domain XML document. + */ + public void setCpuMigratable( boolean migratable ) + { + this.getRootXmlNode().setXmlElementAttributeValueOnOff( "cpu", "migratable", migratable ); + } + /** * CPU checks specifiable for a virtual machine in the Libvirt domain XML document. * @@ -1689,4 +1705,32 @@ public class Domain extends LibvirtXmlDocument interfaceDevice.setSource( "" ); } } + + /** + * Remove any existing CPU pinning and numa config + */ + public void resetCpuPin() + { + this.getRootXmlNode().removeXmlElement( "cputune" ); + this.getRootXmlNode().removeXmlElement( "numatune" ); + } + + public void addCpuPin( int virtualCore, int hostCore ) + { + final Element rootElement = Element.class.cast( this.getRootXmlNode().getXmlBaseNode() ); + final Document xmlDocument = this.getRootXmlNode().getXmlDocument(); + Node cpuTune = this.getRootXmlNode().getXmlElement( "cputune" ); + if ( cpuTune == null ) { + cpuTune = xmlDocument.createElement( "cputune" ); + rootElement.appendChild( cpuTune ); + } + Element pin = xmlDocument.createElement( "vcpupin" ); + pin.setAttribute( "vcpu", Integer.toString( virtualCore ) ); + pin.setAttribute( "cpuset", Integer.toString( hostCore ) ); + cpuTune.appendChild( pin ); + Node vcpuNode = this.getRootXmlNode().getXmlElement( "vcpu" ); + if ( vcpuNode instanceof Element ) { + ( (Element)vcpuNode ).setAttribute( "placement", "static" ); + } + } } -- cgit v1.2.3-55-g7522