Message ID | 20200226181020.19592-3-alex.bennee@linaro.org |
---|---|
State | Superseded |
Headers | show |
Series | Fix codegen translation cache size | expand |
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 <div dir="ltr"><div>Hi Alex,<br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Feb 26, 2020 at 7:10 PM Alex Bennée <<a href="mailto:alex.bennee@linaro.org">alex.bennee@linaro.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Basing the TB cache size on the ram_size was always a little heuristic<br> and was broken by a1b18df9a4 which caused ram_size not to be fully<br> realised at the time we initialise the TCG translation cache.<br></blockquote><div><br></div><div>Now I'm beginning to understand the issue better. So without this patch, the TCG translation</div><div>cache effectively was disabled, causing the slowdown, correct?<br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"> <br> The current DEFAULT_CODE_GEN_BUFFER_SIZE may still be a little small<br> but follow-up patches will address that.<br> <br> Fixes: a1b18df9a4<br> Signed-off-by: Alex Bennée <<a href="mailto:alex.bennee@linaro.org" target="_blank">alex.bennee@linaro.org</a>><br> Cc: Niek Linnenbank <<a href="mailto:nieklinnenbank@gmail.com" target="_blank">nieklinnenbank@gmail.com</a>><br> Cc: Igor Mammedov <<a href="mailto:imammedo@redhat.com" target="_blank">imammedo@redhat.com</a>> <br></blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"> ---<br> accel/tcg/translate-all.c | 8 --------<br> 1 file changed, 8 deletions(-)<br> <br> diff --git a/accel/tcg/translate-all.c b/accel/tcg/translate-all.c<br> index 238b0e575bf..5b66af783b5 100644<br> --- a/accel/tcg/translate-all.c<br> +++ b/accel/tcg/translate-all.c<br> @@ -938,15 +938,7 @@ static inline size_t size_code_gen_buffer(size_t tb_size)<br> {<br> /* Size the buffer. */<br> if (tb_size == 0) {<br> -#ifdef USE_STATIC_CODE_GEN_BUFFER<br> tb_size = DEFAULT_CODE_GEN_BUFFER_SIZE; <br></blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"> -#else<br> - /* ??? Needs adjustments. */<br> - /* ??? If we relax the requirement that CONFIG_USER_ONLY use the<br> - static buffer, we could size this on RESERVED_VA, on the text<br> - segment size of the executable, or continue to use the default. */<br> - tb_size = (unsigned long)(ram_size / 4);<br></blockquote><div><br></div><div>As you wrote in the commit message, I think we are indeed reducing the cache size here to 32MiB</div><div>versus a larger size without this patch. In the next patch #4 in this series you are increasing it for 64-bit hosts,</div><div>but what about the 32-bit hosts? Or will that be addressed in a later series?<br></div><div><br></div><div>For now, this fix works and resolves the slowdown, so:</div><div><br></div><div>Tested-by: Niek Linnenbank <<a href="mailto:nieklinnenbank@gmail.com">nieklinnenbank@gmail.com</a>><br></div><div><br></div><div>Regards,</div><div>Niek<br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"> -#endif<br> }<br> if (tb_size < MIN_CODE_GEN_BUFFER_SIZE) {<br> tb_size = MIN_CODE_GEN_BUFFER_SIZE;<br> -- <br> 2.20.1<br> <br> </blockquote></div><br clear="all"><br>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div>Niek Linnenbank<br><br></div></div></div></div>
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 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~
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>
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;
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(-) -- 2.20.1