diff mbox

[v4,26/26] tcg: Adjust CODE_GEN_AVG_BLOCK_SIZE

Message ID 1443589786-26929-27-git-send-email-rth@twiddle.net
State New
Headers show

Commit Message

Richard Henderson Sept. 30, 2015, 5:09 a.m. UTC
At present, the "average" guestimate of TB size is way too small, leading
to many unused entries in the pre-allocated TB array.  For a guest with 1GB
ram, we're currently allocating 256MB for the array.

Survey arm, alpha, aarch64, ppc, sparc, i686, x86_64 guests running on
x86_64 and ppc64 hosts and select a new average.  The size of the array
drops to 81MB with no more flushing than before.

Signed-off-by: Richard Henderson <rth@twiddle.net>
---
 include/exec/exec-all.h | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

Comments

Aurelien Jarno Sept. 30, 2015, 4:50 p.m. UTC | #1
On 2015-09-30 15:09, Richard Henderson wrote:
> At present, the "average" guestimate of TB size is way too small, leading
> to many unused entries in the pre-allocated TB array.  For a guest with 1GB
> ram, we're currently allocating 256MB for the array.
> 
> Survey arm, alpha, aarch64, ppc, sparc, i686, x86_64 guests running on
> x86_64 and ppc64 hosts and select a new average.  The size of the array
> drops to 81MB with no more flushing than before.
> 
> Signed-off-by: Richard Henderson <rth@twiddle.net>
> ---
>  include/exec/exec-all.h | 11 ++++++-----
>  1 file changed, 6 insertions(+), 5 deletions(-)

Reviewed-by: Aurelien Jarno <aurelien@aurel32.net>
diff mbox

Patch

diff --git a/include/exec/exec-all.h b/include/exec/exec-all.h
index 71c9d85..a63fd60 100644
--- a/include/exec/exec-all.h
+++ b/include/exec/exec-all.h
@@ -161,13 +161,14 @@  static inline void tlb_flush_by_mmuidx(CPUState *cpu, ...)
 #define CODE_GEN_PHYS_HASH_BITS     15
 #define CODE_GEN_PHYS_HASH_SIZE     (1 << CODE_GEN_PHYS_HASH_BITS)
 
-/* estimated block size for TB allocation */
-/* XXX: use a per code average code fragment size and modulate it
-   according to the host CPU */
+/* Estimated block size for TB allocation.  */
+/* ??? The following is based on a 2015 survey of x86_64 host output.
+   Better would seem to be some sort of dynamically sized TB array,
+   adapting to the block sizes actually being produced.  */
 #if defined(CONFIG_SOFTMMU)
-#define CODE_GEN_AVG_BLOCK_SIZE 128
+#define CODE_GEN_AVG_BLOCK_SIZE 400
 #else
-#define CODE_GEN_AVG_BLOCK_SIZE 64
+#define CODE_GEN_AVG_BLOCK_SIZE 150
 #endif
 
 #if defined(__arm__) || defined(_ARCH_PPC) \