[Xen-devel] [PATCH v2 0/5] xen mapcache fixes and improvements
this patch series introduces a series of fixes and improvements to the
xen mapcache in qemu.
Changes compared to v1:
- remove the two includes from xen-mapcache.h.
The list of patches with a diffstat follows:
Stefano Stabellini (5):
xen: fix qemu_map_cache with size != MCACHE_BUCKET_SIZE
xen: remove qemu_map_cache_unlock
xen: remove xen_map_block and xen_unmap_block
exec.c: refactor cpu_physical_memory_map
xen: mapcache performance improvements
cpu-common.h | 1 +
exec.c | 88 ++++++++++++++++----------------
xen-mapcache-stub.c | 8 ---
xen-mapcache.c | 141 +++++++++++++++++++++++---------------------------
xen-mapcache.h | 16 ------
5 files changed, 109 insertions(+), 145 deletions(-)
Most of them are just straightforward cleanups and only touch Xen code.
The first patch fixes the current mapcache implementation that even
though provides a size parameter isn't actually able to cope with sizes
other than 0 or the bucket size.
The second and the third patch remove some not very useful mapcache
related functions and replace them with proper calls to qemu_map_cache
and qemu_invalidate_entry. In particular in the case of xen_map_block
and xen_unmap_block it wasn't possible before because of the size
problem describe above.
The fourth patch refactors cpu_physical_memory_map to simplify the
implementation and replace multiple calls to qemu_get_ram_ptr with a
single call to a new function that takes an address and a size a
parameters. Hopefully the changes make the function easier to understand
and more efficient.
Comments and reviews on this patch are very very welcome.
The last patch introduces few interesting performance improvements:
assuming that qemu_get_ram_ptr is only called to perform one of the
following two actions:
1) map an entire block other than the main ram block (offset == 0);
2) map a single page in the main ram block to issue a read or a write
straight after the call;
we can make the conscious decision of avoid locking the mapcache entries
for case 2).
Then considering that qemu_put_ram_ptr is called to unmap pages in the
same two cases as before, and considering that we don't need to unmap
unlocked mapcache entries, we can avoid calling qemu_invalidate_entry
A git tree with the patch series applied to the latest qemu is available
Xen-devel mailing list