From: "Alex Bennée" <alex.bennee@linaro.org>
To: qemu-devel@nongnu.org
Cc: fam@euphon.net, berrange@redhat.com, stefanha@redhat.com,
crosa@redhat.com,
"Richard Henderson" <richard.henderson@linaro.org>,
aaron@os.amperecomputing.com, robhenry@microsoft.com,
f4bug@amsat.org, mahmoudabdalghany@outlook.com, minyihh@uci.edu,
cota@braap.org, Luke.Craig@ll.mit.edu, pbonzini@redhat.com,
kuhn.chenqun@huawei.com, ma.mandourr@gmail.com,
"Alex Bennée" <alex.bennee@linaro.org>,
aurelien@aurel32.net
Subject: [PATCH v1 15/15] accel/tcg: add heuristic to invalidate al TBs in a page [hack!]
Date: Fri, 8 Apr 2022 17:47:42 +0100 [thread overview]
Message-ID: <20220408164742.2844631-16-alex.bennee@linaro.org> (raw)
In-Reply-To: <20220408164742.2844631-1-alex.bennee@linaro.org>
This is a dumb attempt to reduce to the execution time of UEFI booted
kernels and almost certainly not what the final solution should be.
The problem is if we have generated JIT code from running firmware we
can spend a lot of time carefully invalidating every TB in a page when
the kernel that eventually boots and clears all the pages in RAM.
This fix simply assumes any write to the start of the page should
invalidate everything in the page. Once that is done following writes
to the page should all follow the fast path.
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
accel/tcg/translate-all.c | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/accel/tcg/translate-all.c b/accel/tcg/translate-all.c
index 625c46dd9b..67884260fa 100644
--- a/accel/tcg/translate-all.c
+++ b/accel/tcg/translate-all.c
@@ -1830,6 +1830,16 @@ void tb_invalidate_phys_page_fast(struct page_collection *pages,
uintptr_t retaddr)
{
PageDesc *p = page_find(start >> TARGET_PAGE_BITS);
+ unsigned int nr = start & ~TARGET_PAGE_MASK;
+
+ /*
+ * Assume any write to the start of the page is start of clearing
+ * the whole page. To avoid coming back multiple times lets just
+ * invalidate everything first.
+ */
+ if (nr == 0) {
+ len = TARGET_PAGE_SIZE;
+ }
if (trace_event_get_state_backends(TRACE_TB_INVALIDATE_PHYS_PAGE_FAST)) {
TranslationBlock *tb = tcg_tb_lookup(retaddr);
@@ -1850,10 +1860,8 @@ void tb_invalidate_phys_page_fast(struct page_collection *pages,
build_page_bitmap(p);
}
if (p->code_bitmap) {
- unsigned int nr;
unsigned long b;
- nr = start & ~TARGET_PAGE_MASK;
b = p->code_bitmap[BIT_WORD(nr)] >> (nr & (BITS_PER_LONG - 1));
if (b & ((1 << len) - 1)) {
goto do_invalidate;
--
2.30.2
prev parent reply other threads:[~2022-04-08 17:03 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-04-08 16:47 [PATCH v1 00/15] testing, docs, tracepoints and cputlb hacks Alex Bennée
2022-04-08 16:47 ` [PATCH v1 01/15] tests/avocado: update aarch64_virt test to exercise -cpu max Alex Bennée
2022-04-08 16:47 ` [PATCH v1 02/15] docs/devel: add some notes on the binfmt-image-debian targets Alex Bennée
2022-04-08 16:47 ` [PATCH v1 03/15] docs/devel: drop :hidden: and :includehidden: tags Alex Bennée
2022-04-08 16:47 ` [PATCH v1 04/15] accel/tcg: move trace events to correct location Alex Bennée
2022-04-09 15:54 ` Richard Henderson
2022-04-08 16:47 ` [PATCH v1 05/15] accel/tcg: add tb_invalidate_phy_pages_fast tracepoint Alex Bennée
2022-04-09 15:57 ` Richard Henderson
2022-04-08 16:47 ` [PATCH v1 06/15] monitor: expose monitor_puts to rest of code Alex Bennée
2022-04-09 15:58 ` Richard Henderson
2022-04-21 14:45 ` Markus Armbruster
2022-04-08 16:47 ` [PATCH v1 07/15] disas: generalise plugin_printf and use for monitor_disas Alex Bennée
2022-04-09 16:04 ` Richard Henderson
2022-04-08 16:47 ` [PATCH v1 08/15] disas: use result of ->read_memory_func Alex Bennée
2022-04-09 16:07 ` Richard Henderson
2022-04-08 16:47 ` [PATCH v1 09/15] cputlb: add tracepoints for the protect/unprotect helpers Alex Bennée
2022-04-09 16:09 ` Richard Henderson
2022-04-08 16:47 ` [PATCH v1 10/15] cputlb: add tracepoints for TB invalidation Alex Bennée
2022-04-09 16:10 ` Richard Henderson
2022-04-08 16:47 ` [PATCH v1 11/15] accel/tcg: add tb_invalidate_phys_page_range tracepoint Alex Bennée
2022-04-09 16:14 ` Richard Henderson
2022-04-08 16:47 ` [PATCH v1 12/15] tests/tcg: add memory-sve test for aarch64 Alex Bennée
2022-04-08 16:47 ` [PATCH v1 13/15] plugins: extend execlog to filter matches Alex Bennée
2022-04-08 16:47 ` [PATCH v1 14/15] plugins: Assert mmu_idx in range before use in qemu_plugin_get_hwaddr Alex Bennée
2022-04-08 16:47 ` Alex Bennée [this message]
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=20220408164742.2844631-16-alex.bennee@linaro.org \
--to=alex.bennee@linaro.org \
--cc=Luke.Craig@ll.mit.edu \
--cc=aaron@os.amperecomputing.com \
--cc=aurelien@aurel32.net \
--cc=berrange@redhat.com \
--cc=cota@braap.org \
--cc=crosa@redhat.com \
--cc=f4bug@amsat.org \
--cc=fam@euphon.net \
--cc=kuhn.chenqun@huawei.com \
--cc=ma.mandourr@gmail.com \
--cc=mahmoudabdalghany@outlook.com \
--cc=minyihh@uci.edu \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=richard.henderson@linaro.org \
--cc=robhenry@microsoft.com \
--cc=stefanha@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;
as well as URLs for NNTP newsgroup(s).