From: David Vrabel Date: Mon, 9 Jul 2012 10:39:05 +0000 (+0100) Subject: xen/mm: do direct hypercall in xen_set_pte() if batching is unavailable X-Git-Tag: v3.6-rc1~123^2~9 X-Git-Url: http://git.openpandora.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d095d43e78dd811d5c02c25e207c3364019b5a77;p=pandora-kernel.git xen/mm: do direct hypercall in xen_set_pte() if batching is unavailable In xen_set_pte() if batching is unavailable (because the caller is in an interrupt context such as handling a page fault) it would fall back to using native_set_pte() and trapping and emulating the PTE write. On 32-bit guests this requires two traps for each PTE write (one for each dword of the PTE). Instead, do one mmu_update hypercall directly. During construction of the initial page tables, continue to use native_set_pte() because most of the PTEs being set are in writable and unpinned pages (see phys_pmd_init() in arch/x86/mm/init_64.c) and using a hypercall for this is very expensive. This significantly improves page fault performance in 32-bit PV guests. lmbench3 test Before After Improvement ---------------------------------------------- lat_pagefault 3.18 us 2.32 us 27% lat_proc fork 356 us 313.3 us 11% Signed-off-by: David Vrabel Signed-off-by: Konrad Rzeszutek Wilk --- Reading git-diff-tree failed