From 5fa300cd9c64ec6bf3dbe5bf9f224e260e617329 Mon Sep 17 00:00:00 2001 From: Wido den Hollander Date: Tue, 7 Aug 2012 17:48:12 +0200 Subject: [PATCH] kvm: Define CPU shares in domain XML Since libvirt 0.9.0 this can be specified in the XML. This used to be set by invoking virsh after starting the instance, but this is cleaner. --- .../resource/LibvirtComputingResource.java | 8 ++++--- .../hypervisor/kvm/resource/LibvirtVMDef.java | 23 +++++++++++++++++++ 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java index 73101a9896c..026b914bc57 100755 --- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java +++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java @@ -155,6 +155,7 @@ import com.cloud.agent.api.to.VirtualMachineTO; import com.cloud.agent.api.to.VolumeTO; import com.cloud.hypervisor.kvm.resource.KVMHABase.NfsStoragePool; import com.cloud.hypervisor.kvm.resource.LibvirtVMDef.ConsoleDef; +import com.cloud.hypervisor.kvm.resource.LibvirtVMDef.CpuTuneDef; import com.cloud.hypervisor.kvm.resource.LibvirtVMDef.DevicesDef; import com.cloud.hypervisor.kvm.resource.LibvirtVMDef.DiskDef; import com.cloud.hypervisor.kvm.resource.LibvirtVMDef.DiskDef.diskProtocol; @@ -2475,6 +2476,10 @@ public class LibvirtComputingResource extends ServerResourceBase implements grd.setVcpuNum(vmTO.getCpus()); vm.addComp(grd); + CpuTuneDef ctd = new CpuTuneDef(); + ctd.setShares(vmTO.getCpus() * vmTO.getSpeed()); + vm.addComp(ctd); + FeaturesDef features = new FeaturesDef(); features.addFeatures("pae"); features.addFeatures("apic"); @@ -2550,9 +2555,6 @@ public class LibvirtComputingResource extends ServerResourceBase implements s_logger.debug("starting " + vmName + ": " + vm.toString()); startDomain(conn, vmName, vm.toString()); - Script.runSimpleBashScript("virsh schedinfo " + vmName - + " --set cpu_shares=" + vmSpec.getCpus() - * vmSpec.getSpeed()); NicTO[] nics = vmSpec.getNics(); for (NicTO nic : nics) { diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java index 56e3efa79e9..ba6c715e455 100644 --- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java +++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java @@ -752,6 +752,29 @@ public class LibvirtVMDef { } } + public static class CpuTuneDef { + private int _shares = 0; + + public void setShares(int shares) { + _shares = shares; + } + + public int getShares() { + return _shares; + } + + @Override + public String toString() { + StringBuilder cpuTuneBuilder = new StringBuilder(); + cpuTuneBuilder.append("\n"); + if (_shares > 0) { + cpuTuneBuilder.append("" + _shares + "\n"); + } + cpuTuneBuilder.append("\n"); + return cpuTuneBuilder.toString(); + } + } + public static class SerialDef { private final String _type; private final String _source;