All of lore.kernel.org
 help / color / mirror / Atom feed
From: Aurelien Jarno <aurelien@aurel32.net>
To: Artyom Tarasenko <atar4qemu@gmail.com>
Cc: qemu-devel <qemu-devel@nongnu.org>,
	Dennis Luehring <dl.soluz@gmx.net>,
	Richard Henderson <rth@twiddle.net>
Subject: Re: [Qemu-devel] Debian 7.8.0 SPARC64 on qemu - anything i can do to speedup the emulation?
Date: Wed, 19 Aug 2015 13:00:10 +0200	[thread overview]
Message-ID: <20150819110010.GJ23508@aurel32.net> (raw)
In-Reply-To: <CACXAS8CcN9bz8GBtKyoK+FH29qpRm1XeiGf7apYTBfWYV4evKw@mail.gmail.com>

On 2015-08-19 12:41, Artyom Tarasenko wrote:
> Hi Richard,
> 
> On Tue, Aug 18, 2015 at 7:55 PM, Richard Henderson <rth@twiddle.net> wrote:
> > On 08/18/2015 02:24 AM, Artyom Tarasenko wrote:
> >> The unoptimized case is a sequence of multiple cmp and branch
> >> operations (likely created by a "case" statement in the original
> >> source code), especially where cmp is in a delay slot of a branch
> >> instruction.
> >
> > Interesting.
> >
> >> I wonder whether we always have to finish a TB on a conditional jump.
> >> Maybe it would make sense to translate further if a destination of a
> >> jump is not too far from dc->pc? The definition of "not too far" is
> >> indeed tricky.
> >
> > We can only handle two chained exits from a TB.  If we continue past
> > a conditional branch, we may well encounter a second conditional branch, which
> > would leave us with three different exits from the TB.
> >
> > Something that may be interesting to play with, however, is to change the TB
> > with which the insn in a delay slot is connected.
> >
> > For instance, we currently spend some amount of effort computing and saving the
> > branch condition, so that we can then execute the delay slot, and afterwards
> > use the saved branch condition to perform the branch.
> >
> > Another way of doing this is to immediately branch, exiting the TB.  But we set
> > up PC+NPC for the next TB such that the delay slot is the first insn that is
> > executed within the next TB.  In that way, the compare in the delay slot that
> > you mention *is* in the same TB as the branch that uses it, allowing
> > the case to be optimized.
> >
> > This could wind up creating more TBs than the current solution, so it's not
> > clear that it would be a win.  One can mitigate that somewhat by noticing the
> > case where the delay slot is a nop.  I do think it's worth an experiment.
> 
> So it is possible to make a TB with non sequential instructions?
> The instruction in the delay slot would be located most likely
> elsewhere than the following instructions.
> 
> But I think I've been chasing a red herring. I see those helpers in
> perf top when running sysbench, but not when running g++ (and at the
> end g++ is much more relevant benchmark for me):
> 
> 
> Samples: 83K of event 'cpu-clock', Event count (approx.): 15333243164,
> Thread: qemu-system-spa(2743)
>  27.10%  [kernel]                 [k] retint_signal
>  12.66%  qemu-system-sparc64      [.] tcg_optimize
>   9.18%  [vdso]                   [.] 0x0000000000000998
>   8.39%  [kernel]                 [k] _raw_spin_unlock_irqrestore
>   4.76%  qemu-system-sparc64      [.] tcg_liveness_analysis
>   3.89%  qemu-system-sparc64      [.] tcg_reg_alloc_op
>   2.80%  qemu-system-sparc64      [.] tcg_out_opc
>   2.45%  qemu-system-sparc64      [.] get_physical_address_data
>   1.86%  [kernel]                 [k] native_read_tsc
>   1.62%  qemu-system-sparc64      [.] tlb_flush_page
>   1.55%  qemu-system-sparc64      [.] tcg_out_modrm_sib_offset.constprop.42
>   1.45%  [unknown]                [.] 0x00000000451c5cae
>   1.43%  qemu-system-sparc64      [.] gen_intermediate_code_pc
>   1.39%  qemu-system-sparc64      [.] tcg_temp_new_internal_i64
>   1.24%  qemu-system-sparc64      [.] tb_flush_jmp_cache
>   1.11%  qemu-system-sparc64      [.] disas_sparc_insn
>   1.08%  qemu-system-sparc64      [.] tcg_out_modrm
>   0.97%  qemu-system-sparc64      [.] tcg_reg_alloc_start
>   0.77%  qemu-system-sparc64      [.] cpu_sparc_exec
>   0.73%  qemu-system-sparc64      [.] replace_tlb_1bit_lru.isra.3
>   0.72%  qemu-system-sparc64      [.] tcg_gen_code_search_pc
>   0.72%  qemu-system-sparc64      [.] tcg_opt_gen_mov
>   0.70%  qemu-system-sparc64      [.] reset_temp
> 
> I'm not sure why I still see kernel functions when I zoom into qemu
> thread. Is this qemu signal handling?
> And then it would be interesting to know where in this listing is the
> generated code. Is it [vdso], [unknown] or is it hidden behind
> retint_signal?
> 
> Ironically a good optimization target seems to be the tcg_optimize
> function. If I zoom I see it spends most of the time in
> reset_all_temps.
> 
> Any suggestions how to improve it?
> 

Try this patch:
http://lists.nongnu.org/archive/html/qemu-devel/2015-08/msg02042.html

