On Fri, Jul 17, 2020 at 12:51 PM Alex Bennée <alex.ben...@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: 600e17b261 > Signed-off-by: Alex Bennée <alex.ben...@linaro.org> > Cc: BALATON Zoltan <bala...@eik.bme.hu> > Cc: Christian Ehrhardt <christian.ehrha...@canonical.com> > --- > accel/tcg/translate-all.c | 7 ++++++- > 1 file changed, 6 insertions(+), 1 deletion(-) > > diff --git a/accel/tcg/translate-all.c b/accel/tcg/translate-all.c > index 2afa46bd2b1..2ff0ba6d19b 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 && phys_mem < (2 * > DEFAULT_CODE_GEN_BUFFER_SIZE)) { > + tb_size = phys_mem / 4; > In my experiments I've found that /8 more closely matches the former behavior on small hosts while at the same time not affecting common large hosts. > + } else { > + tb_size = DEFAULT_CODE_GEN_BUFFER_SIZE; > + } > } > 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