From: Keir Fraser Date: Thu, 5 Jun 2008 09:36:19 +0000 (+0100) Subject: x86 hvm: Improve paging performance for 64b solaris guests X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~14200^2~97 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=3f0cd2273cb5bd0d57b86686b0c6b6c0c7030af2;p=xen.git x86 hvm: Improve paging performance for 64b solaris guests The following patch provides a 'fast-path' for sh_remove_write_access() for 64 bit Solaris HVM guests. This provides a significant performance boost for such guests; our testing shows a 200-400% improvement in microbenchmarks such as fork(), exit(), etc... From: Gary Pennington Signed-off-by: Keir Fraser --- diff --git a/xen/arch/x86/mm/shadow/common.c b/xen/arch/x86/mm/shadow/common.c index 35a51743e7..aa3bc47d74 100644 --- a/xen/arch/x86/mm/shadow/common.c +++ b/xen/arch/x86/mm/shadow/common.c @@ -1738,6 +1738,11 @@ int sh_remove_write_access(struct vcpu *v, mfn_t gmfn, gfn = mfn_to_gfn(v->domain, gmfn); GUESS(0xffff810000000000UL + (gfn << PAGE_SHIFT), 4); GUESS(0x0000010000000000UL + (gfn << PAGE_SHIFT), 4); + /* + * 64bit Solaris kernel page map at + * kpm_vbase; 0xfffffe0000000000UL + */ + GUESS(0xfffffe0000000000UL + (gfn << PAGE_SHIFT), 4); } #endif /* CONFIG_PAGING_LEVELS >= 4 */ diff --git a/xen/arch/x86/mm/shadow/multi.c b/xen/arch/x86/mm/shadow/multi.c index d8fdf1c816..deb12887f7 100644 --- a/xen/arch/x86/mm/shadow/multi.c +++ b/xen/arch/x86/mm/shadow/multi.c @@ -4007,7 +4007,9 @@ int sh_rm_write_access_from_l1(struct vcpu *v, mfn_t sl1mfn, shadow_l1e_t *sl1e; int done = 0; int flags; +#if SHADOW_OPTIMIZATIONS & SHOPT_WRITABLE_HEURISTIC mfn_t base_sl1mfn = sl1mfn; /* Because sl1mfn changes in the foreach */ +#endif SHADOW_FOREACH_L1E(sl1mfn, sl1e, 0, done, { diff --git a/xen/include/asm-x86/perfc_defn.h b/xen/include/asm-x86/perfc_defn.h index cc3906f014..000743157c 100644 --- a/xen/include/asm-x86/perfc_defn.h +++ b/xen/include/asm-x86/perfc_defn.h @@ -77,8 +77,7 @@ PERFCOUNTER(shadow_writeable, "shadow removes write access") PERFCOUNTER(shadow_writeable_h_1, "shadow writeable: 32b w2k3") PERFCOUNTER(shadow_writeable_h_2, "shadow writeable: 32pae w2k3") PERFCOUNTER(shadow_writeable_h_3, "shadow writeable: 64b w2k3") -PERFCOUNTER(shadow_writeable_h_4, "shadow writeable: 32b linux low") -PERFCOUNTER(shadow_writeable_h_5, "shadow writeable: 32b linux high") +PERFCOUNTER(shadow_writeable_h_4, "shadow writeable: linux/solaris") PERFCOUNTER(shadow_writeable_bf, "shadow writeable brute-force") PERFCOUNTER(shadow_mappings, "shadow removes all mappings") PERFCOUNTER(shadow_mappings_bf, "shadow rm-mappings brute-force")