[ 
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)

Reply via email to