[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [RFC PATCH] tcg: add ability to dump /tmp/perf-<pid>.ma
From: |
Alex Bennée |
Subject: |
Re: [Qemu-devel] [RFC PATCH] tcg: add ability to dump /tmp/perf-<pid>.map files |
Date: |
Fri, 28 Mar 2014 16:34:17 +0000 |
User-agent: |
mu4e 0.9.9.6pre2; emacs 24.3.50.4 |
Kirill Batuzov <address@hidden> writes:
> On Thu, 27 Mar 2014, address@hidden wrote:
>
>> From: Alex Bennée <address@hidden>
>>
>> This allows the perf tool to map samples to each individual translation
>> block. This could be expanded for user space but currently it gives
>> enough information to find any hotblocks by other means.
>
> I'm in favor of this patch. Being able to profile guest code with perf
> will be very helpful for developing and tweaking optimizations in tcg.
OK I'll roll in Richard's comments and re-submit.
>
> <snip>
>
>> @@ -2575,6 +2579,8 @@ static inline int tcg_gen_code_common(TCGContext *s,
>> uint64_t target_pc,
>> the_end:
>> /* Generate TB finalization at the end of block */
>> tcg_out_tb_finalize(s);
>> +
>> + tcg_write_perfmap(gen_code_buf, s->code_ptr - gen_code_buf, target_pc);
>> return -1;
>> }
>
> I think a part of the patch is missing here. tcg_gen_code_common does not
> have target_pc argument in current master.
Ahh yes - it's currently sitting on-top of my qemu-log series which
pulled target_pc into the tcg_gen_code_common loop for the -dfilter
patch. I'll be sending the updated series in a moment.
> <snip>
>
>> diff --git a/vl.c b/vl.c
>> index c036367..f1c3c3d 100644
>> --- a/vl.c
>> +++ b/vl.c
>> @@ -123,6 +123,9 @@ int main(int argc, char **argv)
>> #define MAX_VIRTIO_CONSOLES 1
>> #define MAX_SCLP_CONSOLES 1
>>
>> +/* seems better than pulling in all the tcg headers? */
>> +extern void qemu_tcg_enable_perfmap(void);
>> +
I'm surprised no one has pulled me up on this yet, perhaps it is just
less ugly!
>> static const char *data_dir[16];
>> static int data_dir_idx;
>> const char *bios_name = NULL;
>> @@ -3345,6 +3348,9 @@ int main(int argc, char **argv, char **envp)
>> case QEMU_OPTION_DFILTER:
>> qemu_set_dfilter_ranges(optarg);
>> break;
>> + case QEMU_OPTION_PERFMAP:
>> + qemu_tcg_enable_perfmap();
>> + break;
>> case QEMU_OPTION_s:
>> add_device_config(DEV_GDB, "tcp::" DEFAULT_GDBSTUB_PORT);
>> break;
>>
>
> Is there any particular reason it is not enabled for linux-user mode? I
> think it should work just fine in both modes. linux-user handles command
> line options by itself in a different manner (and it has it's own set of
> options, different from softmmu targets). The corresponding code is in
> linux-user/main.c.
No real reason. I was only experimenting with system emulation so that's
all I'd tested it with. In fact for linux-user we should be able to make
a better stab at giving the blocks decent names thanks to symbol-lookup.
I'll update the patch to do it.
--
Alex Bennée