All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Alex Bennée" <alex.bennee@linaro.org>
To: Richard Henderson <rth@twiddle.net>
Cc: aurelien@aurel32.net, qemu-devel@nongnu.org, dl.soluz@gmx.net,
	atar4qemu@gmail.com
Subject: Re: [Qemu-devel] [RFC 00/20] Do away with TB retranslation
Date: Thu, 10 Sep 2015 19:55:23 +0100	[thread overview]
Message-ID: <87r3m685pg.fsf@linaro.org> (raw)
In-Reply-To: <1441173123-25540-1-git-send-email-rth@twiddle.net>


Richard Henderson <rth@twiddle.net> writes:

> I've been looking at this problem off and on for the last week or so,
> prompted by the sparc performance work.  Although I havn't been able
> to get a proper sparc64 guest install working, I see the exact same
> problem with a mips guest.
>
<snip>
> In the past we've talked about getting rid of retranslation entirely.
> It's clever, but it certainly has its share of problems.  I gave it
> a go this weekend.
>
<snip>
> Thoughts on the approach?

I've only had a quick glance so far but I'm fairly familiar with the
concept from a previous life. I'll aim to do a full review later once
I've gotten through my MTTCG review backlog.

Anyway some quick points:

 * You can save data by only marking faulting instructions

Assuming that all asynchronous instructions trigger at the end/prologue
of basic blocks you only actually need to record the address of
potentially faulting instructions. In fact only a few backend
instructions will actually synchronously fault.

Of course this does have the downside of having to mark all those
instructions in the front end.

 * This method can also be used for additional rectification data

AIUI we currently ensure all load/stores are barriers and ensure the CPU
register file is updated before the occur. However if you wanted to you
could drop that requirement and mark the target-host register pair and
only fish it out when required on a fault.

 * Test suites are essential if your going to get clever

Last time I went through this I built a SPARC test suite to cover all
faulting instructions in all the various addressing modes. It flushed
out a lot of bugs.

I appreciate the QEMU's aims may be a bit less demanding and not need to
be fully complete and fix up problems as we hit them in the field.
However consider at least a framework of a testcase for checking PC
rectification as it will help in validating those fixes.

 * Delay slot/nPCs are a pain

Faults in delay slots are a pain to get right although maybe QEMUs
architecture makes it a little easier to do. Fortunately for me I no
longer have to worry too hard about these architectures, good luck ;-)

Anyway anything that gets rid of the re-translation cost I'm broadly
supportive of. I shall review the code later!

