This is an automated email from the ASF dual-hosted git repository.

dahn pushed a commit to branch 4.18
in repository https://gitbox.apache.org/repos/asf/cloudstack.git


The following commit(s) were added to refs/heads/4.18 by this push:
     new dc5e4f3ec6e Allow KVM overcommit to work without reducing minimum VM 
memory when vm ballooning is disabled (#7810)
dc5e4f3ec6e is described below

commit dc5e4f3ec6ef911ab1984ea3078d3e678bca822a
Author: Rohit Yadav <[email protected]>
AuthorDate: Sun Aug 6 14:09:14 2023 +0530

    Allow KVM overcommit to work without reducing minimum VM memory when vm 
ballooning is disabled (#7810)
    
    Signed-off-by: Rohit Yadav <[email protected]>
    Co-authored-by: dahn <[email protected]>
    Co-authored-by: Daan Hoogland <[email protected]>
---
 .../kvm/resource/LibvirtComputingResource.java       | 18 +++++++++---------
 .../cloud/hypervisor/kvm/resource/LibvirtVMDef.java  |  4 ++--
 .../kvm/resource/LibvirtComputingResourceTest.java   |  4 +++-
 .../hypervisor/kvm/resource/LibvirtVMDefTest.java    | 20 ++++++++++----------
 4 files changed, 24 insertions(+), 22 deletions(-)

diff --git 
a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
 
b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
index 39f30b6e934..6fcb5469b6e 100644
--- 
a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
+++ 
b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
@@ -2780,15 +2780,10 @@ public class LibvirtComputingResource extends 
ServerResourceBase implements Serv
 
         grd.setMemBalloning(!_noMemBalloon);
 
-        long maxRam = ByteScaleUtils.bytesToKibibytes(vmTO.getMaxRam());
-        long currRam = vmTO.getType() == VirtualMachine.Type.User ? 
getCurrentMemAccordingToMemBallooning(vmTO, maxRam) : maxRam;
-
-        if (s_logger.isTraceEnabled()) {
-            s_logger.trace(String.format("memory values for VM %s are 
%d/%d",vmTO.getName(),maxRam, currRam));
-        }
+        Long maxRam = ByteScaleUtils.bytesToKibibytes(vmTO.getMaxRam());
 
         grd.setMemorySize(maxRam);
-        grd.setCurrentMem(currRam);
+        grd.setCurrentMem(getCurrentMemAccordingToMemBallooning(vmTO, maxRam));
 
         int vcpus = vmTO.getCpus();
         Integer maxVcpus = vmTO.getVcpuMaxLimit();
@@ -2800,12 +2795,17 @@ public class LibvirtComputingResource extends 
ServerResourceBase implements Serv
     }
 
     protected long getCurrentMemAccordingToMemBallooning(VirtualMachineTO 
vmTO, long maxRam) {
+        long retVal = maxRam;
         if (_noMemBalloon) {
             s_logger.warn(String.format("Setting VM's [%s] current memory as 
max memory [%s] due to memory ballooning is disabled. If you are using a custom 
service offering, verify if memory ballooning really should be disabled.", 
vmTO.toString(), maxRam));
-            return maxRam;
+        } else if (vmTO != null && vmTO.getType() != VirtualMachine.Type.User) 
{
+            s_logger.warn(String.format("Setting System VM's [%s] current 
memory as max memory [%s].", vmTO.toString(), maxRam));
         } else {
-            return ByteScaleUtils.bytesToKibibytes(vmTO.getMinRam());
+            long minRam = ByteScaleUtils.bytesToKibibytes(vmTO.getMinRam());
+            s_logger.debug(String.format("Setting VM's [%s] current memory as 
min memory [%s] due to memory ballooning is enabled.", vmTO.toString(), 
minRam));
+            retVal = minRam;
         }
+        return retVal;
     }
 
     /**
diff --git 
a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java
 
b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java
index 720c48096ef..b739c0ee0ab 100644
--- 
a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java
+++ 
b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java
@@ -282,7 +282,7 @@ public class LibvirtVMDef {
         @Override
         public String toString() {
             StringBuilder response = new StringBuilder();
-            response.append(String.format("<memory>%s</memory>\n", 
this.memory));
+            response.append(String.format("<memory>%s</memory>\n", 
this.currentMemory));
             
response.append(String.format("<currentMemory>%s</currentMemory>\n", 
this.currentMemory));
 
             if (this.memory > this.currentMemory) {
@@ -1238,7 +1238,7 @@ public class LibvirtVMDef {
         @Override
         public String toString() {
             StringBuilder memBalloonBuilder = new StringBuilder();
-            memBalloonBuilder.append("<memballoon model='" + memBalloonModel + 
"' autodeflate='on'>\n");
+            memBalloonBuilder.append("<memballoon model='" + memBalloonModel + 
"'>\n");
             if (StringUtils.isNotBlank(memBalloonStatsPeriod)) {
                 memBalloonBuilder.append("<stats period='" + 
memBalloonStatsPeriod +"'/>\n");
             }
diff --git 
a/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResourceTest.java
 
b/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResourceTest.java
index 58682b2663c..cc658ff8455 100644
--- 
a/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResourceTest.java
+++ 
b/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResourceTest.java
@@ -760,7 +760,7 @@ public class LibvirtComputingResourceTest {
 
     private void verifyMemory(VirtualMachineTO to, Document domainDoc, String 
minRam) {
         assertXpath(domainDoc, "/domain/maxMemory/text()", String.valueOf( 
to.getMaxRam() / 1024 ));
-        assertXpath(domainDoc, "/domain/currentMemory/text()",minRam);
+        assertXpath(domainDoc, "/domain/memory/text()",minRam);
         assertXpath(domainDoc, "/domain/cpu/numa/cell/@memory", minRam);
         assertXpath(domainDoc, "/domain/currentMemory/text()", minRam);
     }
@@ -5762,6 +5762,7 @@ public class LibvirtComputingResourceTest {
 
     public void 
validateGetCurrentMemAccordingToMemBallooningWithoutMemBalooning(){
         VirtualMachineTO vmTo = Mockito.mock(VirtualMachineTO.class);
+        Mockito.when(vmTo.getType()).thenReturn(Type.User);
         LibvirtComputingResource libvirtComputingResource = new 
LibvirtComputingResource();
         libvirtComputingResource._noMemBalloon = true;
         long maxMemory = 2048;
@@ -5780,6 +5781,7 @@ public class LibvirtComputingResourceTest {
         long minMemory = ByteScaleUtils.mebibytesToBytes(64);
 
         VirtualMachineTO vmTo = Mockito.mock(VirtualMachineTO.class);
+        Mockito.when(vmTo.getType()).thenReturn(Type.User);
         Mockito.when(vmTo.getMinRam()).thenReturn(minMemory);
 
         long currentMemory = 
libvirtComputingResource.getCurrentMemAccordingToMemBallooning(vmTo, maxMemory);
diff --git 
a/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/LibvirtVMDefTest.java
 
b/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/LibvirtVMDefTest.java
index 4379ede8293..741f0a8c23d 100644
--- 
a/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/LibvirtVMDefTest.java
+++ 
b/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/LibvirtVMDefTest.java
@@ -214,11 +214,11 @@ public class LibvirtVMDefTest extends TestCase {
         assertEquals(bus, disk.getBusType());
         assertEquals(DiskDef.DeviceType.DISK, disk.getDeviceType());
 
-        String resultingXml = disk.toString();
+        String xmlDef = disk.toString();
         String expectedXml = "<disk  device='disk' type='file'>\n<driver 
name='qemu' type='" + type.toString() + "' cache='" + cacheMode.toString() + "' 
/>\n" +
                              "<source file='" + filePath + "'/>\n<target 
dev='" + diskLabel + "' bus='" + bus.toString() + "'/>\n</disk>\n";
 
-        assertEquals(expectedXml, resultingXml);
+        assertEquals(expectedXml, xmlDef);
     }
 
     @Test
@@ -346,7 +346,7 @@ public class LibvirtVMDefTest extends TestCase {
         LibvirtVMDef.setGlobalQemuVersion(2006000L);
         LibvirtVMDef.setGlobalLibvirtVersion(9008L);
 
-        String resultingXml = disk.toString();
+        String xmlDef = disk.toString();
         String expectedXml = "<disk  device='disk' type='file'>\n<driver 
name='qemu' type='" + type.toString() + "' cache='none' />\n" +
                 "<source file='" + filePath + "'/>\n<target dev='" + diskLabel 
+ "' bus='" + bus.toString() + "'/>\n" +
                 
"<iotune>\n<read_bytes_sec>"+bytesReadRate+"</read_bytes_sec>\n<write_bytes_sec>"+bytesWriteRate+"</write_bytes_sec>\n"
 +
@@ -356,29 +356,29 @@ public class LibvirtVMDefTest extends TestCase {
                 
"<read_bytes_sec_max_length>"+bytesReadRateMaxLength+"</read_bytes_sec_max_length>\n<write_bytes_sec_max_length>"+bytesWriteRateMaxLength+"</write_bytes_sec_max_length>\n"
 +
                 
"<read_iops_sec_max_length>"+iopsReadRateMaxLength+"</read_iops_sec_max_length>\n<write_iops_sec_max_length>"+iopsWriteRateMaxLength+"</write_iops_sec_max_length>\n</iotune>\n</disk>\n";
 
-                assertEquals(expectedXml, resultingXml);
+                assertEquals(expectedXml, xmlDef);
     }
 
     @Test
     public void memBalloonDefTestNone() {
-        String expectedXml = "<memballoon model='none' 
autodeflate='on'>\n</memballoon>";
+        String expectedXml = "<memballoon model='none'>\n</memballoon>";
         MemBalloonDef memBalloonDef = new MemBalloonDef();
         memBalloonDef.defNoneMemBalloon();
 
-        String resultingXml = memBalloonDef.toString();
+        String xmlDef = memBalloonDef.toString();
 
-        assertEquals(expectedXml, resultingXml);
+        assertEquals(expectedXml, xmlDef);
     }
 
     @Test
     public void memBalloonDefTestVirtio() {
-        String expectedXml = "<memballoon model='virtio' 
autodeflate='on'>\n<stats period='60'/>\n</memballoon>";
+        String expectedXml = "<memballoon model='virtio'>\n<stats 
period='60'/>\n</memballoon>";
         MemBalloonDef memBalloonDef = new MemBalloonDef();
         memBalloonDef.defVirtioMemBalloon("60");
 
-        String resultingXml = memBalloonDef.toString();
+        String xmlDef = memBalloonDef.toString();
 
-        assertEquals(expectedXml, resultingXml);
+        assertEquals(expectedXml, xmlDef);
     }
 
     @Test

Reply via email to