[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v9 11/13] accel/tcg: adding integration with linux perf
From: |
Richard Henderson |
Subject: |
Re: [PATCH v9 11/13] accel/tcg: adding integration with linux perf |
Date: |
Tue, 8 Oct 2019 15:33:16 -0400 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.8.0 |
On 10/7/19 11:28 AM, Alex Bennée wrote:
> +static uint32_t get_e_machine(void)
> +{
> + uint32_t e_machine = EM_NONE;
> + Elf64_Ehdr elf_header;
Not ideal, as this appears to not work on 32-bit hosts, but the two structures
do match up within the first 24 bytes, in which this is located.
That said, this value is present within tcg/host/tcg-target.inc.c as
ELF_HOST_MACHINE. So we really don't have to play /proc/self/exec games.
> +void start_jitdump_file(void)
> +{
> + g_autofree gchar *dumpfile_name = g_strdup_printf("./jit-%d.dump",
> getpid());
> + dumpfile = fopen(dumpfile_name, "w+");
> +
> + /* 'Perf record' saves mmaped files during the execution of a program and
> + * 'perf inject' iterate over them to reconstruct all used/executed
> binary.
> + * So, we create a mmap with the path of our jitdump that is processed
> + * and used by 'perf inject' to reconstruct jitted binaries.
> + */
> + perf_marker = mmap(NULL, sysconf(_SC_PAGESIZE),
> + PROT_READ | PROT_EXEC,
> + MAP_PRIVATE,
> + fileno(dumpfile), 0);
(1) sysconf(_SC_PAGESIZE) is qemu_real_host_page_size.
(2) This is a page-sized mapping of a new, zero-sized file?
I assume this mapping event gets logged, and that it its
only purpose?
(3) I really need to read the kernel docs...
> +void append_load_in_jitdump_file(TranslationBlock *tb)
> +{
> + gchar *func_name = g_strdup_printf("TB virt:0x"TARGET_FMT_lx, tb->pc);
> +
> + /* Serialise the writing of the dump file */
> + qemu_mutex_lock(&dumpfile_lock);
> +
> + struct jr_code_load load_event;
> + load_event.p.id = JIT_CODE_LOAD;
> + load_event.p.total_size =
> + sizeof(struct jr_code_load) + func_name->len + 1 + tb->tc.size;
How does a "gchar *func_name" have ->len? Did this used to be GString, but a
last-minute change means it no longer compiles?
> + fflush(dumpfile);
Why fflushing all of the time? Surely the file contents doesn't matter until
after the final close.
> + qemu_mutex_unlock(&dumpfile_lock);
Why a separate qemu locking instead of using stdio's own locking (flockfile).
> diff --git a/accel/tcg/translate-all.c b/accel/tcg/translate-all.c
> index 871d91d559..3fafb656e7 100644
> --- a/accel/tcg/translate-all.c
> +++ b/accel/tcg/translate-all.c
> @@ -58,6 +58,10 @@
> #include "sysemu/cpus.h"
> #include "sysemu/tcg.h"
>
> +#ifdef __linux__
> +#include "perf/jitdump.h"
> +#endif
Why the ifdefs? We're not dependent on other headers are we?
Not that there's a "perf" on other hosts, but AFACT it should
at least compile...
r~
- Re: [PATCH v9 05/13] accel: adding TB_JIT_TIME and full replacing CONFIG_PROFILER, (continued)
- [PATCH v9 12/13] tb-stats: adding TBStatistics info into perf dump, Alex Bennée, 2019/10/07
- [PATCH v9 13/13] configure: remove the final bits of --profiler support, Alex Bennée, 2019/10/07
- [PATCH v9 09/13] Adding info [tb-list|tb] commands to HMP (WIP), Alex Bennée, 2019/10/07
- [PATCH v9 11/13] accel/tcg: adding integration with linux perf, Alex Bennée, 2019/10/07
- Re: [PATCH v9 11/13] accel/tcg: adding integration with linux perf,
Richard Henderson <=
- Re: [PATCH v9 00/13] TCG code quality tracking and perf integration, no-reply, 2019/10/07
- Re: [PATCH v9 00/13] TCG code quality tracking and perf integration, no-reply, 2019/10/07