qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PULL 06/16] accel/tcg: better handle memory constrained systems


From: Christian Ehrhardt
Subject: Re: [PULL 06/16] accel/tcg: better handle memory constrained systems
Date: Tue, 28 Jul 2020 17:35:26 +0200



On Mon, Jul 27, 2020 at 2:24 PM Alex Bennée <alex.bennee@linaro.org> wrote:
It turns out there are some 64 bit systems that have relatively low
amounts of physical memory available to them (typically CI system).
Even with swapping available a 1GB translation buffer that fills up
can put the machine under increased memory pressure. Detect these low
memory situations and reduce tb_size appropriately.

Fixes: 600e17b2615 ("accel/tcg: increase default code gen buffer size for 64 bit")
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Robert Foley <robert.foley@linaro.org>
Cc: BALATON Zoltan <balaton@eik.bme.hu>
Cc: Christian Ehrhardt <christian.ehrhardt@canonical.com>
Message-Id: <20200724064509.331-7-alex.bennee@linaro.org" target="_blank">20200724064509.331-7-alex.bennee@linaro.org>

I beg your pardon for the late reply, but I was out a week.
I see this is already the pull request and my former feedback was included - thanks.

Never the less I took the chance to test it in the context that I found and reported the initial bug.
If only to show that I didn't fire&forget this case :-)

We know there is quite some noise/deviation, but I only ran single tests as the problem was easily visible despite the noise. Amount of memory qemu settles on:

Host 32G, Guest 512M
4.2        633M
5.0       1672M
5.0+ Fix  1670M

Host 1.5G, Guest 512M
4.2        692M
5.0       16xxM (OOM)
5.0+ Fix   766M

So we seem to have achieved that small environments no more break (a very small amount of very densely sized systems might still) but at the same time get the bigger cache for any normal/large system.
Tested-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
Reviewed-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
 
diff --git a/accel/tcg/translate-all.c b/accel/tcg/translate-all.c
index 2afa46bd2b1..2d83013633b 100644
--- a/accel/tcg/translate-all.c
+++ b/accel/tcg/translate-all.c
@@ -976,7 +976,12 @@ static inline size_t size_code_gen_buffer(size_t tb_size)
 {
     /* Size the buffer.  */
     if (tb_size == 0) {
-        tb_size = DEFAULT_CODE_GEN_BUFFER_SIZE;
+        size_t phys_mem = qemu_get_host_physmem();
+        if (phys_mem == 0) {
+            tb_size = DEFAULT_CODE_GEN_BUFFER_SIZE;
+        } else {
+            tb_size = MIN(DEFAULT_CODE_GEN_BUFFER_SIZE, phys_mem / 8);
+        }
     }
     if (tb_size < MIN_CODE_GEN_BUFFER_SIZE) {
         tb_size = MIN_CODE_GEN_BUFFER_SIZE;
--
2.20.1



--
Christian Ehrhardt
Staff Engineer, Ubuntu Server
Canonical Ltd

reply via email to

[Prev in Thread] Current Thread [Next in Thread]