Basing the TB cache size on the ram_size was always a little heuristic
and was broken by a1b18df9a4 which caused ram_size not to be fully
realised at the time we initialise the TCG translation cache.
The current DEFAULT_CODE_GEN_BUFFER_SIZE may still be a little small
but follow-up patches will address that.
Fixes: a1b18df9a4
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Cc: Niek Linnenbank <nieklinnenbank@gmail.com>
Cc: Igor Mammedov <imammedo@redhat.com>
---
accel/tcg/translate-all.c | 8 --------
1 file changed, 8 deletions(-)
diff --git a/accel/tcg/translate-all.c b/accel/tcg/translate-all.c
index 238b0e575bf..5b66af783b5 100644
--- a/accel/tcg/translate-all.c
+++ b/accel/tcg/translate-all.c
@@ -938,15 +938,7 @@ static inline size_t size_code_gen_buffer(size_t tb_size)
{
/* Size the buffer. */
if (tb_size == 0) {
-#ifdef USE_STATIC_CODE_GEN_BUFFER
tb_size = DEFAULT_CODE_GEN_BUFFER_SIZE;
-#else
- /* ??? Needs adjustments. */
- /* ??? If we relax the requirement that CONFIG_USER_ONLY use the
- static buffer, we could size this on RESERVED_VA, on the text
- segment size of the executable, or continue to use the default. */
- tb_size = (unsigned long)(ram_size / 4);
-#endif
}
if (tb_size < MIN_CODE_GEN_BUFFER_SIZE) {
tb_size = MIN_CODE_GEN_BUFFER_SIZE;
--
2.20.1
On 2/26/20 10:10 AM, Alex Bennée wrote: > Basing the TB cache size on the ram_size was always a little heuristic > and was broken by a1b18df9a4 which caused ram_size not to be fully > realised at the time we initialise the TCG translation cache. > > The current DEFAULT_CODE_GEN_BUFFER_SIZE may still be a little small > but follow-up patches will address that. > > Fixes: a1b18df9a4 > Signed-off-by: Alex Bennée <alex.bennee@linaro.org> > Cc: Niek Linnenbank <nieklinnenbank@gmail.com> > Cc: Igor Mammedov <imammedo@redhat.com> > --- > accel/tcg/translate-all.c | 8 -------- > 1 file changed, 8 deletions(-) Reviewed-by: Richard Henderson <richard.henderson@linaro.org> r~
On 2/26/20 7:10 PM, Alex Bennée wrote:
> Basing the TB cache size on the ram_size was always a little heuristic
> and was broken by a1b18df9a4 which caused ram_size not to be fully
> realised at the time we initialise the TCG translation cache.
>
> The current DEFAULT_CODE_GEN_BUFFER_SIZE may still be a little small
> but follow-up patches will address that.
>
> Fixes: a1b18df9a4
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> Cc: Niek Linnenbank <nieklinnenbank@gmail.com>
> Cc: Igor Mammedov <imammedo@redhat.com>
> ---
> accel/tcg/translate-all.c | 8 --------
> 1 file changed, 8 deletions(-)
>
> diff --git a/accel/tcg/translate-all.c b/accel/tcg/translate-all.c
> index 238b0e575bf..5b66af783b5 100644
> --- a/accel/tcg/translate-all.c
> +++ b/accel/tcg/translate-all.c
> @@ -938,15 +938,7 @@ static inline size_t size_code_gen_buffer(size_t tb_size)
> {
> /* Size the buffer. */
> if (tb_size == 0) {
> -#ifdef USE_STATIC_CODE_GEN_BUFFER
> tb_size = DEFAULT_CODE_GEN_BUFFER_SIZE;
> -#else
> - /* ??? Needs adjustments. */
> - /* ??? If we relax the requirement that CONFIG_USER_ONLY use the
> - static buffer, we could size this on RESERVED_VA, on the text
> - segment size of the executable, or continue to use the default. */
> - tb_size = (unsigned long)(ram_size / 4);
> -#endif
> }
> if (tb_size < MIN_CODE_GEN_BUFFER_SIZE) {
> tb_size = MIN_CODE_GEN_BUFFER_SIZE;
>
Tested-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Hi Alex,
On Wed, Feb 26, 2020 at 7:10 PM Alex Bennée <alex.bennee@linaro.org> wrote:
> Basing the TB cache size on the ram_size was always a little heuristic
> and was broken by a1b18df9a4 which caused ram_size not to be fully
> realised at the time we initialise the TCG translation cache.
>
Now I'm beginning to understand the issue better. So without this patch,
the TCG translation
cache effectively was disabled, causing the slowdown, correct?
>
> The current DEFAULT_CODE_GEN_BUFFER_SIZE may still be a little small
> but follow-up patches will address that.
>
> Fixes: a1b18df9a4
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> Cc: Niek Linnenbank <nieklinnenbank@gmail.com>
> Cc: Igor Mammedov <imammedo@redhat.com>
>
---
> accel/tcg/translate-all.c | 8 --------
> 1 file changed, 8 deletions(-)
>
> diff --git a/accel/tcg/translate-all.c b/accel/tcg/translate-all.c
> index 238b0e575bf..5b66af783b5 100644
> --- a/accel/tcg/translate-all.c
> +++ b/accel/tcg/translate-all.c
> @@ -938,15 +938,7 @@ static inline size_t size_code_gen_buffer(size_t
> tb_size)
> {
> /* Size the buffer. */
> if (tb_size == 0) {
> -#ifdef USE_STATIC_CODE_GEN_BUFFER
> tb_size = DEFAULT_CODE_GEN_BUFFER_SIZE;
>
-#else
> - /* ??? Needs adjustments. */
> - /* ??? If we relax the requirement that CONFIG_USER_ONLY use the
> - static buffer, we could size this on RESERVED_VA, on the text
> - segment size of the executable, or continue to use the
> default. */
> - tb_size = (unsigned long)(ram_size / 4);
>
As you wrote in the commit message, I think we are indeed reducing the
cache size here to 32MiB
versus a larger size without this patch. In the next patch #4 in this
series you are increasing it for 64-bit hosts,
but what about the 32-bit hosts? Or will that be addressed in a later
series?
For now, this fix works and resolves the slowdown, so:
Tested-by: Niek Linnenbank <nieklinnenbank@gmail.com>
Regards,
Niek
> -#endif
> }
> if (tb_size < MIN_CODE_GEN_BUFFER_SIZE) {
> tb_size = MIN_CODE_GEN_BUFFER_SIZE;
> --
> 2.20.1
>
>
--
Niek Linnenbank
On 2/26/20 2:26 PM, Niek Linnenbank wrote: > Hi Alex, > > On Wed, Feb 26, 2020 at 7:10 PM Alex Bennée <alex.bennee@linaro.org > <mailto:alex.bennee@linaro.org>> wrote: > > Basing the TB cache size on the ram_size was always a little heuristic > and was broken by a1b18df9a4 which caused ram_size not to be fully > realised at the time we initialise the TCG translation cache. > > > Now I'm beginning to understand the issue better. So without this patch, the > TCG translation > cache effectively was disabled, causing the slowdown, correct? Yes. r~
© 2016 - 2025 Red Hat, Inc.