All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH v2 0/7] making address spaces 64 bit wide
@ 2013-11-13 19:23 Michael S. Tsirkin
  2013-11-13 19:23 ` [Qemu-devel] [PATCH v2 1/7] split definitions for exec.c and translate-all.c radix trees Michael S. Tsirkin
                   ` (6 more replies)
  0 siblings, 7 replies; 15+ messages in thread
From: Michael S. Tsirkin @ 2013-11-13 19:23 UTC (permalink / raw)
  To: qemu-devel; +Cc: Paolo Bonzini, Luiz Capitulino

At the moment, exec ignores high bits in each address,
for efficiency.
This is incorrect: devices can do full 64 bit DMA, it's
only the CPU that is limited by target address space.
Resolving such addresses can actually corrupt the pagetables,
so using full 64 bit addresses is called for.

However, using full 64 bit addresses was clocked at 12% performance
hit on a microbenchmark.
To solve, teach pagetables to skip bits at any level
and not just the lowest level.

This solves the performance problem (only one line of code changed on the data
path).  In fact we even gain a bit of speed:

Before:
portio-no-eventfd:pci-io 3225
After:
portio-no-eventfd:pci-io 3123

Changes from v2:
    lots of bugfixes if you read v1 you'll have to re-read,
    although the basic algorithm is still the same
    minor tweaks suggested by Eric Blake

Michael S. Tsirkin (5):
  exec: replace leaf with skip
  exec: extend skip field to 6 bit, page entry to 32 bit
  exec: pass hw address to phys_page_find
  exec: memory radix tree page level compression
  exec: reduce L2_PAGE_SIZE

Paolo Bonzini (2):
  split definitions for exec.c and translate-all.c radix trees
  exec: make address spaces 64-bit wide

 translate-all.h |   7 ---
 exec.c          | 135 +++++++++++++++++++++++++++++++++++++++++++++-----------
 translate-all.c |  32 ++++++++------
 3 files changed, 127 insertions(+), 47 deletions(-)

-- 
MST

^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2013-11-17 16:12 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-11-13 19:23 [Qemu-devel] [PATCH v2 0/7] making address spaces 64 bit wide Michael S. Tsirkin
2013-11-13 19:23 ` [Qemu-devel] [PATCH v2 1/7] split definitions for exec.c and translate-all.c radix trees Michael S. Tsirkin
2013-11-13 19:23 ` [Qemu-devel] [PATCH v2 2/7] exec: replace leaf with skip Michael S. Tsirkin
2013-11-13 19:23 ` [Qemu-devel] [PATCH v2 3/7] exec: extend skip field to 6 bit, page entry to 32 bit Michael S. Tsirkin
2013-11-13 19:23 ` [Qemu-devel] [PATCH v2 4/7] exec: pass hw address to phys_page_find Michael S. Tsirkin
2013-11-13 19:23 ` [Qemu-devel] [PATCH v2 5/7] exec: memory radix tree page level compression Michael S. Tsirkin
2013-11-14  8:54   ` Avi Kivity
2013-11-14 14:40     ` [Qemu-devel] [PATCH v2 5/7] exec: memory radix tree page level?compression Michael S. Tsirkin
2013-11-14 14:56       ` Avi Kivity
2013-11-14 15:37         ` Michael S. Tsirkin
2013-11-14 15:42           ` Avi Kivity
2013-11-17 15:37             ` Michael S. Tsirkin
2013-11-17 16:12               ` Avi Kivity
2013-11-13 19:24 ` [Qemu-devel] [PATCH v2 6/7] exec: make address spaces 64-bit wide Michael S. Tsirkin
2013-11-13 19:24 ` [Qemu-devel] [PATCH v2 7/7] exec: reduce L2_PAGE_SIZE Michael S. Tsirkin

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.