>
>
> r~
>
>
> Richard Henderson (20):
>   tcg: Rename debug_insn_start to insn_start
>   target-*: Unconditionally emit tcg_gen_insn_start
>   tcg: Allow extra data to be attached to insn_start
>   target-arm: Add condexec state to insn_start
>   target-i386: Add cc_op state to insn_start
>   target-mips: Add delayed branch state to insn_start
>   target-s390x: Add cc_op state to insn_start
>   target-sh4: Add flags state to insn_start
>   target-cris: Mirror gen_opc_pc into insn_start
>   target-sparc: Tidy gen_branch_a interface
>   target-sparc: Split out gen_branch_n
>   target-sparc: Remove gen_opc_jump_pc
>   target-sparc: Add npc state to insn_start
>   tcg: Merge cpu_gen_code into tb_gen_code
>   target-*: Drop cpu_gen_code define
>   tcg: Add TCG_MAX_INSNS
>   tcg: Pass data argument to restore_state_to_opc
>   tcg: Save insn data and use it in cpu_restore_state_from_tb
>   tcg: Remove gen_intermediate_code_pc
>   tcg: Remove tcg_gen_code_search_pc
>
>  include/exec/exec-all.h       |   6 +-
>  target-alpha/cpu.h            |   1 -
>  target-alpha/translate.c      |  55 +++-------
>  target-arm/cpu.h              |   2 +-
>  target-arm/translate-a64.c    |  39 ++-----
>  target-arm/translate.c        |  75 ++++---------
>  target-arm/translate.h        |   8 +-
>  target-cris/cpu.h             |   1 -
>  target-cris/translate.c       |  64 +++---------
>  target-cris/translate_v10.c   |   3 -
>  target-i386/cpu.h             |   2 +-
>  target-i386/translate.c       |  86 ++++-----------
>  target-lm32/cpu.h             |   1 -
>  target-lm32/translate.c       |  55 ++--------
>  target-m68k/cpu.h             |   1 -
>  target-m68k/translate.c       |  64 +++---------
>  target-microblaze/cpu.h       |   1 -
>  target-microblaze/translate.c |  56 +++-------
>  target-mips/cpu.h             |   2 +-
>  target-mips/translate.c       |  73 ++++---------
>  target-moxie/cpu.h            |   1 -
>  target-moxie/translate.c      |  65 ++++--------
>  target-openrisc/cpu.h         |   1 -
>  target-openrisc/translate.c   |  54 ++--------
>  target-ppc/cpu.h              |   1 -
>  target-ppc/translate.c        |  56 +++-------
>  target-s390x/cpu.h            |   2 +-
>  target-s390x/translate.c      |  61 +++--------
>  target-sh4/cpu.h              |   2 +-
>  target-sh4/translate.c        |  71 ++++---------
>  target-sparc/cpu.h            |   2 +-
>  target-sparc/translate.c      | 189 ++++++++++++++-------------------
>  target-tricore/translate.c    |  53 ++++------
>  target-unicore32/translate.c  |  57 +++-------
>  target-xtensa/cpu.h           |   1 -
>  target-xtensa/translate.c     |  52 ++-------
>  tcg/tcg-op.h                  |  52 +++++++--
>  tcg/tcg-opc.h                 |   4 +-
>  tcg/tcg.c                     |  96 ++++++++---------
>  tcg/tcg.h                     |  14 ++-
>  tci.c                         |   9 --
>  translate-all.c               | 237 ++++++++++++++++++++++++------------------
>  42 files changed, 578 insertions(+), 1097 deletions(-)

-- 
Alex Bennée

  parent reply	other threads:[~2015-09-10 18:55 UTC|newest]

