accel/tcg/translate-all.c | 4 ++++ 1 file changed, 4 insertions(+)
There are two justifications for making this change. The first is that
i386 emulation is typically for smaller machines where having a 1gb of
generated code is overkill for basic emulation. The second is the
propensity of self-modifying code (c.f. Doom/edit) utilised on i386
systems can trigger a rapid growth in invalidated and re-translated
buffers. This is seen in bug #283. Execution is still inefficient but
at least the host memory isn't so aggressively used up.
That said it's still really just a sticking plaster for user
convenience.
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Cc: Thomas Huth <thuth@redhat.com>
Cc: 1896298@bugs.launchpad.net
---
accel/tcg/translate-all.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/accel/tcg/translate-all.c b/accel/tcg/translate-all.c
index 640ff6e3e7..f442165674 100644
--- a/accel/tcg/translate-all.c
+++ b/accel/tcg/translate-all.c
@@ -951,9 +951,13 @@ static void page_lock_pair(PageDesc **ret_p1, tb_page_addr_t phys1,
* Users running large scale system emulation may want to tweak their
* runtime setup via the tb-size control on the command line.
*/
+#ifdef TARGET_I386
+#define DEFAULT_CODE_GEN_BUFFER_SIZE_1 (32 * MiB)
+#else
#define DEFAULT_CODE_GEN_BUFFER_SIZE_1 (1 * GiB)
#endif
#endif
+#endif
#define DEFAULT_CODE_GEN_BUFFER_SIZE \
(DEFAULT_CODE_GEN_BUFFER_SIZE_1 < MAX_CODE_GEN_BUFFER_SIZE \
--
2.20.1
--
You received this bug notification because you are a member of qemu-
devel-ml, which is subscribed to QEMU.
https://bugs.launchpad.net/bugs/1896298
Title:
TCG memory leak with FreeDOS 'edit'
Status in QEMU:
Expired
Bug description:
qemu trunk as of today leaks memory FAST when freedos' edit is
running.
To reproduce, download:
https://www.ibiblio.org/pub/micro/pc-
stuff/freedos/files/repositories/1.3/cdrom.iso
Then run:
$ qemu-system-i386 -cdrom cdrom.iso
select your language then select "return to DOS", then type
> edit
it will consume memory at ~10MB/s
This does NOT happen when adding -enable-kvm
To manage notifications about this bug go to:
https://bugs.launchpad.net/qemu/+bug/1896298/+subscriptions
On 5/25/21 9:45 AM, Alex Bennée wrote: > There are two justifications for making this change. The first is that > i386 emulation is typically for smaller machines where having a 1gb of > generated code is overkill for basic emulation. The second is the > propensity of self-modifying code (c.f. Doom/edit) utilised on i386 > systems can trigger a rapid growth in invalidated and re-translated > buffers. This is seen in bug #283. Execution is still inefficient but > at least the host memory isn't so aggressively used up. > > That said it's still really just a sticking plaster for user > convenience. > > Signed-off-by: Alex Bennée <alex.bennee@linaro.org> > Cc: Thomas Huth <thuth@redhat.com> > Cc: 1896298@bugs.launchpad.net > --- > accel/tcg/translate-all.c | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/accel/tcg/translate-all.c b/accel/tcg/translate-all.c > index 640ff6e3e7..f442165674 100644 > --- a/accel/tcg/translate-all.c > +++ b/accel/tcg/translate-all.c > @@ -951,9 +951,13 @@ static void page_lock_pair(PageDesc **ret_p1, tb_page_addr_t phys1, > * Users running large scale system emulation may want to tweak their > * runtime setup via the tb-size control on the command line. > */ > +#ifdef TARGET_I386 > +#define DEFAULT_CODE_GEN_BUFFER_SIZE_1 (32 * MiB) > +#else > #define DEFAULT_CODE_GEN_BUFFER_SIZE_1 (1 * GiB) > #endif > #endif > +#endif > > #define DEFAULT_CODE_GEN_BUFFER_SIZE \ > (DEFAULT_CODE_GEN_BUFFER_SIZE_1 < MAX_CODE_GEN_BUFFER_SIZE \ > I'm not thrilled, as it is ultra-hacky. (1) I've got a re-org of this code out for review: https://patchew.org/QEMU/20210502231844.1977630-1-richard.henderson@linaro.org/ (2) I'm keen to reorg TCG such that it gets compiled once. There's currently nothing standing in the way of that except work. But this would introduce a use of a target-specific define for the first time into tcg/. I guess I could leave the default sizing back in accel/tcg/ and pass in the default. Other options? r~
Alex Bennée <alex.bennee@linaro.org> writes: > There are two justifications for making this change. The first is that > i386 emulation is typically for smaller machines where having a 1gb of > generated code is overkill for basic emulation. The second is the > propensity of self-modifying code (c.f. Doom/edit) utilised on i386 > systems can trigger a rapid growth in invalidated and re-translated > buffers. This is seen in bug #283. Execution is still inefficient but > at least the host memory isn't so aggressively used up. > > That said it's still really just a sticking plaster for user > convenience. ping? -- Alex Bennée
© 2016 - 2024 Red Hat, Inc.