[ https://issues.apache.org/jira/browse/CLOUDSTACK-9428?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15432054#comment-15432054 ]
ASF GitHub Bot commented on CLOUDSTACK-9428: -------------------------------------------- Github user serg38 commented on a diff in the pull request: https://github.com/apache/cloudstack/pull/1605#discussion_r75796954 --- Diff: plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java --- @@ -2042,49 +2043,46 @@ protected void postVideoCardMemoryConfigBeforeStart(VirtualMachineMO vmMo, Virtu * Search for vm video card iterating through vm device list * @param vmMo virtual machine mo * @param svgaVmramSize new svga vram size (in KB) + * @param vmConfigSpec virtual machine config spec */ - private void setNewVRamSizeVmVideoCard(VirtualMachineMO vmMo, long svgaVmramSize) throws Exception { + protected void setNewVRamSizeVmVideoCard(VirtualMachineMO vmMo, long svgaVmramSize, VirtualMachineConfigSpec vmConfigSpec) throws Exception { for (VirtualDevice device : vmMo.getAllDeviceList()){ if (device instanceof VirtualMachineVideoCard){ VirtualMachineVideoCard videoCard = (VirtualMachineVideoCard) device; - modifyVmVideoCardVRamSize(videoCard, vmMo, svgaVmramSize); + modifyVmVideoCardVRamSize(videoCard, vmMo, svgaVmramSize, vmConfigSpec); } } } /** - * Modifies vm vram size if it was set to a different size to the one provided in svga.vramSize (user_vm_details or template_vm_details) + * Modifies vm vram size if it was set to a different size to the one provided in svga.vramSize (user_vm_details or template_vm_details) on {@code vmConfigSpec} * @param videoCard vm's video card device * @param vmMo virtual machine mo * @param svgaVmramSize new svga vram size (in KB) + * @param vmConfigSpec virtual machine config spec */ - private void modifyVmVideoCardVRamSize(VirtualMachineVideoCard videoCard, VirtualMachineMO vmMo, long svgaVmramSize) throws Exception { + private void modifyVmVideoCardVRamSize(VirtualMachineVideoCard videoCard, VirtualMachineMO vmMo, long svgaVmramSize, VirtualMachineConfigSpec vmConfigSpec) throws Exception { if (videoCard.getVideoRamSizeInKB().longValue() != svgaVmramSize){ s_logger.info("Video card memory was set " + videoCard.getVideoRamSizeInKB().longValue() + "kb instead of " + svgaVmramSize + "kb"); - VirtualMachineConfigSpec newSizeSpecs = configSpecVideoCardNewVRamSize(videoCard, svgaVmramSize); - boolean res = vmMo.configureVm(newSizeSpecs); - if (res) { - s_logger.info("Video card memory successfully updated to " + svgaVmramSize + "kb"); - } + configSpecVideoCardNewVRamSize(videoCard, svgaVmramSize, vmConfigSpec); } } /** - * Returns a VirtualMachineConfigSpec to edit its svga vram size + * Add edit spec on {@code vmConfigSpec} to modify svga vram size * @param videoCard video card device to edit providing the svga vram size * @param svgaVmramSize new svga vram size (in KB) + * @param vmConfigSpec virtual machine spec */ - private VirtualMachineConfigSpec configSpecVideoCardNewVRamSize(VirtualMachineVideoCard videoCard, long svgaVmramSize){ + private void configSpecVideoCardNewVRamSize(VirtualMachineVideoCard videoCard, long svgaVmramSize, VirtualMachineConfigSpec vmConfigSpec){ 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); - return changeVideoCardSpecs; + vmConfigSpec.getDeviceChange().add(arrayVideoCardConfigSpecs); --- End diff -- I don't think so. Device change done in the structure locally and exception occurs during the VM reconfiguration on the hypervisor if anything in the config is wrong. > Fix for CLOUDSTACK-9211 - Improve performance > --------------------------------------------- > > Key: CLOUDSTACK-9428 > URL: https://issues.apache.org/jira/browse/CLOUDSTACK-9428 > Project: CloudStack > Issue Type: Improvement > Security Level: Public(Anyone can view this level - this is the > default.) > Components: VMware > Reporter: Nicolas Vazquez > Assignee: Nicolas Vazquez > > h3. Introduction > On [CLOUDSTACK-9211|https://issues.apache.org/jira/browse/CLOUDSTACK-9211] > passing vRAM size to support 3D GPU problem was addressed on VMware. It was > found out that it could be improved to increase performance by reducing extra > API calls, as we'll describe later > h3. Improvement > On WMware, {{VmwareResource}} manages execution of {{StartCommand}}. Before > sending power on command to ESXi hypervisor, vm is configured by calling > {{reconfigVMTask}} web method on vSphere's client {{VimPortType}} web service. > It was found out that we were using this method 2 times when passing vRAM > size, as it implied creating a new vm config spec only editing video card > specs and making an extra call to {{reconfigVMTask}}. > We propose reducing the extra web service call by adjusting vm's config spec. > This way video card gets properly configured (when passing vRAM size) in the > same configure call, increasing performance. > h3. Use case (passing vRAM size) > # Deploy a new VM, let its id be X > # Stop VM > # Execute SQL, where X is vm's id and Z is vRAM size (in kB): {code:sql} > INSERT INTO cloud.user_vm_details (vm_id, name, value) VALUES (X, > 'mks.enable3d', 'true'); > INSERT INTO cloud.user_vm_details (vm_id, name, value) VALUES (X, > 'mks.use3dRenderer', 'automatic'); > INSERT INTO cloud.user_vm_details (vm_id, name, value) VALUES (X, > 'svga.autodetect', 'false'); > INSERT INTO cloud.user_vm_details (vm_id, name, value) VALUES (X, > 'svga.vramSize', Z); > {code} > # Start VM -- This message was sent by Atlassian JIRA (v6.3.4#6332)