Richard Henderson <r...@twiddle.net> writes: > On 03/27/2014 09:37 AM, alex.ben...@linaro.org wrote: >> From: Alex Bennée <alex.ben...@linaro.org> >> >> 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. > > Plausible, I suppose.
It works fine on my toy test case (kernel + single computation user-space /init task) but I've not really used it in anger for any performance tweaking hence it's only an RFC patch. Hopefully it will save re-inventing the wheel should anyone actually want to do serious tcg optimisation. I've had a brief poke around the TCG profiling and seen it track generation cost. Do we have any hotblock tracking in the built-in profiler? <snip> >> +static void tcg_write_perfmap(uint8_t *start, uint64_t size, uint64_t >> target_pc) >> +{ >> + if (tcg_perfmap) { >> + g_fprintf(tcg_perfmap, "%lx %lx subject-0x%lx\n", >> + (uint64_t) start, size, target_pc); >> + } >> +} > > Why oh why do you feel the need to use g_fprintf? That's just gratuitous glib > obfuscation, that. Sorry my bad, force of habit given that we have glib as a dependency. But your right in this case it's just a dumb wrapper unlike when your doing more string mangling where glib save a lot of time. > For this small of a single-use function, I think it would be clearer to just > do > the printf directly in tcg_gen_code_common. Certainly no need to use uint64_t > all over the place; ptrdiff_t and target_ulong are exactly the right > thing. Do we have a format macro for target_ulong? The uint64_t was just for simplicity. I found when I was messing with the trace-event stuff some of the target types where barred from the common code although I guess in this case the tcg is very aware of the execution target. -- Alex Bennée