mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
CLOUDSTACK-9211: Support passing vRAM size to support 3D GPU on Vmware
This commit is contained in:
parent
ee2ccc4d41
commit
656ae10937
@ -94,6 +94,7 @@ import com.vmware.vim25.VirtualMachinePowerState;
|
||||
import com.vmware.vim25.VirtualMachineRelocateSpec;
|
||||
import com.vmware.vim25.VirtualMachineRelocateSpecDiskLocator;
|
||||
import com.vmware.vim25.VirtualMachineRuntimeInfo;
|
||||
import com.vmware.vim25.VirtualMachineVideoCard;
|
||||
import com.vmware.vim25.VmwareDistributedVirtualSwitchVlanIdSpec;
|
||||
|
||||
import org.apache.cloudstack.storage.command.StorageSubSystemCommand;
|
||||
@ -1895,6 +1896,9 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
|
||||
|
||||
postDiskConfigBeforeStart(vmMo, vmSpec, sortedDisks, ideControllerKey, scsiControllerKey, iqnToPath, hyperHost, context);
|
||||
|
||||
//Sets video card memory to the one provided in detail svga.vramSize (if provided), 64MB was always set before
|
||||
postVideoCardMemoryConfigBeforeStart(vmMo, vmSpec);
|
||||
|
||||
//
|
||||
// Power-on VM
|
||||
//
|
||||
@ -1943,6 +1947,44 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
|
||||
}
|
||||
}
|
||||
|
||||
private void postVideoCardMemoryConfigBeforeStart(VirtualMachineMO vmMo, VirtualMachineTO vmSpec) {
|
||||
String paramVRamSize = "svga.vramSize";
|
||||
if (vmSpec.getDetails().containsKey(paramVRamSize)){
|
||||
String value = vmSpec.getDetails().get(paramVRamSize);
|
||||
try {
|
||||
long svgaVmramSize = Long.parseLong(value);
|
||||
for (VirtualDevice device : vmMo.getAllDeviceList()){
|
||||
if (device instanceof VirtualMachineVideoCard){
|
||||
VirtualMachineVideoCard videoCard = (VirtualMachineVideoCard) device;
|
||||
if (videoCard.getVideoRamSizeInKB().longValue() != svgaVmramSize){
|
||||
s_logger.info("Video card memory was set " + videoCard.getVideoRamSizeInKB().longValue() + "kb instead of " + svgaVmramSize + "kb");
|
||||
videoCard.setVideoRamSizeInKB(svgaVmramSize);
|
||||
videoCard.setUseAutoDetect(false);
|
||||
|
||||
VirtualDeviceConfigSpec arrayVideoCardConfigSpecs = new VirtualDeviceConfigSpec();
|
||||
arrayVideoCardConfigSpecs.setDevice(videoCard);
|
||||
arrayVideoCardConfigSpecs.setOperation(VirtualDeviceConfigSpecOperation.EDIT);
|
||||
|
||||
VirtualMachineConfigSpec changeVideoCardSpecs = new VirtualMachineConfigSpec();
|
||||
changeVideoCardSpecs.getDeviceChange().add(arrayVideoCardConfigSpecs);
|
||||
|
||||
boolean res = vmMo.configureVm(changeVideoCardSpecs);
|
||||
if (res) {
|
||||
s_logger.info("Video card memory successfully updated to " + svgaVmramSize + "kb");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (NumberFormatException e){
|
||||
s_logger.error("Unexpected value, cannot parse " + value + " to long due to: " + e.getMessage());
|
||||
}
|
||||
catch (Exception e){
|
||||
s_logger.error("Error while reconfiguring vm due to: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void tearDownVm(VirtualMachineMO vmMo) throws Exception{
|
||||
|
||||
if(vmMo == null) return;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user