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


Reply via email to