From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:50854) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WTZjI-0002Pd-Sr for qemu-devel@nongnu.org; Fri, 28 Mar 2014 12:34:09 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WTZjE-00084P-Gu for qemu-devel@nongnu.org; Fri, 28 Mar 2014 12:34:04 -0400 Received: from static.88-198-71-155.clients.your-server.de ([88.198.71.155]:55455 helo=socrates.bennee.com) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WTZjE-00084D-BO for qemu-devel@nongnu.org; Fri, 28 Mar 2014 12:34:00 -0400 References: <1395938253-9225-1-git-send-email-alex.bennee@linaro.org> From: Alex =?utf-8?Q?Benn=C3=A9e?= In-reply-to: Date: Fri, 28 Mar 2014 16:34:17 +0000 Message-ID: <87lhvub7ue.fsf@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Subject: Re: [Qemu-devel] [RFC PATCH] tcg: add ability to dump /tmp/perf-.map files List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Kirill Batuzov Cc: Yeongkyoon Lee , qemu-devel@nongnu.org, Alexander Graf , Blue Swirl , Stefan Weil , Anthony Liguori , Amit Shah , Matthew Fernandez , Richard Henderson Kirill Batuzov writes: > On Thu, 27 Mar 2014, alex.bennee@linaro.org wrote: > >> From: Alex Bennée >> >> 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. > > > >> @@ -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. > > >> 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