From: Jan Kiszka <jan.kiszka@web.de>
To: Craig Brozefsky <craig@red-bean.com>
Cc: qemu-devel@nongnu.org
Subject: [Qemu-devel] Re: software breakpoints disappearing/reappearing in KVM/qemu
Date: Fri, 08 Apr 2011 22:52:39 +0200 [thread overview]
Message-ID: <4D9F7597.7020604@web.de> (raw)
In-Reply-To: <BANLkTimB7YhJ2UPtH3c2XjAx1kvHmGWNAw@mail.gmail.com>
[-- Attachment #1: Type: text/plain, Size: 3025 bytes --]
On 2011-04-08 20:50, Craig Brozefsky wrote:
> First, thank you very much for your work on KVM/QEMU and in particular
> the GDB support. I have been a heavy user of it while implementing a
> programmable debugger that monitors/traces guest operating systems. I
> need more breakpoints than hardware BPs available, and I need the
> performance of KVM acceleration.
>
> I am running into a problem with software breakpoints disappearing and
> re-appearing. I set them via the GDB stub. If I examine the location
> in the qemu monitor I will see them there, but on occasion (and with
> greater frequency the more breakpoints I have) a given breakpoint will
> disappear according to the monitor, and then re-appear.
>
> I also have processes executing the instructions at the breakpoint without
> stopping. This makes my results quite unpredictable, and it has led too a
> few days of learning all about Windows system working set paging.
KVM injects software breakpoints into the guest pages - and that
intransparently. If the guest starts to read those breakpoints or even
manipulate the code pages, all kinds of weird things can happen.
This particularly includes swapping. QEMU does not track if a guest
reads and then replaces the page. There is some basic check when
removing a software breakpoint that triggers if the page was manipulated
in the meantime. But when that check triggers, it's too late: the guest
likely already saved the patched page elsewhere and can stumble and fall
the next time it restores it to some other linear address and then
executes it. BTW, that's also not what gdb is designed to handle.
>
> My first approach was to try and re-install the breakpoints after a
> page was faulted in, thinking that the INT3 was disappearing when the
> page was read back into memory. Setting a hbreak, I was trapping
> MMAccessFault, and reinstalling all by breakpoints when it hit its
> return address (after the IO Page Read Calls). That didn't solve
> the problem, and left me wondering if I need to take into consideration the way
> KVM/qemu handle guest memory. And that brings me to my question.
This kind of swapping is guest business, specifically with EPT/NPT.
>
> Assuming I handle the guest kernel paging issue properly, are you
> aware of issues with the debugging support in KVM/qemu that would
> result in the INT3 blinking in and out of existence?
>
> In the meantime, I've been reading source code, but it'll be a few
> days before I figure out the details of memory mgmt under KVM. Any
> hints would be greatly appreciated.
QEMU's gdbstub in KVM mode is simply not designed to account for guests
swapping out code pages that contain breakpoints. Due to the fact that
the Linux kernel does not do these weird things to its own code, at
least I never seriously thought about potential workarounds. As your
approach indicates, those might become fairly guest-specific - if they
can be implemented reliably at all.
Jan
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 259 bytes --]
next prev parent reply other threads:[~2011-04-08 20:52 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-04-08 18:50 [Qemu-devel] software breakpoints disappearing/reappearing in KVM/qemu Craig Brozefsky
2011-04-08 20:16 ` Blue Swirl
2011-04-08 20:37 ` Craig Brozefsky
2011-04-08 20:52 ` Jan Kiszka [this message]
2011-04-10 14:01 ` [Qemu-devel] " Avi Kivity
2011-04-10 14:23 ` Jan Kiszka
2011-04-10 14:41 ` Avi Kivity
2011-04-10 15:16 ` Jan Kiszka
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=4D9F7597.7020604@web.de \
--to=jan.kiszka@web.de \
--cc=craig@red-bean.com \
--cc=qemu-devel@nongnu.org \
/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 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.