From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:34959) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QN75A-0008Fm-AS for qemu-devel@nongnu.org; Thu, 19 May 2011 13:32:21 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1QN759-0001fN-6O for qemu-devel@nongnu.org; Thu, 19 May 2011 13:32:20 -0400 Received: from smtp.eu.citrix.com ([62.200.22.115]:18723) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QN759-0001cn-1X for qemu-devel@nongnu.org; Thu, 19 May 2011 13:32:19 -0400 Date: Thu, 19 May 2011 18:34:23 +0100 From: Stefano Stabellini Message-ID: MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Subject: [Qemu-devel] [PATCH v2 0/5] xen mapcache fixes and improvements List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: "qemu-devel@nongnu.org" Cc: "xen-devel@lists.xensource.com" , Alexander Graf , Stefano Stabellini Hi all, 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 completely. A git tree with the patch series applied to the latest qemu is available here: git://xenbits.xen.org/people/sstabellini/qemu-dm.git mapcache_fixes_2 - Stefano From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stefano Stabellini Subject: [PATCH v2 0/5] xen mapcache fixes and improvements Date: Thu, 19 May 2011 18:34:23 +0100 Message-ID: Mime-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Return-path: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+gceq-qemu-devel=gmane.org@nongnu.org Sender: qemu-devel-bounces+gceq-qemu-devel=gmane.org@nongnu.org To: "qemu-devel@nongnu.org" Cc: "xen-devel@lists.xensource.com" , Alexander Graf , Stefano Stabellini List-Id: xen-devel@lists.xenproject.org Hi all, 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 completely. A git tree with the patch series applied to the latest qemu is available here: git://xenbits.xen.org/people/sstabellini/qemu-dm.git mapcache_fixes_2 - Stefano