From 52a9dbdcd2b22bd7584b8ca403746649da37fac2 Mon Sep 17 00:00:00 2001 From: div8cn <35140268+div8cn@users.noreply.github.com> Date: Tue, 5 Oct 2021 23:34:28 +0800 Subject: [PATCH] kvm available memory calculation optimization (#5540) * Update LibvirtComputingResource.java * Update LibvirtComputingResource.java * Update LibvirtComputingResource.java re * Update MemStat.java * Update MemStat.java * Update MemStatTest.java --- .../java/org/apache/cloudstack/utils/linux/MemStat.java | 7 ++++++- .../org/apache/cloudstack/utils/linux/MemStatTest.java | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/plugins/hypervisors/kvm/src/main/java/org/apache/cloudstack/utils/linux/MemStat.java b/plugins/hypervisors/kvm/src/main/java/org/apache/cloudstack/utils/linux/MemStat.java index afcdf976be5..d62e1a24ce9 100644 --- a/plugins/hypervisors/kvm/src/main/java/org/apache/cloudstack/utils/linux/MemStat.java +++ b/plugins/hypervisors/kvm/src/main/java/org/apache/cloudstack/utils/linux/MemStat.java @@ -35,6 +35,7 @@ public class MemStat { protected final static String FREE_KEY = "MemFree"; protected final static String CACHE_KEY = "Cached"; protected final static String TOTAL_KEY = "MemTotal"; + protected final static String BUFFER_KEY = "Buffers"; long reservedMemory; long overCommitMemory; @@ -55,7 +56,7 @@ public class MemStat { } public long getAvailable() { - return getFree() + getCache(); + return getFree() + getCache() + getBuffer(); } public long getFree() { @@ -66,6 +67,10 @@ public class MemStat { return _memStats.get(CACHE_KEY); } + public long getBuffer() { + return _memStats.get(BUFFER_KEY); + } + public void refresh() { File f = new File(MEMINFO_FILE); try (Scanner scanner = new Scanner(f,"UTF-8")) { diff --git a/plugins/hypervisors/kvm/src/test/java/org/apache/cloudstack/utils/linux/MemStatTest.java b/plugins/hypervisors/kvm/src/test/java/org/apache/cloudstack/utils/linux/MemStatTest.java index 5a2fda87d08..50d4b006e13 100644 --- a/plugins/hypervisors/kvm/src/test/java/org/apache/cloudstack/utils/linux/MemStatTest.java +++ b/plugins/hypervisors/kvm/src/test/java/org/apache/cloudstack/utils/linux/MemStatTest.java @@ -48,7 +48,7 @@ public class MemStatTest { MemStat memStat = new MemStat(); Assert.assertEquals(memStat.getTotal(), 5970161664L); - Assert.assertEquals(memStat.getAvailable(), 2829840384L); + Assert.assertEquals(memStat.getAvailable(), 3164520448L); Assert.assertEquals(memStat.getFree(), 160514048L); Assert.assertEquals(memStat.getCache(), 2669326336L); }