From: Takuya Yoshikawa <yoshikawa.takuya@oss.ntt.co.jp>
To: kvm@vger.kernel.org
Cc: Avi Kivity <avi@redhat.com>, Marcelo Tosatti <mtosatti@redhat.com>
Subject: [RFC] Moving dirty bitmaps to userspace - Double buffering approach
Date: Mon, 08 Mar 2010 17:22:43 +0900 [thread overview]
Message-ID: <4B94B3D3.2010801@oss.ntt.co.jp> (raw)
Hi, I would like to hear your comments about the following plan:
Moving dirty bitmaps to userspace
- Double buffering approach
especially I would be glad if I can hear some advice about how
to keep the compatibility.
Thanks in advance,
Takuya
---
Overview:
Last time, I submitted a patch
"make get dirty log ioctl return the first dirty page's position"
http://www.spinics.net/lists/kvm/msg29724.html
and got some new better ideas from Avi.
As a result, I agreed to try to eliminate the bitmap allocation
done in the x86 KVM every time when we execute get dirty log by
using "double buffering" approach.
Here is my plan:
- move the dirty bitmap allocation to userspace
We allocate bitmaps in the userspace and register them by ioctl.
Once a bitmap is registered, we do not touch it from userspace
and let the kernel modify it directly until we switch to the next
bitmap. We use "double buffering" at this switch point: userspace
give the kernel a new bitmap by ioctl and the kernel switch the
bitmap atomically to new one.
After succeeded in this switch, we can read the old bitmap freely
in the userspace and free it if we want: needless to say we can
also reuse it at the next switch.
- implementation details
Although it may be possible to touch the bitmap from the kernel
side without doing kmap, I think kmapping the bitmap is better.
So we may use the following functions paying enough attention to
the preemption control.
- get_user_pages()
- kmap_atomic()
- compatibility issues
What I am facing now are the compatibility issues. We have to
support both the userspace and kernel side bitmap allocations
to let the current qemu and KVM work properly.
1. From the kernel side, we have to care bitmap allocations done in both
the kvm_vm_ioctl_set_memory_region() and kvm_vm_ioctl_get_dirty_log().
2. From the userspace side, we have to check the new api's availability
and determine which way we use, e.g. by using check extension ioctl.
The most problematic is 1, kernel side. We have to be able to know
by which way current bitmap allocation is being done using flags or
something. In the case of set memory region, we have to judge whether
we allocate a bitmap, and if not we have to register a bitmap later
by another api: set memory region is not restricted to the dirty log
issues and need more care than get dirty log.
Are there any good ways to solve this kind of problems?
next reply other threads:[~2010-03-08 8:20 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-03-08 8:22 Takuya Yoshikawa [this message]
2010-03-08 12:57 ` [RFC] Moving dirty bitmaps to userspace - Double buffering approach Avi Kivity
2010-03-15 8:33 ` Marcelo Tosatti
2010-03-15 8:49 ` Avi Kivity
2010-03-15 10:50 ` Takuya Yoshikawa
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4B94B3D3.2010801@oss.ntt.co.jp \
--to=yoshikawa.takuya@oss.ntt.co.jp \
--cc=avi@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=mtosatti@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox