unicorn/qemu/include/exec
Emilio G. Cota d3ada2feb5
tcg: allocate TB structs before the corresponding translated code
Allocating an arbitrarily-sized array of tbs results in either
(a) a lot of memory wasted or (b) unnecessary flushes of the code
cache when we run out of TB structs in the array.

An obvious solution would be to just malloc a TB struct when needed,
and keep the TB array as an array of pointers (recall that tb_find_pc()
needs the TB array to run in O(log n)).

Perhaps a better solution, which is implemented in this patch, is to
allocate TB's right before the translated code they describe. This
results in some memory waste due to padding to have code and TBs in
separate cache lines--for instance, I measured 4.7% of padding in the
used portion of code_gen_buffer when booting aarch64 Linux on a
host with 64-byte cache lines. However, it can allow for optimizations
in some host architectures, since TCG backends could safely assume that
the TB and the corresponding translated code are very close to each
other in memory. See this message by rth for a detailed explanation:

https://lists.gnu.org/archive/html/qemu-devel/2017-03/msg05172.html
Subject: Re: GSoC 2017 Proposal: TCG performance enhancements

Backports commit 6e3b2bfd6af488a896f7936e99ef160f8f37e6f2 from qemu
2018-03-03 17:05:49 -05:00
..
address-spaces.h Clean up header guards that don't match their file name 2018-02-25 04:18:42 -05:00
cpu-all.h exec: introduce MemoryRegionCache 2018-03-01 10:50:30 -05:00
cpu-common.h RAMBlocks: qemu_ram_is_shared 2018-03-02 13:05:35 -05:00
cpu-defs.h cpu_defs: Simplify CPUTLB padding logic 2018-02-17 15:23:27 -05:00
cpu_ldst.h cpu_ldst.h: use correct guest address parameter 2018-03-01 08:56:37 -05:00
cpu_ldst_template.h softmmu: add helper function to pass through retaddr 2018-02-17 15:23:38 -05:00
cputlb.h include/exec: Move cputlb exec.c defs out 2018-02-23 10:52:25 -05:00
exec-all.h tcg: Introduce goto_ptr opcode and tcg_gen_lookup_and_goto_ptr 2018-03-02 21:05:18 -05:00
gen-icount.h tcg: Reorg TCGOp chaining 2018-02-25 21:44:50 -05:00
helper-gen.h Clean up decorations and whitespace around header guards 2018-02-25 04:26:02 -05:00
helper-head.h Clean up header guards that don't match their file name 2018-02-25 04:18:42 -05:00
helper-proto.h Clean up decorations and whitespace around header guards 2018-02-25 04:26:02 -05:00
helper-tcg.h Clean up decorations and whitespace around header guards 2018-02-25 04:26:02 -05:00
hwaddr.h qemu-common: push cpu.h inclusion out of qemu-common.h 2018-02-24 01:50:56 -05:00
ioport.h hw: remove pio_addr_t 2018-02-24 02:43:16 -05:00
memattrs.h target-i386: introduce cpu_get_mem_attrs 2018-02-13 11:33:39 -05:00
memory-internal.h import 2015-08-21 15:04:50 +08:00
memory.h memory: tune last param of iommu_ops.translate() 2018-03-02 18:59:12 -05:00
ram_addr.h memory: remove qemu_get_ram_fd, qemu_set_ram_fd, qemu_ram_block_host_ptr 2018-02-24 03:34:44 -05:00
ramlist.h memory: RCU ram_list.dirty_memory[] for safe RAM hotplug 2018-02-22 15:38:03 -05:00
semihost.h exec: Add semihosting stubs 2018-02-17 15:23:33 -05:00
tb-context.h tcg: allocate TB structs before the corresponding translated code 2018-03-03 17:05:49 -05:00
tb-hash-xx.h Clean up ill-advised or unusual header guards 2018-02-25 04:22:46 -05:00
tb-hash.h tb-hash: improve tb_jmp_cache hash function in user mode 2018-03-03 14:11:29 -05:00