[PATCH v2 43/43] docs/devel: document some plugin assumptions

Alex Bennée posted 43 patches 10 months, 4 weeks ago
Maintainers: "Alex Bennée" <alex.bennee@linaro.org>, "Philippe Mathieu-Daudé" <philmd@linaro.org>, Thomas Huth <thuth@redhat.com>, Wainer dos Santos Moschetta <wainersm@redhat.com>, Beraldo Leal <bleal@redhat.com>, Richard Henderson <richard.henderson@linaro.org>, Paolo Bonzini <pbonzini@redhat.com>, "Marc-André Lureau" <marcandre.lureau@redhat.com>, Alexandre Iooss <erdnaxe@crans.org>, Mahmoud Mandour <ma.mandourr@gmail.com>, Palmer Dabbelt <palmer@dabbelt.com>, Alistair Francis <alistair.francis@wdc.com>, Bin Meng <bin.meng@windriver.com>, Weiwei Li <liwei1518@gmail.com>, Daniel Henrique Barboza <dbarboza@ventanamicro.com>, Liu Zhiwei <zhiwei_liu@linux.alibaba.com>, Eduardo Habkost <eduardo@habkost.net>, Marcel Apfelbaum <marcel.apfelbaum@gmail.com>, Yanan Wang <wangyanan55@huawei.com>, John Snow <jsnow@redhat.com>, Cleber Rosa <crosa@redhat.com>, Peter Maydell <peter.maydell@linaro.org>, Michael Rolnik <mrolnik@gmail.com>, Brian Cain <bcain@quicinc.com>, Song Gao <gaosong@loongson.cn>, Laurent Vivier <laurent@vivier.eu>, "Edgar E. Iglesias" <edgar.iglesias@gmail.com>, Nicholas Piggin <npiggin@gmail.com>, "Cédric Le Goater" <clg@kaod.org>, Yoshinori Sato <ysato@users.sourceforge.jp>, David Hildenbrand <david@redhat.com>, Ilya Leoshkevich <iii@linux.ibm.com>, David Woodhouse <dwmw2@infradead.org>, Paul Durrant <paul@xen.org>, Aurelien Jarno <aurelien@aurel32.net>
[PATCH v2 43/43] docs/devel: document some plugin assumptions
Posted by Alex Bennée 10 months, 4 weeks ago
While we attempt to hide implementation details from the plugin we
shouldn't be totally obtuse. Let the user know what they can and can't
expect with the various instrumentation options.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
 docs/devel/tcg-plugins.rst | 49 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 49 insertions(+)

diff --git a/docs/devel/tcg-plugins.rst b/docs/devel/tcg-plugins.rst
index 535a74684c5..9cc09d8c3da 100644
--- a/docs/devel/tcg-plugins.rst
+++ b/docs/devel/tcg-plugins.rst
@@ -112,6 +112,55 @@ details are opaque to plugins. The plugin is able to query select
 details of instructions and system configuration only through the
 exported *qemu_plugin* functions.
 
+However the following assumptions can be made:
+
+Translation Blocks
+++++++++++++++++++
+
+All code will go through a translation phase although not all
+translations will be necessarily be executed. You need to instrument
+actual executions to track what is happening.
+
+It is quite normal to see the same address translated multiple times.
+If you want to track the code in system emulation you should examine
+the underlying physical address (``qemu_plugin_insn_haddr``) to take
+into account the effects of virtual memory although if the system does
+paging this will change too.
+
+Not all instructions in a block will always execute so if its
+important to track individual instruction execution you need to
+instrument them directly. However asynchronous interrupts will not
+change control flow mid-block.
+
+Instructions
+++++++++++++
+
+Instruction instrumentation runs before the instruction executes. You
+can be can be sure the instruction will be dispatched, but you can't
+be sure it will complete. Generally this will be because of a
+synchronous exception (e.g. SIGILL) triggered by the instruction
+attempting to execute. If you want to be sure you will need to
+instrument the next instruction as well. See the ``execlog.c`` plugin
+for examples of how to track this and finalise details after execution.
+
+Memory Accesses
++++++++++++++++
+
+Memory callbacks are called after a successful load or store.
+Unsuccessful operations (i.e. faults) will not be visible to memory
+instrumentation although the execution side effects can be observed
+(e.g. entering a exception handler).
+
+System Idle and Resume States
++++++++++++++++++++++++++++++
+
+The ``qemu_plugin_register_vcpu_idle_cb`` and
+``qemu_plugin_register_vcpu_resume_cb`` functions can be used to track
+when CPUs go into and return from sleep states when waiting for
+external I/O. Be aware though that these may occur less frequently
+than in real HW due to the inefficiencies of emulation giving less
+chance for the CPU to idle.
+
 Internals
 ---------
 
-- 
2.39.2


Re: [PATCH v2 43/43] docs/devel: document some plugin assumptions
Posted by Pierrick Bouvier 10 months, 3 weeks ago
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>

On 1/3/24 21:33, Alex Bennée wrote:
> While we attempt to hide implementation details from the plugin we
> shouldn't be totally obtuse. Let the user know what they can and can't
> expect with the various instrumentation options.
> 
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> ---
>   docs/devel/tcg-plugins.rst | 49 ++++++++++++++++++++++++++++++++++++++
>   1 file changed, 49 insertions(+)
> 
> diff --git a/docs/devel/tcg-plugins.rst b/docs/devel/tcg-plugins.rst
> index 535a74684c5..9cc09d8c3da 100644
> --- a/docs/devel/tcg-plugins.rst
> +++ b/docs/devel/tcg-plugins.rst
> @@ -112,6 +112,55 @@ details are opaque to plugins. The plugin is able to query select
>   details of instructions and system configuration only through the
>   exported *qemu_plugin* functions.
>   
> +However the following assumptions can be made:
> +
> +Translation Blocks
> +++++++++++++++++++
> +
> +All code will go through a translation phase although not all
> +translations will be necessarily be executed. You need to instrument
> +actual executions to track what is happening.
> +
> +It is quite normal to see the same address translated multiple times.
> +If you want to track the code in system emulation you should examine
> +the underlying physical address (``qemu_plugin_insn_haddr``) to take
> +into account the effects of virtual memory although if the system does
> +paging this will change too.
> +
> +Not all instructions in a block will always execute so if its
> +important to track individual instruction execution you need to
> +instrument them directly. However asynchronous interrupts will not
> +change control flow mid-block.
> +
> +Instructions
> +++++++++++++
> +
> +Instruction instrumentation runs before the instruction executes. You
> +can be can be sure the instruction will be dispatched, but you can't
> +be sure it will complete. Generally this will be because of a
> +synchronous exception (e.g. SIGILL) triggered by the instruction
> +attempting to execute. If you want to be sure you will need to
> +instrument the next instruction as well. See the ``execlog.c`` plugin
> +for examples of how to track this and finalise details after execution.
> +
> +Memory Accesses
> ++++++++++++++++
> +
> +Memory callbacks are called after a successful load or store.
> +Unsuccessful operations (i.e. faults) will not be visible to memory
> +instrumentation although the execution side effects can be observed
> +(e.g. entering a exception handler).
> +
> +System Idle and Resume States
> ++++++++++++++++++++++++++++++
> +
> +The ``qemu_plugin_register_vcpu_idle_cb`` and
> +``qemu_plugin_register_vcpu_resume_cb`` functions can be used to track
> +when CPUs go into and return from sleep states when waiting for
> +external I/O. Be aware though that these may occur less frequently
> +than in real HW due to the inefficiencies of emulation giving less
> +chance for the CPU to idle.
> +
>   Internals
>   ---------
>