From: Marc Zyngier <maz@kernel.org>
To: Tianyi Liu <i.pear@outlook.com>
Cc: seanjc@google.com, pbonzini@redhat.com, peterz@infradead.org,
mingo@redhat.com, acme@kernel.org,
linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev,
linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org,
kvm@vger.kernel.org, x86@kernel.org, mark.rutland@arm.com,
alexander.shishkin@linux.intel.com, jolsa@kernel.org,
namhyung@kernel.org, irogers@google.com, adrian.hunter@intel.com
Subject: Re: [PATCH v2 0/5] perf: KVM: Enable callchains for guests
Date: Wed, 11 Oct 2023 17:45:29 +0100 [thread overview]
Message-ID: <8734yhm7km.wl-maz@kernel.org> (raw)
In-Reply-To: <SY4P282MB1084ECBCC1B176153B9E2A009DCFA@SY4P282MB1084.AUSP282.PROD.OUTLOOK.COM>
On Sun, 08 Oct 2023 15:48:17 +0100,
Tianyi Liu <i.pear@outlook.com> wrote:
>
> Hi there,
>
> This series of patches enables callchains for guests (used by perf kvm),
> which holds the top spot on the perf wiki TODO list [1]. This allows users
> to perform guest OS callchain or performance analysis from external
> using PMU events.
>
> The event processing flow is as follows (shown as backtrace):
> #0 kvm_arch_vcpu_get_frame_pointer / kvm_arch_vcpu_read_virt (per arch)
> #1 kvm_guest_get_frame_pointer / kvm_guest_read_virt
> <callback function pointers in `struct perf_guest_info_callbacks`>
> #2 perf_guest_get_frame_pointer / perf_guest_read_virt
> #3 perf_callchain_guest
> #4 get_perf_callchain
> #5 perf_callchain
>
> Between #0 and #1 is the interface between KVM and the arch-specific
> impl, while between #1 and #2 is the interface between Perf and KVM.
> The 1st patch implements #0. The 2nd patch extends interfaces between #1
> and #2, while the 3rd patch implements #1. The 4th patch implements #3
> and modifies #4 #5. The last patch is for userspace utils.
>
> Since arm64 hasn't provided some foundational infrastructure (interface
> for reading from a virtual address of guest), the arm64 implementation
> is stubbed for now because it's a bit complex, and will be implemented
> later.
I hope you realise that such an "interface" would be, by definition,
fragile and very likely to break in a subtle way. The only existing
case where we walk the guest's page tables is for NV, and even that is
extremely fragile.
Given that, I really wonder why this needs to happen in the kernel.
Userspace has all the required information to interrupt a vcpu and
walk its current context, without any additional kernel support. What
are the bits here that cannot be implemented anywhere else?
>
> Tested with both 32-bit and 64-bit guest operating systems / unikernels,
> that `perf script` could correctly show the certain callchains.
> FlameGraphs can also be generated with this series of patches and [2].
>
> Any feedback will be greatly appreciated.
>
> [1] https://perf.wiki.kernel.org/index.php/Todo
> [2] https://github.com/brendangregg/FlameGraph
>
> v1:
> https://lore.kernel.org/kvm/SYYP282MB108686A73C0F896D90D246569DE5A@SYYP282MB1086.AUSP282.PROD.OUTLOOK.COM/
>
> Changes since v1:
> - v1 only includes partial KVM modifications, while v2 is a complete
> implementation. Also updated based on Sean's feedback.
>
> Tianyi Liu (5):
> KVM: Add arch specific interfaces for sampling guest callchains
> perf kvm: Introduce guest interfaces for sampling callchains
> KVM: implement new perf interfaces
> perf kvm: Support sampling guest callchains
> perf tools: Support PERF_CONTEXT_GUEST_* flags
>
> arch/arm64/kvm/arm.c | 17 +++++++++
Given that there is more to KVM than just arm64 and x86, I suggest
that you move the lack of support for this feature into the main KVM
code.
Thanks,
M.
--
Without deviation from the norm, progress is not possible.
WARNING: multiple messages have this Message-ID (diff)
From: Marc Zyngier <maz@kernel.org>
To: Tianyi Liu <i.pear@outlook.com>
Cc: seanjc@google.com, pbonzini@redhat.com, peterz@infradead.org,
mingo@redhat.com, acme@kernel.org,
linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev,
linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org,
kvm@vger.kernel.org, x86@kernel.org, mark.rutland@arm.com,
alexander.shishkin@linux.intel.com, jolsa@kernel.org,
namhyung@kernel.org, irogers@google.com, adrian.hunter@intel.com
Subject: Re: [PATCH v2 0/5] perf: KVM: Enable callchains for guests
Date: Wed, 11 Oct 2023 17:45:29 +0100 [thread overview]
Message-ID: <8734yhm7km.wl-maz@kernel.org> (raw)
In-Reply-To: <SY4P282MB1084ECBCC1B176153B9E2A009DCFA@SY4P282MB1084.AUSP282.PROD.OUTLOOK.COM>
On Sun, 08 Oct 2023 15:48:17 +0100,
Tianyi Liu <i.pear@outlook.com> wrote:
>
> Hi there,
>
> This series of patches enables callchains for guests (used by perf kvm),
> which holds the top spot on the perf wiki TODO list [1]. This allows users
> to perform guest OS callchain or performance analysis from external
> using PMU events.
>
> The event processing flow is as follows (shown as backtrace):
> #0 kvm_arch_vcpu_get_frame_pointer / kvm_arch_vcpu_read_virt (per arch)
> #1 kvm_guest_get_frame_pointer / kvm_guest_read_virt
> <callback function pointers in `struct perf_guest_info_callbacks`>
> #2 perf_guest_get_frame_pointer / perf_guest_read_virt
> #3 perf_callchain_guest
> #4 get_perf_callchain
> #5 perf_callchain
>
> Between #0 and #1 is the interface between KVM and the arch-specific
> impl, while between #1 and #2 is the interface between Perf and KVM.
> The 1st patch implements #0. The 2nd patch extends interfaces between #1
> and #2, while the 3rd patch implements #1. The 4th patch implements #3
> and modifies #4 #5. The last patch is for userspace utils.
>
> Since arm64 hasn't provided some foundational infrastructure (interface
> for reading from a virtual address of guest), the arm64 implementation
> is stubbed for now because it's a bit complex, and will be implemented
> later.
I hope you realise that such an "interface" would be, by definition,
fragile and very likely to break in a subtle way. The only existing
case where we walk the guest's page tables is for NV, and even that is
extremely fragile.
Given that, I really wonder why this needs to happen in the kernel.
Userspace has all the required information to interrupt a vcpu and
walk its current context, without any additional kernel support. What
are the bits here that cannot be implemented anywhere else?
>
> Tested with both 32-bit and 64-bit guest operating systems / unikernels,
> that `perf script` could correctly show the certain callchains.
> FlameGraphs can also be generated with this series of patches and [2].
>
> Any feedback will be greatly appreciated.
>
> [1] https://perf.wiki.kernel.org/index.php/Todo
> [2] https://github.com/brendangregg/FlameGraph
>
> v1:
> https://lore.kernel.org/kvm/SYYP282MB108686A73C0F896D90D246569DE5A@SYYP282MB1086.AUSP282.PROD.OUTLOOK.COM/
>
> Changes since v1:
> - v1 only includes partial KVM modifications, while v2 is a complete
> implementation. Also updated based on Sean's feedback.
>
> Tianyi Liu (5):
> KVM: Add arch specific interfaces for sampling guest callchains
> perf kvm: Introduce guest interfaces for sampling callchains
> KVM: implement new perf interfaces
> perf kvm: Support sampling guest callchains
> perf tools: Support PERF_CONTEXT_GUEST_* flags
>
> arch/arm64/kvm/arm.c | 17 +++++++++
Given that there is more to KVM than just arm64 and x86, I suggest
that you move the lack of support for this feature into the main KVM
code.
Thanks,
M.
--
Without deviation from the norm, progress is not possible.
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2023-10-11 16:45 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-10-08 14:48 [PATCH v2 0/5] perf: KVM: Enable callchains for guests Tianyi Liu
2023-10-08 14:48 ` Tianyi Liu
2023-10-08 14:52 ` [PATCH v2 1/5] KVM: Add arch specific interfaces for sampling guest callchains Tianyi Liu
2023-10-08 14:52 ` Tianyi Liu
2023-10-08 21:12 ` kernel test robot
2023-10-08 21:12 ` kernel test robot
2023-10-08 21:32 ` kernel test robot
2023-10-08 21:32 ` kernel test robot
2023-10-08 22:25 ` kernel test robot
2023-10-08 22:25 ` kernel test robot
2023-10-09 3:17 ` Tianyi Liu
2023-10-09 3:17 ` Tianyi Liu
2023-10-08 14:53 ` [PATCH v2 2/5] perf kvm: Introduce guest interfaces for sampling callchains Tianyi Liu
2023-10-08 14:53 ` Tianyi Liu
2023-10-08 14:56 ` [PATCH v2 3/5] KVM: implement new perf interfaces Tianyi Liu
2023-10-08 14:56 ` Tianyi Liu
2023-10-08 14:57 ` [PATCH v2 4/5] perf kvm: Support sampling guest callchains Tianyi Liu
2023-10-08 14:57 ` Tianyi Liu
2023-10-08 19:57 ` kernel test robot
2023-10-08 19:57 ` kernel test robot
2023-10-10 16:12 ` Maxim Levitsky
2023-10-10 16:12 ` Maxim Levitsky
2023-10-11 14:44 ` Tianyi Liu
2023-10-11 14:44 ` Tianyi Liu
2023-10-12 20:41 ` kernel test robot
2023-10-12 20:41 ` kernel test robot
2023-10-08 14:57 ` [PATCH v2 5/5] perf tools: Support PERF_CONTEXT_GUEST_* flags Tianyi Liu
2023-10-08 14:57 ` Tianyi Liu
2023-10-11 16:45 ` Marc Zyngier [this message]
2023-10-11 16:45 ` [PATCH v2 0/5] perf: KVM: Enable callchains for guests Marc Zyngier
2023-10-12 6:35 ` Tianyi Liu
2023-10-12 6:35 ` Tianyi Liu
2023-10-13 14:01 ` Mark Rutland
2023-10-13 14:01 ` Mark Rutland
2023-10-20 9:21 ` Tianyi Liu
2023-10-20 9:21 ` Tianyi Liu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=8734yhm7km.wl-maz@kernel.org \
--to=maz@kernel.org \
--cc=acme@kernel.org \
--cc=adrian.hunter@intel.com \
--cc=alexander.shishkin@linux.intel.com \
--cc=i.pear@outlook.com \
--cc=irogers@google.com \
--cc=jolsa@kernel.org \
--cc=kvm@vger.kernel.org \
--cc=kvmarm@lists.linux.dev \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=mingo@redhat.com \
--cc=namhyung@kernel.org \
--cc=pbonzini@redhat.com \
--cc=peterz@infradead.org \
--cc=seanjc@google.com \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.