exec: avoid unnecessary cacheline bounce on ram_list.mru_block
Whenever the MRU cache hits for the list of RAM blocks, qemu_get_ram_block does an unnecessary write that causes a processor cache line to bounce from one core to another. This causes a performance hit. Reported-by: Emilio G. Cota <cota@braap.org> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
This commit is contained in:
parent
74de807f79
commit
68851b98e5
2
exec.c
2
exec.c
@ -903,7 +903,7 @@ static RAMBlock *qemu_get_ram_block(ram_addr_t addr)
|
|||||||
|
|
||||||
block = atomic_rcu_read(&ram_list.mru_block);
|
block = atomic_rcu_read(&ram_list.mru_block);
|
||||||
if (block && addr - block->offset < block->max_length) {
|
if (block && addr - block->offset < block->max_length) {
|
||||||
goto found;
|
return block;
|
||||||
}
|
}
|
||||||
QLIST_FOREACH_RCU(block, &ram_list.blocks, next) {
|
QLIST_FOREACH_RCU(block, &ram_list.blocks, next) {
|
||||||
if (addr - block->offset < block->max_length) {
|
if (addr - block->offset < block->max_length) {
|
||||||
|
Loading…
Reference in New Issue
Block a user