From: Maxim Ostapenko <m.ostapenko@samsung.com>
To: Peter Maydell <peter.maydell@linaro.org>
Cc: qemu-discuss <qemu-discuss@nongnu.org>,
QEMU Developers <qemu-devel@nongnu.org>
Subject: Re: [Qemu-devel] [Qemu-discuss] ASan'ed binaries start up very slow under qemu-aarch64.
Date: Tue, 19 Jul 2016 12:22:41 +0300 [thread overview]
Message-ID: <578DF161.9040205@samsung.com> (raw)
In-Reply-To: <CAFEAcA9dz65QeUp7-kmu_TWt=fO1kE6pLS-4OLUsJJVT8ofv8A@mail.gmail.com>
On 18/07/16 18:51, Peter Maydell wrote:
> (CCing qemu-devel, which is more likely to get developer attention)
Peter, thank you for your answer.
>
> On 18 July 2016 at 15:45, Maxim Ostapenko <m.ostapenko@samsung.com> wrote:
>> 1) AddressSanitizer mmaps quite large regions of memory for redzones and
>> shadow gap. In particular, for 39-bit AS it mmapes:
>>
>> || `[0x1400000000, 0x1fffffffff]` || HighShadow || - 48 Gb
>> || `[0x1200000000, 0x13ffffffff]` || ShadowGap || - 8 Gb
>> || `[0x1000000000, 0x11ffffffff]` || LowShadow || - 4 Gb
>>
>> 2) In QEMU, page_set_flags is called for these ranges. It cuts given range
>> to individual pages and sets flags for them. Given the page size is 4 Kb,
>> for 8 Gb range we have 2097152 iterations and for 48 Gb 12582912 iterations
>> in inner loop. This is obviously a performance bottleneck.
> Mmm, the algorithm here is pretty simple and basically assumes the
> guest isn't going to be doing enormous allocations like that.
> (If the host process doesn't happen to have a suitable big lump of its
> VA space free then the mmap will fail anyway.)
Hm, it seems that ASan is really special here. Actually, I think that
this slowdown is not critical for individual runs, but it certainly
critical for people who rely on QEMU in their builds (e.g. in Aarch64
chroot). Not sure it's a common case, though.
>
>> 3) Same issue may happen when ASan tries to read /proc/self/map later in
>> page_check_range function, after it already mmaped HighShadow, ShadowGap and
>> LowShadow regions.
>>
>> Could someone help me, how can I mitigate this performance issue? Do we
>> really need to set flags to each page on entire (quite big) memory region?
> Well, we do need to do some things:
> * we're populating the PageDesc data structure which we later use
> to cache generated code
> * if we're marking the range as writeable and it wasn't previously
> writeable, we need to check whether there's already generated code
> anywhere in this memory range and invalidate those translations
>
> This could probably be done in a way that doesn't iterate naively
> through every page, though.
Oh, I see. Perhaps we can restrict QEMU to use some well defined pages
for generated code?
Thanks,
-Maxim
>
> thanks
> -- PMM
>
>
next prev parent reply other threads:[~2016-07-19 9:22 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <578CEB7B.7010801@samsung.com>
2016-07-18 15:51 ` [Qemu-devel] [Qemu-discuss] ASan'ed binaries start up very slow under qemu-aarch64 Peter Maydell
2016-07-19 9:22 ` Maxim Ostapenko [this message]
2016-07-19 9:49 ` Peter Maydell
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=578DF161.9040205@samsung.com \
--to=m.ostapenko@samsung.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=qemu-discuss@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.