2022-11-15 09:54:45

by Ravi Bangoria

[permalink] [raw]
Subject: [PATCH] perf/amd/ibs: Make IBS a core pmu

So far, only one pmu was allowed to be registered as core pmu and thus
IBS pmus were being registered as uncore. However, with the event context
rewrite, that limitation no longer exists and thus IBS pmus can also be
registered as core pmu. This makes IBS much more usable, for ex, user
will be able to do per-process precise monitoring on AMD:

Before patch:
$ sudo perf record -e cycles:pp ls
Error:
Invalid event (cycles:pp) in per-thread mode, enable system wide with '-a'

After patch:
$ sudo perf record -e cycles:pp ls
[ perf record: Woken up 1 times to write data ]
[ perf record: Captured and wrote 0.017 MB perf.data (33 samples) ]

Signed-off-by: Ravi Bangoria <[email protected]>
---
Note:
This patch is dependent on the event context rewrite patch which is
already present in a tip tree:
https://git.kernel.org/tip/tip/c/bd27568117664

arch/x86/events/amd/ibs.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/arch/x86/events/amd/ibs.c b/arch/x86/events/amd/ibs.c
index 3271735f0070..fbc2ce86f4b8 100644
--- a/arch/x86/events/amd/ibs.c
+++ b/arch/x86/events/amd/ibs.c
@@ -631,7 +631,7 @@ static const struct attribute_group *op_attr_update[] = {

static struct perf_ibs perf_ibs_fetch = {
.pmu = {
- .task_ctx_nr = perf_invalid_context,
+ .task_ctx_nr = perf_hw_context,

.event_init = perf_ibs_init,
.add = perf_ibs_add,
@@ -655,7 +655,7 @@ static struct perf_ibs perf_ibs_fetch = {

static struct perf_ibs perf_ibs_op = {
.pmu = {
- .task_ctx_nr = perf_invalid_context,
+ .task_ctx_nr = perf_hw_context,

.event_init = perf_ibs_init,
.add = perf_ibs_add,
--
2.37.3



2022-11-15 17:21:50

by Ian Rogers

[permalink] [raw]
Subject: Re: [PATCH] perf/amd/ibs: Make IBS a core pmu

On Tue, Nov 15, 2022 at 1:39 AM Ravi Bangoria <[email protected]> wrote:
>
> So far, only one pmu was allowed to be registered as core pmu and thus
> IBS pmus were being registered as uncore. However, with the event context
> rewrite, that limitation no longer exists and thus IBS pmus can also be
> registered as core pmu. This makes IBS much more usable, for ex, user
> will be able to do per-process precise monitoring on AMD:
>
> Before patch:
> $ sudo perf record -e cycles:pp ls
> Error:
> Invalid event (cycles:pp) in per-thread mode, enable system wide with '-a'
>
> After patch:
> $ sudo perf record -e cycles:pp ls
> [ perf record: Woken up 1 times to write data ]
> [ perf record: Captured and wrote 0.017 MB perf.data (33 samples) ]
>
> Signed-off-by: Ravi Bangoria <[email protected]>

Acked-by: Ian Rogers <[email protected]>

This is awesome!
Ian

> ---
> Note:
> This patch is dependent on the event context rewrite patch which is
> already present in a tip tree:
> https://git.kernel.org/tip/tip/c/bd27568117664
>
> arch/x86/events/amd/ibs.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/arch/x86/events/amd/ibs.c b/arch/x86/events/amd/ibs.c
> index 3271735f0070..fbc2ce86f4b8 100644
> --- a/arch/x86/events/amd/ibs.c
> +++ b/arch/x86/events/amd/ibs.c
> @@ -631,7 +631,7 @@ static const struct attribute_group *op_attr_update[] = {
>
> static struct perf_ibs perf_ibs_fetch = {
> .pmu = {
> - .task_ctx_nr = perf_invalid_context,
> + .task_ctx_nr = perf_hw_context,
>
> .event_init = perf_ibs_init,
> .add = perf_ibs_add,
> @@ -655,7 +655,7 @@ static struct perf_ibs perf_ibs_fetch = {
>
> static struct perf_ibs perf_ibs_op = {
> .pmu = {
> - .task_ctx_nr = perf_invalid_context,
> + .task_ctx_nr = perf_hw_context,
>
> .event_init = perf_ibs_init,
> .add = perf_ibs_add,
> --
> 2.37.3
>

2022-11-16 06:03:01

by Ravi Bangoria

[permalink] [raw]
Subject: Re: [PATCH] perf/amd/ibs: Make IBS a core pmu

On 15-Nov-22 10:37 PM, Ian Rogers wrote:
> On Tue, Nov 15, 2022 at 1:39 AM Ravi Bangoria <[email protected]> wrote:
>>
>> So far, only one pmu was allowed to be registered as core pmu and thus
>> IBS pmus were being registered as uncore. However, with the event context
>> rewrite, that limitation no longer exists and thus IBS pmus can also be
>> registered as core pmu. This makes IBS much more usable, for ex, user
>> will be able to do per-process precise monitoring on AMD:
>>
>> Before patch:
>> $ sudo perf record -e cycles:pp ls
>> Error:
>> Invalid event (cycles:pp) in per-thread mode, enable system wide with '-a'
>>
>> After patch:
>> $ sudo perf record -e cycles:pp ls
>> [ perf record: Woken up 1 times to write data ]
>> [ perf record: Captured and wrote 0.017 MB perf.data (33 samples) ]
>>
>> Signed-off-by: Ravi Bangoria <[email protected]>
>
> Acked-by: Ian Rogers <[email protected]>
>
> This is awesome!
> Ian

Thanks Ian.

Peter, can we push this along with rewrite patch?

Thanks,
Ravi

2022-11-22 10:07:51

by Ravi Bangoria

[permalink] [raw]
Subject: Re: [PATCH] perf/amd/ibs: Make IBS a core pmu

On 16-Nov-22 11:15 AM, Ravi Bangoria wrote:
> On 15-Nov-22 10:37 PM, Ian Rogers wrote:
>> On Tue, Nov 15, 2022 at 1:39 AM Ravi Bangoria <[email protected]> wrote:
>>>
>>> So far, only one pmu was allowed to be registered as core pmu and thus
>>> IBS pmus were being registered as uncore. However, with the event context
>>> rewrite, that limitation no longer exists and thus IBS pmus can also be
>>> registered as core pmu. This makes IBS much more usable, for ex, user
>>> will be able to do per-process precise monitoring on AMD:
>>>
>>> Before patch:
>>> $ sudo perf record -e cycles:pp ls
>>> Error:
>>> Invalid event (cycles:pp) in per-thread mode, enable system wide with '-a'
>>>
>>> After patch:
>>> $ sudo perf record -e cycles:pp ls
>>> [ perf record: Woken up 1 times to write data ]
>>> [ perf record: Captured and wrote 0.017 MB perf.data (33 samples) ]
>>>
>>> Signed-off-by: Ravi Bangoria <[email protected]>
>>
>> Acked-by: Ian Rogers <[email protected]>
>>
>> This is awesome!
>> Ian
>
> Thanks Ian.
>
> Peter, can we push this along with rewrite patch?

Gentle Ping, Peter!

Thanks,
Ravi

Subject: [tip: perf/core] perf/amd/ibs: Make IBS a core pmu

The following commit has been merged into the perf/core branch of tip:

Commit-ID: 30093056f7b2f759ff180d3a86d29f68315e469b
Gitweb: https://git.kernel.org/tip/30093056f7b2f759ff180d3a86d29f68315e469b
Author: Ravi Bangoria <[email protected]>
AuthorDate: Tue, 15 Nov 2022 15:09:04 +05:30
Committer: Peter Zijlstra <[email protected]>
CommitterDate: Thu, 24 Nov 2022 11:09:19 +01:00

perf/amd/ibs: Make IBS a core pmu

So far, only one pmu was allowed to be registered as core pmu and thus
IBS pmus were being registered as uncore. However, with the event context
rewrite, that limitation no longer exists and thus IBS pmus can also be
registered as core pmu. This makes IBS much more usable, for ex, user
will be able to do per-process precise monitoring on AMD:

Before patch:
$ sudo perf record -e cycles:pp ls
Error:
Invalid event (cycles:pp) in per-thread mode, enable system wide with '-a'

After patch:
$ sudo perf record -e cycles:pp ls
[ perf record: Woken up 1 times to write data ]
[ perf record: Captured and wrote 0.017 MB perf.data (33 samples) ]

Signed-off-by: Ravi Bangoria <[email protected]>
Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
Acked-by: Ian Rogers <[email protected]>
Link: https://lkml.kernel.org/r/[email protected]
---
arch/x86/events/amd/ibs.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/arch/x86/events/amd/ibs.c b/arch/x86/events/amd/ibs.c
index 3271735..fbc2ce8 100644
--- a/arch/x86/events/amd/ibs.c
+++ b/arch/x86/events/amd/ibs.c
@@ -631,7 +631,7 @@ static const struct attribute_group *op_attr_update[] = {

static struct perf_ibs perf_ibs_fetch = {
.pmu = {
- .task_ctx_nr = perf_invalid_context,
+ .task_ctx_nr = perf_hw_context,

.event_init = perf_ibs_init,
.add = perf_ibs_add,
@@ -655,7 +655,7 @@ static struct perf_ibs perf_ibs_fetch = {

static struct perf_ibs perf_ibs_op = {
.pmu = {
- .task_ctx_nr = perf_invalid_context,
+ .task_ctx_nr = perf_hw_context,

.event_init = perf_ibs_init,
.add = perf_ibs_add,

2022-12-08 15:59:22

by Borislav Petkov

[permalink] [raw]
Subject: Re: [tip: perf/core] perf/amd/ibs: Make IBS a core pmu

I believe this is one of the things Linus wanted to have on AMD hw.

On Thu, Nov 24, 2022 at 12:03:03PM -0000, tip-bot2 for Ravi Bangoria wrote:
> The following commit has been merged into the perf/core branch of tip:
>
> Commit-ID: 30093056f7b2f759ff180d3a86d29f68315e469b
> Gitweb: https://git.kernel.org/tip/30093056f7b2f759ff180d3a86d29f68315e469b
> Author: Ravi Bangoria <[email protected]>
> AuthorDate: Tue, 15 Nov 2022 15:09:04 +05:30
> Committer: Peter Zijlstra <[email protected]>
> CommitterDate: Thu, 24 Nov 2022 11:09:19 +01:00
>
> perf/amd/ibs: Make IBS a core pmu
>
> So far, only one pmu was allowed to be registered as core pmu and thus
> IBS pmus were being registered as uncore. However, with the event context
> rewrite, that limitation no longer exists and thus IBS pmus can also be
> registered as core pmu. This makes IBS much more usable, for ex, user
> will be able to do per-process precise monitoring on AMD:
>
> Before patch:
> $ sudo perf record -e cycles:pp ls
> Error:
> Invalid event (cycles:pp) in per-thread mode, enable system wide with '-a'
>
> After patch:
> $ sudo perf record -e cycles:pp ls
> [ perf record: Woken up 1 times to write data ]
> [ perf record: Captured and wrote 0.017 MB perf.data (33 samples) ]
>
> Signed-off-by: Ravi Bangoria <[email protected]>
> Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
> Acked-by: Ian Rogers <[email protected]>
> Link: https://lkml.kernel.org/r/[email protected]
> ---
> arch/x86/events/amd/ibs.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/arch/x86/events/amd/ibs.c b/arch/x86/events/amd/ibs.c
> index 3271735..fbc2ce8 100644
> --- a/arch/x86/events/amd/ibs.c
> +++ b/arch/x86/events/amd/ibs.c
> @@ -631,7 +631,7 @@ static const struct attribute_group *op_attr_update[] = {
>
> static struct perf_ibs perf_ibs_fetch = {
> .pmu = {
> - .task_ctx_nr = perf_invalid_context,
> + .task_ctx_nr = perf_hw_context,
>
> .event_init = perf_ibs_init,
> .add = perf_ibs_add,
> @@ -655,7 +655,7 @@ static struct perf_ibs perf_ibs_fetch = {
>
> static struct perf_ibs perf_ibs_op = {
> .pmu = {
> - .task_ctx_nr = perf_invalid_context,
> + .task_ctx_nr = perf_hw_context,
>
> .event_init = perf_ibs_init,
> .add = perf_ibs_add,

--
Regards/Gruss,
Boris.

https://people.kernel.org/tglx/notes-about-netiquette

2022-12-09 04:34:45

by Ravi Bangoria

[permalink] [raw]
Subject: Re: [tip: perf/core] perf/amd/ibs: Make IBS a core pmu

On 08-Dec-22 8:49 PM, Borislav Petkov wrote:
> I believe this is one of the things Linus wanted to have on AMD hw.

Yes, https://lore.kernel.org/r/CAHk-=wgRm26_oT-JR+TRzDsfhD1TRxfWDM=j6kJerv+m=NU-yQ@mail.gmail.com

This patch solves per-thread profiling issue. However, -e cycles:p is
still root only because IBS hw does not support user/kernel filtering.

Thanks,
Ravi