On 2/26/20 7:27 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. > > At the same time the default code generation size seems mainly set to > deal with the fact we use a static code buffer for CONFIG_USER to > avoid mmap allocation problems on constrained systems. So we: > > - only use a static code buffer on 32 bit systems > - up the default buffer size for bigger systems > - ignore the ram_size and just go with the default > - document the fact tb-size is ignored for 32 bit linux-user > > The could potentially slow down softmmu emulation on 32 bit systems > with lots (3gb?) of spare memory. Those users can still manually up > the tb-size via the command line if they do in fact exist. > > Fixes: a1b18df9a4 > Signed-off-by: Alex Bennée <[email protected]> > Cc: Niek Linnenbank <[email protected]> > Cc: Igor Mammedov <[email protected]> > --- ... > -#if defined(CONFIG_USER_ONLY) > -/* Currently it is not recommended to allocate big chunks of data in > - user mode. It will change when a dedicated libc will be used. */ > -/* ??? 64-bit hosts ought to have no problem mmaping data outside the > - region in which the guest needs to run. Revisit this. */ > +#if defined(CONFIG_USER_ONLY) && TCG_TARGET_REG_BITS == 32 > +/* > + * For user mode on smaller 32 bit systems we may run into trouble > + * allocating big chunks of data in the right place. On these systems > + * we utilise a static code generation buffer directly in the binary. > + */ > #define USE_STATIC_CODE_GEN_BUFFER > #endif > > @@ -927,7 +928,11 @@ static void page_lock_pair(PageDesc **ret_p1, > tb_page_addr_t phys1, > # define MAX_CODE_GEN_BUFFER_SIZE ((size_t)-1) > #endif > > +#if TCG_TARGET_REG_BITS == 32 > #define DEFAULT_CODE_GEN_BUFFER_SIZE_1 (32u * 1024 * 1024) > +#else > +#define DEFAULT_CODE_GEN_BUFFER_SIZE_1 (2ul * 1024 * 1024 * 1024) > +#endif
As Igor notes, there is no -tb-size X or -accel tcg,tb-size=Y option for linux-user. Therefore I'd prefer this patch merely fix the default for softmmu and not change linux-user at all. I agree it is somewhat silly to use the static code gen buffer on a 64-bit host, but let's leave that to a separate patch. r~
