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