From: Paolo Bonzini <pbonzini@redhat.com>
To: Sergey Fedorov <serge.fdrv@gmail.com>
Cc: mttcg@greensocs.com, "peter maydell" <peter.maydell@linaro.org>,
"claudio fontana" <claudio.fontana@huawei.com>,
"Sergey Fedorov" <sergey.fedorov@linaro.org>,
patches@linaro.org, "jan kiszka" <jan.kiszka@siemens.com>,
"Peter Crosthwaite" <crosthwaite.peter@gmail.com>,
"mark burton" <mark.burton@greensocs.com>,
qemu-devel@nongnu.org, "a rigo" <a.rigo@virtualopensystems.com>,
cota@braap.org, "bobby prani" <bobby.prani@gmail.com>,
rth@twiddle.net, "Alex Bennée" <alex.bennee@linaro.org>,
"fred konrad" <fred.konrad@greensocs.com>
Subject: Re: [Qemu-devel] [PATCH 3/3] tcg: Avoid bouncing tb_lock between tb_gen_code() and tb_add_jump()
Date: Mon, 11 Jul 2016 16:03:42 +0200 [thread overview]
Message-ID: <c93d3aa8-8309-b8bc-f206-ec1abdde9a58@redhat.com> (raw)
In-Reply-To: <578399C1.6090108@gmail.com>
On 11/07/2016 15:06, Sergey Fedorov wrote:
> On 08/07/16 23:52, Paolo Bonzini wrote:
>>
>> On 08/07/2016 22:24, Sergey Fedorov wrote:
>>> I remember, I've just found that we discussed it in this thread:
>>>
>>> http://thread.gmane.org/gmane.comp.emulators.qemu/401723/focus=406852
>>>
>>> I was thinking of just doing 'tb_jmp_cache' lookup out of the lock, not
>>> tb_find_physical(). Now thanks to QHT, we could do tb_find_physical()
>>> out of the lock, too. This changes things.
>> But in my patch ("tcg: move tb_find_fast outside the tb_lock critical
>> section", which originally was written by Fred---most of my contribution
>> was getting the invalidation right, not the lock-free lookup)
>> tb_find_physical was also done out of the lock. It was then retried
>> inside the lock, if it failed.
>>
>> This is why I needed to fail all concurrent lookups as the first step in
>> the invalidation.
>>
>> Emilio's QHT resulted in a rewrite of tb_find_physical, but the basic
>> concepts are the same.
>
> That could work, I think, if we re-check under tb_lock whether the TB is
> still valid before adding a direct jump to it.
Right, this can still happen:
tb_find_fast tb_phys_invalidate
tb_lock
jmp_cache miss
-> tb_find_slow
-> tb_find_physical
QHT hit
tb_lock
invalidate tb->pc
remove from lists
tb_unlock
tb_add_jump
tb_unlock
I seem to recall that Emilio added a seqlock for this purpose, but
adding a tb_check_invalidated(TranslationBlock *tb) inline function will
also do.
Paolo
next prev parent reply other threads:[~2016-07-11 14:04 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-07-05 16:18 [Qemu-devel] [PATCH v2 0/6] Reduce lock contention on TCG hot-path Alex Bennée
2016-07-05 16:18 ` [Qemu-devel] [PATCH v2 1/6] tcg: Ensure safe tb_jmp_cache lookup out of 'tb_lock' Alex Bennée
2016-07-07 13:52 ` Sergey Fedorov
2016-07-08 14:51 ` Sergey Fedorov
2016-07-05 16:18 ` [Qemu-devel] [PATCH v2 2/6] tcg: set up tb->page_addr before insertion Alex Bennée
2016-07-07 14:08 ` Sergey Fedorov
2016-07-08 9:40 ` Sergey Fedorov
2016-07-05 16:18 ` [Qemu-devel] [PATCH v2 3/6] tcg: cpu-exec: remove tb_lock from the hot-path Alex Bennée
2016-07-07 14:18 ` Sergey Fedorov
2016-07-08 15:50 ` Sergey Fedorov
2016-07-08 17:34 ` Sergey Fedorov
2016-07-08 18:03 ` Alex Bennée
2016-07-08 18:20 ` Sergey Fedorov
2016-07-08 20:09 ` Sergey Fedorov
2016-07-05 16:18 ` [Qemu-devel] [PATCH v2 4/6] tcg: cpu-exec: factor out TB patching code Alex Bennée
2016-07-05 16:18 ` [Qemu-devel] [PATCH v2 5/6] tcg: introduce tb_lock_recursive() Alex Bennée
2016-07-05 16:18 ` [Qemu-devel] [PATCH v2 6/6] tcg: cpu-exec: roll-up tb_find_fast/slow Alex Bennée
2016-07-07 16:44 ` Sergey Fedorov
2016-07-07 16:44 ` [Qemu-devel] [PATCH 1/3] tcg: Introduce mmap_lock_reset() Sergey Fedorov
2016-07-07 16:44 ` [Qemu-devel] [PATCH 2/3] tcg: Introduce tb_lock_locked() Sergey Fedorov
2016-07-07 16:44 ` [Qemu-devel] [PATCH 3/3] tcg: Avoid bouncing tb_lock between tb_gen_code() and tb_add_jump() Sergey Fedorov
2016-07-07 19:36 ` Alex Bennée
2016-07-07 19:46 ` Sergey Fedorov
2016-07-07 20:36 ` Sergey Fedorov
2016-07-07 21:40 ` Alex Bennée
2016-07-08 8:40 ` Paolo Bonzini
2016-07-08 10:25 ` Sergey Fedorov
2016-07-08 11:02 ` Paolo Bonzini
2016-07-08 12:32 ` Sergey Fedorov
2016-07-08 14:07 ` Paolo Bonzini
2016-07-08 19:55 ` Sergey Fedorov
2016-07-08 20:18 ` Paolo Bonzini
2016-07-08 20:24 ` Sergey Fedorov
2016-07-08 20:52 ` Paolo Bonzini
2016-07-11 13:06 ` Sergey Fedorov
2016-07-11 14:03 ` Paolo Bonzini [this message]
2016-07-11 14:27 ` Sergey Fedorov
2016-07-07 16:04 ` [Qemu-devel] [PATCH v2 0/6] Reduce lock contention on TCG hot-path Emilio G. Cota
2016-07-07 16:13 ` Paolo Bonzini
2016-07-07 19:33 ` Alex Bennée
2016-07-07 19:38 ` Alex Bennée
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=c93d3aa8-8309-b8bc-f206-ec1abdde9a58@redhat.com \
--to=pbonzini@redhat.com \
--cc=a.rigo@virtualopensystems.com \
--cc=alex.bennee@linaro.org \
--cc=bobby.prani@gmail.com \
--cc=claudio.fontana@huawei.com \
--cc=cota@braap.org \
--cc=crosthwaite.peter@gmail.com \
--cc=fred.konrad@greensocs.com \
--cc=jan.kiszka@siemens.com \
--cc=mark.burton@greensocs.com \
--cc=mttcg@greensocs.com \
--cc=patches@linaro.org \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=rth@twiddle.net \
--cc=serge.fdrv@gmail.com \
--cc=sergey.fedorov@linaro.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.