Thread overview: 62+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-09-02  5:51 [Qemu-devel] [RFC 00/20] Do away with TB retranslation Richard Henderson
2015-09-02  5:51 ` [Qemu-devel] [PATCH 02/20] target-*: Unconditionally emit tcg_gen_insn_start Richard Henderson
2015-09-02  5:51 ` [Qemu-devel] [PATCH 03/20] tcg: Allow extra data to be attached to insn_start Richard Henderson
2015-09-08 18:44   ` Peter Maydell
2015-09-02  5:51 ` [Qemu-devel] [PATCH 04/20] target-arm: Add condexec state " Richard Henderson
2015-09-02  5:51 ` [Qemu-devel] [PATCH 05/20] target-i386: Add cc_op " Richard Henderson
2015-09-02  5:51 ` [Qemu-devel] [PATCH 06/20] target-mips: Add delayed branch " Richard Henderson
2015-09-02  5:51 ` [Qemu-devel] [PATCH 07/20] target-s390x: Add cc_op " Richard Henderson
2015-09-02  5:51 ` [Qemu-devel] [PATCH 08/20] target-sh4: Add flags " Richard Henderson
2015-09-02  5:51 ` [Qemu-devel] [PATCH 09/20] target-cris: Mirror gen_opc_pc into insn_start Richard Henderson
2015-09-02  5:51 ` [Qemu-devel] [PATCH 10/20] target-sparc: Tidy gen_branch_a interface Richard Henderson
2015-09-02  5:51 ` [Qemu-devel] [PATCH 11/20] target-sparc: Split out gen_branch_n Richard Henderson
2015-09-02  5:51 ` [Qemu-devel] [PATCH 12/20] target-sparc: Remove gen_opc_jump_pc Richard Henderson
2015-09-02  5:51 ` [Qemu-devel] [PATCH 13/20] target-sparc: Add npc state to insn_start Richard Henderson
2015-09-02  5:51 ` [Qemu-devel] [PATCH 14/20] tcg: Merge cpu_gen_code into tb_gen_code Richard Henderson
2015-09-02  5:51 ` [Qemu-devel] [PATCH 15/20] target-*: Drop cpu_gen_code define Richard Henderson
2015-09-02  5:51 ` [Qemu-devel] [PATCH 16/20] tcg: Add TCG_MAX_INSNS Richard Henderson
2015-09-02  5:52 ` [Qemu-devel] [PATCH 17/20] tcg: Pass data argument to restore_state_to_opc Richard Henderson
2015-09-08 18:46   ` Peter Maydell
2015-09-17 19:39     ` Richard Henderson
2015-09-02  5:52 ` [Qemu-devel] [PATCH 18/20] tcg: Save insn data and use it in cpu_restore_state_from_tb Richard Henderson
2015-09-10 13:49   ` Peter Maydell
2015-09-11 10:29     ` Sergey Fedorov
2015-09-11 10:32       ` Peter Maydell
2015-09-11 10:46         ` Sergey Fedorov
2015-09-15 20:08     ` Richard Henderson
2015-09-02  5:52 ` [Qemu-devel] [PATCH 19/20] tcg: Remove gen_intermediate_code_pc Richard Henderson
2015-09-08 18:49   ` Peter Maydell
2015-09-02  5:52 ` [Qemu-devel] [PATCH 20/20] tcg: Remove tcg_gen_code_search_pc Richard Henderson
2015-09-02 12:21 ` [Qemu-devel] [RFC 00/20] Do away with TB retranslation Max Filippov
2015-09-02 14:21   ` Richard Henderson
2015-09-04 15:18     ` Max Filippov
2015-09-04 15:31       ` Peter Maydell
2015-09-04 16:46       ` Richard Henderson
2015-09-04 17:07         ` Max Filippov
2015-09-05 14:11         ` Mark Cave-Ayland
2015-09-06 20:19           ` Richard Henderson
2015-09-09 15:35             ` Artyom Tarasenko
2015-09-08 18:56 ` Peter Maydell
2015-09-08 19:00   ` Richard Henderson
2015-09-08 19:06     ` Peter Maydell
2015-09-08 19:28       ` Richard Henderson
2015-09-08 20:25         ` Peter Maydell
2015-09-09 15:05     ` Artyom Tarasenko
2015-09-09 16:18       ` Paolo Bonzini
2015-09-09 17:48         ` Artyom Tarasenko
2015-09-10  6:07     ` Dennis Luehring
2015-09-10  7:00       ` Artyom Tarasenko
2015-09-10  9:32         ` Dennis Luehring
2015-09-10  9:54           ` Artyom Tarasenko
2015-09-10 10:37             ` Dennis Luehring
2015-09-10 10:57               ` Paolo Bonzini
2015-09-10 11:02               ` Dennis Luehring
2015-09-10 11:20                 ` Artyom Tarasenko
2015-09-10 13:54   ` Peter Maydell
2015-09-10 17:48 ` Aurelien Jarno
2015-09-13 21:00   ` Aurelien Jarno
2015-09-10 18:55 ` Alex Bennée [this message]
2015-09-15 20:19   ` Richard Henderson
2015-09-16  6:19     ` Dennis Luehring
2015-09-16  8:59     ` Alex Bennée
2015-09-16 20:41       ` Richard Henderson

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=87r3m685pg.fsf@linaro.org \
    --to=alex.bennee@linaro.org \
    --cc=atar4qemu@gmail.com \
    --cc=aurelien@aurel32.net \
    --cc=dl.soluz@gmx.net \
    --cc=qemu-devel@nongnu.org \
    --cc=rth@twiddle.net \
    /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.