On 20 November 2017 at 05:30, 李阳 <liyang.cs....@gmail.com> wrote:
> Since I want to trace the instruction statistics( instruction type and
> number) about specified process running on the simulated operating system,
> I can do the analysis of instruction type via the *struct TCGOpcode* in
> qemu source code(
> *void gen_intermediate_code_a64(ARMCPU *cpu, TranslationBlock *tb**)** in *
> *target-arm/translate-a64.c*).

Bear in mind that this function is called once at translation
time (when we JIT the Arm code to x86), not at runtime (we
may run this TB many times after JITting it once). So it's
tricky to put instrumentation here.

> My problem is that I can only collect the instruction statistics of all the
> processes running on the qemu guest operating system and cannot distinguish
> the specified process from all the processes.
>
> Is there any good way to help me out? Thanks in advance!
>
> My qemu configuration:
> Host: X86, ubuntu14.04
> QEMU: qemu-2.7.0-rc5
> Guest: AARCH64
> Target workload: Redis, NGINX etc.

You may be able to do something by looking at the state of the
guest CONTEXTIDR and TPIDR registers -- you'll need to look
into whether the guest OS stores useful per-process or
per-thread information in those which you can then use
to annotate your tracing.

(Since the CONTEXTIDR etc are runtime values, you'll need
to check them at runtime, not at translate time -- we can
translate a block of code once and then use the generated
code at runtime for more than one thread.)

thanks
-- PMM

Reply via email to