diff options
author | David Vrabel <david.vrabel@citrix.com> | 2012-07-09 11:39:05 +0100 |
---|---|---|
committer | Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> | 2012-07-19 15:51:43 -0400 |
commit | d095d43e78dd811d5c02c25e207c3364019b5a77 (patch) | |
tree | 4d104a6b39487e3cddd3ba2490fe257ed3f5793d /Documentation/watchdog | |
parent | 37a80bf560786d96c5e8370bff45d867e43fd5c3 (diff) | |
download | op-kernel-dev-d095d43e78dd811d5c02c25e207c3364019b5a77.zip op-kernel-dev-d095d43e78dd811d5c02c25e207c3364019b5a77.tar.gz |
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 <david.vrabel@citrix.com>
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Diffstat (limited to 'Documentation/watchdog')
0 files changed, 0 insertions, 0 deletions