Aurelien

-- 
Aurelien Jarno                          GPG: 4096R/1DDD8C9B
aurelien@aurel32.net                 http://www.aurel32.net

  reply	other threads:[~2015-08-19 11:00 UTC|newest]

Thread overview: 80+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-07-28  7:52 [Qemu-devel] Debian 7.8.0 SPARC64 on qemu - anything i can do to speedup the emulation? Dennis Luehring
2015-07-28  9:54 ` Artyom Tarasenko
2015-07-29  6:20   ` Dennis Luehring
2015-07-29  8:23     ` Artyom Tarasenko
2015-07-29 15:01     ` Aurelien Jarno
2015-07-30  3:52       ` Dennis Luehring
2015-07-30  7:52         ` Aurelien Jarno
2015-07-30  8:16           ` Dennis Luehring
2015-07-30  8:42             ` Artyom Tarasenko
2015-07-30  8:55             ` Aurelien Jarno
2015-07-30  9:35               ` Artyom Tarasenko
2015-07-30 10:09                 ` Aurelien Jarno
2015-07-30 18:21                   ` Dennis Luehring
2015-07-30 15:50               ` Aurelien Jarno
2015-07-31 15:31                 ` Artyom Tarasenko
2015-07-31 15:43                   ` Aurelien Jarno
2015-08-02 13:11                     ` Mark Cave-Ayland
2015-08-03  8:31                     ` Artyom Tarasenko
2015-08-03  9:17                       ` Aurelien Jarno
2015-08-18  9:24                         ` Artyom Tarasenko
2015-08-18 17:55                           ` Richard Henderson
2015-08-19 10:41                             ` Artyom Tarasenko
2015-08-19 11:00                               ` Aurelien Jarno [this message]
2015-08-19 14:41                                 ` Artyom Tarasenko
2015-08-20  5:22                                   ` Dennis Luehring
2015-08-20 10:40                                     ` Artyom Tarasenko
2015-08-20 17:19                                   ` Richard Henderson
2015-08-21  4:32                                     ` Dennis Luehring
2015-08-21  5:49                                       ` Richard Henderson
2015-08-21  6:05                                         ` Dennis Luehring
2015-08-21 15:47                                           ` Richard Henderson
2015-08-21 16:13                                             ` Aurelien Jarno
2015-08-21 16:41                                             ` Dennis Luehring
2015-08-22 16:45                                     ` Artyom Tarasenko
2015-08-22 17:47                                       ` Dennis Luehring
2015-08-22 18:53                                         ` Artyom Tarasenko
2015-08-23 12:11                                           ` Dennis Luehring
2015-08-23  0:41                                       ` Richard Henderson
2015-08-26 16:17                                         ` Artyom Tarasenko
2015-08-26 19:47                                           ` Richard Henderson
2015-08-27  5:54                                             ` Dennis Luehring
2015-08-27 15:04                                               ` Richard Henderson
2015-08-27 15:58                                             ` Artyom Tarasenko
2015-08-17 11:32                     ` Dennis Luehring
2015-08-03  7:58               ` Dennis Luehring
2015-08-03 14:51               ` Dennis Luehring
2015-08-03 15:59                 ` Karel Gardas
2015-08-03 19:51                   ` Dennis Luehring
2015-08-06  9:00                     ` Karel Gardas
2015-08-06  9:21                       ` Dennis Luehring
2015-08-06  9:27                         ` Dennis Luehring
2015-08-06 12:50                           ` Karel Gardas
2015-08-06 16:35                             ` Dennis Luehring
2015-08-18  4:25                       ` Dennis Luehring
2015-08-18  8:19                         ` Aurelien Jarno
2015-08-18 10:39                           ` Dennis Luehring
2015-08-18 11:21                           ` Dennis Luehring
     [not found]                         ` <CAMO55fkcW1eOaZSz2MJgqZEP29pTuHvTLe0Kna5eHYfg7cFyPA@mail.gmail.com>
2015-08-19  4:28                           ` Dennis Luehring
2015-07-29  8:07   ` Dennis Luehring
2015-07-29 15:03     ` Aurelien Jarno
2015-07-29  9:17 ` Karel Gardas
2015-07-29 10:20   ` Dennis Luehring
2015-07-29 13:45     ` Karel Gardas
2015-07-29 15:13       ` Aurelien Jarno
2015-07-29 10:55   ` Dennis Luehring
2015-07-29 12:34     ` Karel Gardas
2015-07-29 12:38       ` Karel Gardas
2015-07-29 13:55       ` Dennis Luehring
2015-07-29 14:41         ` Karel Gardas
2015-07-30  3:47           ` Dennis Luehring
2015-07-30  7:12             ` Paolo Bonzini
2015-07-30  8:31               ` Artyom Tarasenko
2015-08-02 19:12                 ` Alex Bennée
2015-07-30  7:55             ` Aurelien Jarno
2015-08-17 14:19               ` Artyom Tarasenko
2015-08-17 15:40                 ` Richard Henderson
2015-08-17 16:25                   ` Artyom Tarasenko
2015-08-17 21:08                     ` Aurelien Jarno
2015-08-27 15:29 ` Artyom Tarasenko
2015-09-02  4:34   ` Dennis Luehring

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=20150819110010.GJ23508@aurel32.net \
    --to=aurelien@aurel32.net \
    --cc=atar4qemu@gmail.com \
    --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.