KVM use gfn_to_page very frequestly, which makes find_get_page a bottleneck, so cache pages found to speed up.
Signed-off-by: Shaohua Li <[EMAIL PROTECTED]> --- drivers/kvm/kvm.h | 1 + drivers/kvm/kvm_main.c | 9 +++++++++ 2 files changed, 10 insertions(+) Index: linux/drivers/kvm/kvm.h =================================================================== --- linux.orig/drivers/kvm/kvm.h 2007-07-20 14:29:46.000000000 +0800 +++ linux/drivers/kvm/kvm.h 2007-07-20 14:50:11.000000000 +0800 @@ -431,6 +431,7 @@ struct kvm_mem_alias { struct kvm_page_info { swp_entry_t entry; + struct page *page; }; struct kvm_memory_slot { Index: linux/drivers/kvm/kvm_main.c =================================================================== --- linux.orig/drivers/kvm/kvm_main.c 2007-07-20 14:45:40.000000000 +0800 +++ linux/drivers/kvm/kvm_main.c 2007-07-20 14:50:11.000000000 +0800 @@ -1031,6 +1031,7 @@ repeat: info->entry.val = 0; if (add_to_page_cache(page, mapping, gfn, GFP_KERNEL)) return NULL; + info->page = page; ClearPageDirty(page); } else { /* allocate new page */ @@ -1041,6 +1042,7 @@ repeat: page_cache_release(page); return NULL; } + info->page = page; SetPageUptodate(page); set_page_private(page, 0); } @@ -1063,6 +1065,7 @@ static int kvm_move_to_swap(struct page if (move_to_swap_cache(page, swap) == 0) { slot = __gfn_to_memslot(kvm, gfn); slot->phys_mem[gfn - slot->base_gfn].entry = swap; + slot->phys_mem[gfn - slot->base_gfn].page = NULL; return 0; } swap_free(swap); @@ -1082,6 +1085,12 @@ struct page *gfn_to_page(struct kvm *kvm if (!slot) return NULL; + page = slot->phys_mem[gfn - slot->base_gfn].page; + if (page) { + mark_page_accessed(page); + return page; + } + page = find_get_page(mapping, gfn); if (page) goto out; ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ _______________________________________________ kvm-devel mailing list kvm-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/kvm-devel