* [KVM_AUTOTEST][PATCH] KSM_overcommit: dynamic reserve calculation (2)
[not found] <[KVM_AUTOTEST][PATCH] KSM_overcommit: dynamic reserve calculation (2)>
@ 2010-05-08 17:01 ` Lukas Doktor
2010-05-12 21:59 ` [Autotest] " Lucas Meneghel Rodrigues
2010-05-08 17:01 ` [PATCH 1/4] Increase maximum number of VNC ports Lukas Doktor
` (3 subsequent siblings)
4 siblings, 1 reply; 7+ messages in thread
From: Lukas Doktor @ 2010-05-08 17:01 UTC (permalink / raw)
To: ldoktor; +Cc: jzupka, kvm, autotest, jasowang, lmr
Hi,
thanks for nice page about git workflow. I always wanted to try it but never had the time to sit down and learn...
Booth the TMPFS and 0.055 guest_reserve constant are set empirically using various RHEL and Fedora guest/hosts. Smaller hosts can work with smaller (0.045) constant but we didn't want to make the code more complex to exactly fit the limits.
Original changelog:
* NEW: guest_reserve and host_reserve are now calculated based on used memory
* NEW: tmpfs reserve is also evaluated to fit the overhead
* NEW: VM alive check during split_guest()
* FIX: In function split_guest() we used incorrect session
* MOD: Increase number of VNC ports
Best regards,
Lukas
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 1/4] Increase maximum number of VNC ports
[not found] <[KVM_AUTOTEST][PATCH] KSM_overcommit: dynamic reserve calculation (2)>
2010-05-08 17:01 ` [KVM_AUTOTEST][PATCH] KSM_overcommit: dynamic reserve calculation (2) Lukas Doktor
@ 2010-05-08 17:01 ` Lukas Doktor
2010-05-17 20:34 ` Lucas Meneghel Rodrigues
2010-05-08 17:01 ` [PATCH 2/4] Add VMs alive check while spliting the guest's pages Lukas Doktor
` (2 subsequent siblings)
4 siblings, 1 reply; 7+ messages in thread
From: Lukas Doktor @ 2010-05-08 17:01 UTC (permalink / raw)
To: ldoktor; +Cc: autotest, kvm
Signed-off-by: Lukas Doktor <ldoktor@redhat.com>
---
client/tests/kvm/kvm_vm.py | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/client/tests/kvm/kvm_vm.py b/client/tests/kvm/kvm_vm.py
index d1e0246..c203e14 100755
--- a/client/tests/kvm/kvm_vm.py
+++ b/client/tests/kvm/kvm_vm.py
@@ -396,7 +396,7 @@ class VM:
# Find available VNC port, if needed
if params.get("display") == "vnc":
- self.vnc_port = kvm_utils.find_free_port(5900, 6000)
+ self.vnc_port = kvm_utils.find_free_port(5900, 6100)
# Find random UUID if specified 'uuid = random' in config file
if params.get("uuid") == "random":
--
1.6.2.5
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 2/4] Add VMs alive check while spliting the guest's pages
[not found] <[KVM_AUTOTEST][PATCH] KSM_overcommit: dynamic reserve calculation (2)>
2010-05-08 17:01 ` [KVM_AUTOTEST][PATCH] KSM_overcommit: dynamic reserve calculation (2) Lukas Doktor
2010-05-08 17:01 ` [PATCH 1/4] Increase maximum number of VNC ports Lukas Doktor
@ 2010-05-08 17:01 ` Lukas Doktor
2010-05-08 17:01 ` [PATCH 3/4] FIX: Incorrect session in function split_guest() Lukas Doktor
2010-05-08 17:01 ` [PATCH 4/4] guest_reserve, host_reserve and tmpfs overhead automatic calculation based on used memory Lukas Doktor
4 siblings, 0 replies; 7+ messages in thread
From: Lukas Doktor @ 2010-05-08 17:01 UTC (permalink / raw)
To: ldoktor; +Cc: autotest, kvm
Signed-off-by: Lukas Doktor <ldoktor@redhat.com>
---
client/tests/kvm/tests/ksm_overcommit.py | 10 ++++++++++
1 files changed, 10 insertions(+), 0 deletions(-)
diff --git a/client/tests/kvm/tests/ksm_overcommit.py b/client/tests/kvm/tests/ksm_overcommit.py
index 4aa6deb..b3d6880 100644
--- a/client/tests/kvm/tests/ksm_overcommit.py
+++ b/client/tests/kvm/tests/ksm_overcommit.py
@@ -142,6 +142,12 @@ def run_ksm_overcommit(test, params, env):
session = None
vm = None
for i in range(1, vmsc):
+ # Check VMs
+ for j in range(0, vmsc):
+ if not lvms[j].is_alive:
+ e_msg = "VM %d died while executing static_random_fill in"\
+ " VM %d on allocator loop" % (j, i)
+ raise error.TestFail(e_msg)
vm = lvms[i]
session = lsessions[i]
a_cmd = "mem.static_random_fill()"
@@ -154,6 +160,10 @@ def run_ksm_overcommit(test, params, env):
logging.debug("Watching host memory while filling vm %s memory",
vm.name)
while not out.startswith("PASS") and not out.startswith("FAIL"):
+ if not vm.is_alive():
+ e_msg = "VM %d died while executing static_random_fill"\
+ " on allocator loop" % i
+ raise error.TestFail(e_msg)
free_mem = int(utils.read_from_meminfo("MemFree"))
if (ksm_swap):
free_mem = (free_mem +
--
1.6.2.5
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 3/4] FIX: Incorrect session in function split_guest()
[not found] <[KVM_AUTOTEST][PATCH] KSM_overcommit: dynamic reserve calculation (2)>
` (2 preceding siblings ...)
2010-05-08 17:01 ` [PATCH 2/4] Add VMs alive check while spliting the guest's pages Lukas Doktor
@ 2010-05-08 17:01 ` Lukas Doktor
2010-05-08 17:01 ` [PATCH 4/4] guest_reserve, host_reserve and tmpfs overhead automatic calculation based on used memory Lukas Doktor
4 siblings, 0 replies; 7+ messages in thread
From: Lukas Doktor @ 2010-05-08 17:01 UTC (permalink / raw)
To: ldoktor; +Cc: autotest, kvm
Signed-off-by: Jiri Zupka <jzupka@redhat.com>
---
client/tests/kvm/tests/ksm_overcommit.py | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/client/tests/kvm/tests/ksm_overcommit.py b/client/tests/kvm/tests/ksm_overcommit.py
index b3d6880..24d6643 100644
--- a/client/tests/kvm/tests/ksm_overcommit.py
+++ b/client/tests/kvm/tests/ksm_overcommit.py
@@ -212,7 +212,7 @@ def run_ksm_overcommit(test, params, env):
# Verify last machine with randomly generated memory
a_cmd = "mem.static_random_verify()"
- _execute_allocator(a_cmd, lvms[last_vm], session,
+ _execute_allocator(a_cmd, lvms[last_vm], lsessions[last_vm],
(mem / 200 * 50 * perf_ratio))
logging.debug(kvm_test_utils.get_memory_info([lvms[last_vm]]))
--
1.6.2.5
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 4/4] guest_reserve, host_reserve and tmpfs overhead automatic calculation based on used memory
[not found] <[KVM_AUTOTEST][PATCH] KSM_overcommit: dynamic reserve calculation (2)>
` (3 preceding siblings ...)
2010-05-08 17:01 ` [PATCH 3/4] FIX: Incorrect session in function split_guest() Lukas Doktor
@ 2010-05-08 17:01 ` Lukas Doktor
4 siblings, 0 replies; 7+ messages in thread
From: Lukas Doktor @ 2010-05-08 17:01 UTC (permalink / raw)
To: ldoktor; +Cc: autotest, kvm
Signed-off-by: Lukas Doktor <ldoktor@redhat.com>
Signed-off-by: Jiri Zupka <jzupka@redhat.com>
---
client/tests/kvm/scripts/allocator.py | 11 +++++---
client/tests/kvm/tests/ksm_overcommit.py | 41 +++++++++++++++++++++++++++---
client/tests/kvm/tests_base.cfg.sample | 6 ++--
3 files changed, 47 insertions(+), 11 deletions(-)
diff --git a/client/tests/kvm/scripts/allocator.py b/client/tests/kvm/scripts/allocator.py
index 1036893..227745a 100755
--- a/client/tests/kvm/scripts/allocator.py
+++ b/client/tests/kvm/scripts/allocator.py
@@ -8,10 +8,12 @@ Auxiliary script used to allocate memory on guests.
"""
-import os, array, sys, struct, random, copy, inspect, tempfile, datetime
+import os, array, sys, struct, random, copy, inspect, tempfile, datetime, math
PAGE_SIZE = 4096 # machine page size
+TMPFS_OVERHEAD = 0.0022 # overhead on 1MB of write data
+
class MemFill(object):
"""
@@ -32,7 +34,8 @@ class MemFill(object):
self.tmpdp = tempfile.mkdtemp()
ret_code = os.system("mount -o size=%dM tmpfs %s -t tmpfs" %
- ((mem + 25), self.tmpdp))
+ ((mem+math.ceil(mem*TMPFS_OVERHEAD)),
+ self.tmpdp))
if ret_code != 0:
if os.getuid() != 0:
print ("FAIL: Unable to mount tmpfs "
@@ -42,7 +45,7 @@ class MemFill(object):
else:
self.f = tempfile.TemporaryFile(prefix='mem', dir=self.tmpdp)
self.allocate_by = 'L'
- self.npages = (mem * 1024 * 1024) / PAGE_SIZE
+ self.npages = ((mem * 1024 * 1024) / PAGE_SIZE)
self.random_key = random_key
self.static_value = static_value
print "PASS: Initialization"
@@ -83,7 +86,7 @@ class MemFill(object):
@return: return array of bytes size PAGE_SIZE.
"""
a = array.array("B")
- for i in range(PAGE_SIZE / a.itemsize):
+ for i in range((PAGE_SIZE / a.itemsize)):
try:
a.append(value)
except:
diff --git a/client/tests/kvm/tests/ksm_overcommit.py b/client/tests/kvm/tests/ksm_overcommit.py
index 24d6643..8dc1722 100644
--- a/client/tests/kvm/tests/ksm_overcommit.py
+++ b/client/tests/kvm/tests/ksm_overcommit.py
@@ -348,12 +348,29 @@ def run_ksm_overcommit(test, params, env):
# Main test code
logging.info("Starting phase 0: Initialization")
+
# host_reserve: mem reserve kept for the host system to run
- host_reserve = int(params.get("ksm_host_reserve", 512))
+ host_reserve = int(params.get("ksm_host_reserve", -1))
+ if (host_reserve == -1):
+ # default host_reserve = MemAvailable + one_minimal_guest(128MB)
+ # later we add 64MB per additional guest
+ host_reserve = ((utils.memtotal() - utils.read_from_meminfo("MemFree"))
+ / 1024 + 128)
+ # using default reserve
+ _host_reserve = True
+ else:
+ _host_reserve = False
+
# guest_reserve: mem reserve kept to avoid guest OS to kill processes
- guest_reserve = int(params.get("ksm_guest_reserve", 1024))
- logging.debug("Memory reserved for host to run: %d", host_reserve)
- logging.debug("Memory reserved for guest to run: %d", guest_reserve)
+ guest_reserve = int(params.get("ksm_guest_reserve", -1))
+ if (guest_reserve == -1):
+ # default guest_reserve = minimal_system_mem(256MB)
+ # later we add tmpfs overhead
+ guest_reserve = 256
+ # using default reserve
+ _guest_reserve = True
+ else:
+ _guest_reserve = False
max_vms = int(params.get("max_vms", 2))
overcommit = float(params.get("ksm_overcommit_ratio", 2.0))
@@ -365,6 +382,10 @@ def run_ksm_overcommit(test, params, env):
if (params['ksm_mode'] == "serial"):
max_alloc = vmsc
+ if _host_reserve:
+ # First round of additional guest reserves
+ host_reserve += vmsc * 64
+ _host_reserve = vmsc
host_mem = (int(utils.memtotal()) / 1024 - host_reserve)
@@ -412,6 +433,10 @@ def run_ksm_overcommit(test, params, env):
if mem - guest_reserve - 1 > 3100:
vmsc = int(math.ceil((host_mem * overcommit) /
(3100 + guest_reserve)))
+ if _host_reserve:
+ host_reserve += (vmsc - _host_reserve) * 64
+ host_mem -= (vmsc - _host_reserve) * 64
+ _host_reserve = vmsc
mem = int(math.floor(host_mem * overcommit / vmsc))
if os.popen("uname -i").readline().startswith("i386"):
@@ -420,8 +445,16 @@ def run_ksm_overcommit(test, params, env):
if mem > 3100 - 64:
vmsc = int(math.ceil((host_mem * overcommit) /
(3100 - 64.0)))
+ if _host_reserve:
+ host_reserve += (vmsc - _host_reserve) * 64
+ host_mem -= (vmsc - _host_reserve) * 64
+ _host_reserve = vmsc
mem = int(math.floor(host_mem * overcommit / vmsc))
+ # 0.055 represents OS + TMPFS additional reserve per guest ram MB
+ if _guest_reserve:
+ guest_reserve += math.ceil(mem * 0.055)
+
swap = int(utils.read_from_meminfo("SwapTotal")) / 1024
logging.debug("Overcommit = %f", overcommit)
diff --git a/client/tests/kvm/tests_base.cfg.sample b/client/tests/kvm/tests_base.cfg.sample
index bb3646c..06eaa74 100644
--- a/client/tests/kvm/tests_base.cfg.sample
+++ b/client/tests/kvm/tests_base.cfg.sample
@@ -305,9 +305,9 @@ variants:
ksm_overcommit_ratio = 3
# Max paralel runs machine
ksm_parallel_ratio = 4
- # Host memory reserve
- ksm_host_reserve = 512
- ksm_guest_reserve = 1024
+ # Host memory reserve (default - best fit for used mem)
+ # ksm_host_reserve = 512
+ # ksm_guest_reserve = 1024
variants:
- ksm_serial:
ksm_mode = "serial"
--
1.6.2.5
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [Autotest] [KVM_AUTOTEST][PATCH] KSM_overcommit: dynamic reserve calculation (2)
2010-05-08 17:01 ` [KVM_AUTOTEST][PATCH] KSM_overcommit: dynamic reserve calculation (2) Lukas Doktor
@ 2010-05-12 21:59 ` Lucas Meneghel Rodrigues
0 siblings, 0 replies; 7+ messages in thread
From: Lucas Meneghel Rodrigues @ 2010-05-12 21:59 UTC (permalink / raw)
To: Lukas Doktor; +Cc: autotest, kvm
Hi Lukas and Jiri - please hold on, cause this week I'm on vacation,
will be back next week and will finish work on your patchset.
Cheers,
On Sat, May 8, 2010 at 2:01 PM, Lukas Doktor <ldoktor@redhat.com> wrote:
> Hi,
>
> thanks for nice page about git workflow. I always wanted to try it but never had the time to sit down and learn...
>
> Booth the TMPFS and 0.055 guest_reserve constant are set empirically using various RHEL and Fedora guest/hosts. Smaller hosts can work with smaller (0.045) constant but we didn't want to make the code more complex to exactly fit the limits.
>
> Original changelog:
> * NEW: guest_reserve and host_reserve are now calculated based on used memory
> * NEW: tmpfs reserve is also evaluated to fit the overhead
> * NEW: VM alive check during split_guest()
> * FIX: In function split_guest() we used incorrect session
> * MOD: Increase number of VNC ports
>
> Best regards,
> Lukas
>
>
> _______________________________________________
> Autotest mailing list
> Autotest@test.kernel.org
> http://test.kernel.org/cgi-bin/mailman/listinfo/autotest
>
--
Lucas
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 1/4] Increase maximum number of VNC ports
2010-05-08 17:01 ` [PATCH 1/4] Increase maximum number of VNC ports Lukas Doktor
@ 2010-05-17 20:34 ` Lucas Meneghel Rodrigues
0 siblings, 0 replies; 7+ messages in thread
From: Lucas Meneghel Rodrigues @ 2010-05-17 20:34 UTC (permalink / raw)
To: Lukas Doktor; +Cc: jzupka, kvm, autotest, jasowang
On Sat, 2010-05-08 at 18:01 +0100, Lukas Doktor wrote:
> Signed-off-by: Lukas Doktor <ldoktor@redhat.com>
The new patch set looks good, commited them all, see:
http://autotest.kernel.org/changeset/4492
Thanks!
> ---
> client/tests/kvm/kvm_vm.py | 2 +-
> 1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/client/tests/kvm/kvm_vm.py b/client/tests/kvm/kvm_vm.py
> index d1e0246..c203e14 100755
> --- a/client/tests/kvm/kvm_vm.py
> +++ b/client/tests/kvm/kvm_vm.py
> @@ -396,7 +396,7 @@ class VM:
>
> # Find available VNC port, if needed
> if params.get("display") == "vnc":
> - self.vnc_port = kvm_utils.find_free_port(5900, 6000)
> + self.vnc_port = kvm_utils.find_free_port(5900, 6100)
>
> # Find random UUID if specified 'uuid = random' in config file
> if params.get("uuid") == "random":
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2010-05-17 20:34 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <[KVM_AUTOTEST][PATCH] KSM_overcommit: dynamic reserve calculation (2)>
2010-05-08 17:01 ` [KVM_AUTOTEST][PATCH] KSM_overcommit: dynamic reserve calculation (2) Lukas Doktor
2010-05-12 21:59 ` [Autotest] " Lucas Meneghel Rodrigues
2010-05-08 17:01 ` [PATCH 1/4] Increase maximum number of VNC ports Lukas Doktor
2010-05-17 20:34 ` Lucas Meneghel Rodrigues
2010-05-08 17:01 ` [PATCH 2/4] Add VMs alive check while spliting the guest's pages Lukas Doktor
2010-05-08 17:01 ` [PATCH 3/4] FIX: Incorrect session in function split_guest() Lukas Doktor
2010-05-08 17:01 ` [PATCH 4/4] guest_reserve, host_reserve and tmpfs overhead automatic calculation based on used memory Lukas Doktor
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.