Perf top tells me qemu_get_ram_ptr consume some cpu cycles. Before this optimization: 1.26% qemu-kvm [.] qemu_get_ram_ptr 0.89% qemu-kvm [.] qemu_get_ram_block
Applied the patch set: 0.87% qemu-kvm [.] qemu_get_ram_ptr And Paolo suggested that we can get rid of qemu_get_ram_ptr by storing the RAMBlock pointer into the memory region, instead of the ram_addr_t value. And after appling this change, I got much better performance indeed. BTW, PATCH 3 is an occasional find. v2: - using 'struct RAMBlock *' instead of 'void *' in patch 1 [Fam] - drop superfluous comments in patch 1 [Fam] Gonglei (3): exec: store RAMBlock pointer into memory region memory: optimize qemu_get_ram_ptr and qemu_ram_ptr_length memory: Remove the superfluous code exec.c | 48 ++++++++++++++++++++++++++++++------------------ include/exec/memory.h | 8 ++++---- memory.c | 3 ++- 3 files changed, 36 insertions(+), 23 deletions(-) -- 1.8.5.2