* [PATCH V4 1/3] tools/perf: Fix the string match for "/tmp/perf-$PID.map" files in dso__load
@ 2024-06-23 6:48 Athira Rajeev
2024-06-23 6:48 ` [PATCH V4 2/3] tools/perf: Use is_perf_pid_map_name helper function to check dso's of pattern /tmp/perf-%d.map Athira Rajeev
` (3 more replies)
0 siblings, 4 replies; 10+ messages in thread
From: Athira Rajeev @ 2024-06-23 6:48 UTC (permalink / raw)
To: acme, jolsa, adrian.hunter, irogers, namhyung
Cc: linux-kernel, linux-perf-users, linuxppc-dev, akanksha, maddy,
atrajeev, kjain, disgoel
Perf test for perf probe of function from different CU fails
as below:
./perf test -vv "test perf probe of function from different CU"
116: test perf probe of function from different CU:
--- start ---
test child forked, pid 2679
Failed to find symbol foo in /tmp/perf-uprobe-different-cu-sh.Msa7iy89bx/testfile
Error: Failed to add events.
--- Cleaning up ---
"foo" does not hit any event.
Error: Failed to delete events.
---- end(-1) ----
116: test perf probe of function from different CU : FAILED!
The test does below to probe function "foo" :
# gcc -g -Og -flto -c /tmp/perf-uprobe-different-cu-sh.XniNxNEVT7/testfile-foo.c
-o /tmp/perf-uprobe-different-cu-sh.XniNxNEVT7/testfile-foo.o
# gcc -g -Og -c /tmp/perf-uprobe-different-cu-sh.XniNxNEVT7/testfile-main.c
-o /tmp/perf-uprobe-different-cu-sh.XniNxNEVT7/testfile-main.o
# gcc -g -Og -o /tmp/perf-uprobe-different-cu-sh.XniNxNEVT7/testfile
/tmp/perf-uprobe-different-cu-sh.XniNxNEVT7/testfile-foo.o
/tmp/perf-uprobe-different-cu-sh.XniNxNEVT7/testfile-main.o
# ./perf probe -x /tmp/perf-uprobe-different-cu-sh.XniNxNEVT7/testfile foo
Failed to find symbol foo in /tmp/perf-uprobe-different-cu-sh.XniNxNEVT7/testfile
Error: Failed to add events.
Perf probe fails to find symbol foo in the executable placed in
/tmp/perf-uprobe-different-cu-sh.XniNxNEVT7
Simple reproduce:
# mktemp -d /tmp/perf-checkXXXXXXXXXX
/tmp/perf-checkcWpuLRQI8j
# gcc -g -o test test.c
# cp test /tmp/perf-checkcWpuLRQI8j/
# nm /tmp/perf-checkcWpuLRQI8j/test | grep foo
00000000100006bc T foo
# ./perf probe -x /tmp/perf-checkcWpuLRQI8j/test foo
Failed to find symbol foo in /tmp/perf-checkcWpuLRQI8j/test
Error: Failed to add events.
But it works with any files like /tmp/perf/test. Only for
patterns with "/tmp/perf-", this fails.
Further debugging, commit 80d496be89ed ("perf report: Add support
for profiling JIT generated code") added support for profiling JIT
generated code. This patch handles dso's of form
"/tmp/perf-$PID.map" .
The check used "if (strncmp(self->name, "/tmp/perf-", 10) == 0)"
to match "/tmp/perf-$PID.map". With this commit, any dso in
/tmp/perf- folder will be considered separately for processing
(not only JIT created map files ). Fix this by changing the
string pattern to check for "/tmp/perf-%d.map". Add a helper
function is_perf_pid_map_name to do this check. In "struct dso",
dso->long_name holds the long name of the dso file. Since the
/tmp/perf-$PID.map check uses the complete name, use dso___long_name for
the string name.
With the fix,
# ./perf test "test perf probe of function from different CU"
117: test perf probe of function from different CU : Ok
Signed-off-by: Athira Rajeev<atrajeev@linux.vnet.ibm.com>
---
Changelog:
v3 -> v4:
Added commit message with usage of dso__long_name
v2 -> v3:
Addressed review comment from Adrian and James.
Added perf_pid_map_tid to save the tid and modified
is_perf_pid_map_name to use this internally.
v1 -> v2:
Addressed review comments from Adrian.
Added helper function is_perf_pid_map_name to check
dso name of form "/tmp/perf-%d.map". Used sscanf
instead of regex comparison.
tools/perf/util/dso.c | 12 ++++++++++++
tools/perf/util/dso.h | 4 ++++
tools/perf/util/symbol.c | 3 ++-
3 files changed, 18 insertions(+), 1 deletion(-)
diff --git a/tools/perf/util/dso.c b/tools/perf/util/dso.c
index dde706b71da7..2340c4f6d0c2 100644
--- a/tools/perf/util/dso.c
+++ b/tools/perf/util/dso.c
@@ -1652,3 +1652,15 @@ int dso__strerror_load(struct dso *dso, char *buf, size_t buflen)
scnprintf(buf, buflen, "%s", dso_load__error_str[idx]);
return 0;
}
+
+bool perf_pid_map_tid(const char *dso_name, int *tid)
+{
+ return sscanf(dso_name, "/tmp/perf-%d.map", tid) == 1;
+}
+
+bool is_perf_pid_map_name(const char *dso_name)
+{
+ int tid;
+
+ return perf_pid_map_tid(dso_name, &tid);
+}
diff --git a/tools/perf/util/dso.h b/tools/perf/util/dso.h
index df2c98402af3..d72f3b8c37f6 100644
--- a/tools/perf/util/dso.h
+++ b/tools/perf/util/dso.h
@@ -809,4 +809,8 @@ void reset_fd_limit(void);
u64 dso__find_global_type(struct dso *dso, u64 addr);
u64 dso__findnew_global_type(struct dso *dso, u64 addr, u64 offset);
+/* Check if dso name is of format "/tmp/perf-%d.map" */
+bool perf_pid_map_tid(const char *dso_name, int *tid);
+bool is_perf_pid_map_name(const char *dso_name);
+
#endif /* __PERF_DSO */
diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c
index 9e5940b5bc59..aee0a4cfb383 100644
--- a/tools/perf/util/symbol.c
+++ b/tools/perf/util/symbol.c
@@ -1799,7 +1799,8 @@ int dso__load(struct dso *dso, struct map *map)
const char *map_path = dso__long_name(dso);
mutex_lock(dso__lock(dso));
- perfmap = strncmp(dso__name(dso), "/tmp/perf-", 10) == 0;
+ perfmap = is_perf_pid_map_name(map_path);
+
if (perfmap) {
if (dso__nsinfo(dso) &&
(dso__find_perf_map(newmapname, sizeof(newmapname),
--
2.35.3
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH V4 2/3] tools/perf: Use is_perf_pid_map_name helper function to check dso's of pattern /tmp/perf-%d.map
2024-06-23 6:48 [PATCH V4 1/3] tools/perf: Fix the string match for "/tmp/perf-$PID.map" files in dso__load Athira Rajeev
@ 2024-06-23 6:48 ` Athira Rajeev
2024-06-25 12:03 ` Adrian Hunter
2024-06-23 6:48 ` [PATCH V4 3/3] tools/perf: Fix parallel-perf python script to replace new python syntax ":=" usage Athira Rajeev
` (2 subsequent siblings)
3 siblings, 1 reply; 10+ messages in thread
From: Athira Rajeev @ 2024-06-23 6:48 UTC (permalink / raw)
To: acme, jolsa, adrian.hunter, irogers, namhyung
Cc: linux-kernel, linux-perf-users, linuxppc-dev, akanksha, maddy,
atrajeev, kjain, disgoel
commit 80d496be89ed ("perf report: Add support for profiling JIT
generated code") added support for profiling JIT generated code.
This patch handles dso's of form "/tmp/perf-$PID.map".
Some of the references doesn't check exactly for same pattern.
some uses "if (!strncmp(dso_name, "/tmp/perf-", 10))". Fix
this by using helper function perf_pid_map_tid and
is_perf_pid_map_name which looks for proper pattern of
form: "/tmp/perf-$PID.map" for these checks.
Signed-off-by: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
---
tools/perf/util/dsos.c | 2 +-
tools/perf/util/srcline.c | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/tools/perf/util/dsos.c b/tools/perf/util/dsos.c
index ab3d0c01dd63..846828ea1f00 100644
--- a/tools/perf/util/dsos.c
+++ b/tools/perf/util/dsos.c
@@ -275,7 +275,7 @@ static void dso__set_basename(struct dso *dso)
char *base, *lname;
int tid;
- if (sscanf(dso__long_name(dso), "/tmp/perf-%d.map", &tid) == 1) {
+ if (perf_pid_map_tid(dso__long_name(dso), &tid)) {
if (asprintf(&base, "[JIT] tid %d", tid) < 0)
return;
} else {
diff --git a/tools/perf/util/srcline.c b/tools/perf/util/srcline.c
index 9d670d8c1c08..51eb78993fe2 100644
--- a/tools/perf/util/srcline.c
+++ b/tools/perf/util/srcline.c
@@ -39,7 +39,7 @@ static const char *srcline_dso_name(struct dso *dso)
if (dso_name[0] == '[')
return NULL;
- if (!strncmp(dso_name, "/tmp/perf-", 10))
+ if (is_perf_pid_map_name(dso_name))
return NULL;
return dso_name;
--
2.35.3
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH V4 3/3] tools/perf: Fix parallel-perf python script to replace new python syntax ":=" usage
2024-06-23 6:48 [PATCH V4 1/3] tools/perf: Fix the string match for "/tmp/perf-$PID.map" files in dso__load Athira Rajeev
2024-06-23 6:48 ` [PATCH V4 2/3] tools/perf: Use is_perf_pid_map_name helper function to check dso's of pattern /tmp/perf-%d.map Athira Rajeev
@ 2024-06-23 6:48 ` Athira Rajeev
2024-06-25 11:57 ` [PATCH V4 1/3] tools/perf: Fix the string match for "/tmp/perf-$PID.map" files in dso__load Adrian Hunter
2024-06-26 3:55 ` Namhyung Kim
3 siblings, 0 replies; 10+ messages in thread
From: Athira Rajeev @ 2024-06-23 6:48 UTC (permalink / raw)
To: acme, jolsa, adrian.hunter, irogers, namhyung
Cc: linux-kernel, linux-perf-users, linuxppc-dev, akanksha, maddy,
atrajeev, kjain, disgoel
perf test "perf script tests" fails as below in systems
with python 3.6
File "/home/athira/linux/tools/perf/tests/shell/../../scripts/python/parallel-perf.py", line 442
if line := p.stdout.readline():
^
SyntaxError: invalid syntax
--- Cleaning up ---
---- end(-1) ----
92: perf script tests: FAILED!
This happens because ":=" is a new syntax that assigns values
to variables as part of a larger expression. This is introduced
from python 3.8 and hence fails in setup with python 3.6
Address this by splitting the large expression and check the
value in two steps:
Previous line: if line := p.stdout.readline():
Current change:
line = p.stdout.readline()
if line:
With patch
./perf test "perf script tests"
93: perf script tests: Ok
Signed-off-by: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
Acked-by: Adrian Hunter <adrian.hunter@intel.com>
---
Changelog:
v1 -> v2
Added "Acked-by" from Adrian
tools/perf/scripts/python/parallel-perf.py | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/tools/perf/scripts/python/parallel-perf.py b/tools/perf/scripts/python/parallel-perf.py
index 21f32ec5ed46..be85fd7f6632 100755
--- a/tools/perf/scripts/python/parallel-perf.py
+++ b/tools/perf/scripts/python/parallel-perf.py
@@ -439,7 +439,8 @@ def ProcessCommandOutputLines(cmd, per_cpu, fn, *x):
pat = re.compile(r"\s*\[[0-9]+\]")
p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
while True:
- if line := p.stdout.readline():
+ line = p.stdout.readline()
+ if line:
line = line.decode("utf-8")
if pat.match(line):
line = line.split()
--
2.35.3
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH V4 1/3] tools/perf: Fix the string match for "/tmp/perf-$PID.map" files in dso__load
2024-06-23 6:48 [PATCH V4 1/3] tools/perf: Fix the string match for "/tmp/perf-$PID.map" files in dso__load Athira Rajeev
2024-06-23 6:48 ` [PATCH V4 2/3] tools/perf: Use is_perf_pid_map_name helper function to check dso's of pattern /tmp/perf-%d.map Athira Rajeev
2024-06-23 6:48 ` [PATCH V4 3/3] tools/perf: Fix parallel-perf python script to replace new python syntax ":=" usage Athira Rajeev
@ 2024-06-25 11:57 ` Adrian Hunter
2024-06-25 12:02 ` Adrian Hunter
2024-06-26 3:55 ` Namhyung Kim
3 siblings, 1 reply; 10+ messages in thread
From: Adrian Hunter @ 2024-06-25 11:57 UTC (permalink / raw)
To: Athira Rajeev, acme, jolsa, irogers, namhyung
Cc: linux-kernel, linux-perf-users, linuxppc-dev, akanksha, maddy,
kjain, disgoel
On 23/06/24 09:48, Athira Rajeev wrote:
> Perf test for perf probe of function from different CU fails
> as below:
>
> ./perf test -vv "test perf probe of function from different CU"
> 116: test perf probe of function from different CU:
> --- start ---
> test child forked, pid 2679
> Failed to find symbol foo in /tmp/perf-uprobe-different-cu-sh.Msa7iy89bx/testfile
> Error: Failed to add events.
> --- Cleaning up ---
> "foo" does not hit any event.
> Error: Failed to delete events.
> ---- end(-1) ----
> 116: test perf probe of function from different CU : FAILED!
>
> The test does below to probe function "foo" :
>
> # gcc -g -Og -flto -c /tmp/perf-uprobe-different-cu-sh.XniNxNEVT7/testfile-foo.c
> -o /tmp/perf-uprobe-different-cu-sh.XniNxNEVT7/testfile-foo.o
> # gcc -g -Og -c /tmp/perf-uprobe-different-cu-sh.XniNxNEVT7/testfile-main.c
> -o /tmp/perf-uprobe-different-cu-sh.XniNxNEVT7/testfile-main.o
> # gcc -g -Og -o /tmp/perf-uprobe-different-cu-sh.XniNxNEVT7/testfile
> /tmp/perf-uprobe-different-cu-sh.XniNxNEVT7/testfile-foo.o
> /tmp/perf-uprobe-different-cu-sh.XniNxNEVT7/testfile-main.o
>
> # ./perf probe -x /tmp/perf-uprobe-different-cu-sh.XniNxNEVT7/testfile foo
> Failed to find symbol foo in /tmp/perf-uprobe-different-cu-sh.XniNxNEVT7/testfile
> Error: Failed to add events.
>
> Perf probe fails to find symbol foo in the executable placed in
> /tmp/perf-uprobe-different-cu-sh.XniNxNEVT7
>
> Simple reproduce:
>
> # mktemp -d /tmp/perf-checkXXXXXXXXXX
> /tmp/perf-checkcWpuLRQI8j
>
> # gcc -g -o test test.c
> # cp test /tmp/perf-checkcWpuLRQI8j/
> # nm /tmp/perf-checkcWpuLRQI8j/test | grep foo
> 00000000100006bc T foo
>
> # ./perf probe -x /tmp/perf-checkcWpuLRQI8j/test foo
> Failed to find symbol foo in /tmp/perf-checkcWpuLRQI8j/test
> Error: Failed to add events.
>
> But it works with any files like /tmp/perf/test. Only for
> patterns with "/tmp/perf-", this fails.
>
> Further debugging, commit 80d496be89ed ("perf report: Add support
> for profiling JIT generated code") added support for profiling JIT
> generated code. This patch handles dso's of form
> "/tmp/perf-$PID.map" .
>
> The check used "if (strncmp(self->name, "/tmp/perf-", 10) == 0)"
> to match "/tmp/perf-$PID.map". With this commit, any dso in
> /tmp/perf- folder will be considered separately for processing
> (not only JIT created map files ). Fix this by changing the
> string pattern to check for "/tmp/perf-%d.map". Add a helper
> function is_perf_pid_map_name to do this check. In "struct dso",
> dso->long_name holds the long name of the dso file. Since the
> /tmp/perf-$PID.map check uses the complete name, use dso___long_name for
> the string name.
>
> With the fix,
> # ./perf test "test perf probe of function from different CU"
> 117: test perf probe of function from different CU : Ok
>
> Signed-off-by: Athira Rajeev<atrajeev@linux.vnet.ibm.com>
Reviewed-by: Adrian Hunter <adrian.hunter@intel.com>
> ---
> Changelog:
> v3 -> v4:
> Added commit message with usage of dso__long_name
>
> v2 -> v3:
> Addressed review comment from Adrian and James.
> Added perf_pid_map_tid to save the tid and modified
> is_perf_pid_map_name to use this internally.
>
> v1 -> v2:
> Addressed review comments from Adrian.
> Added helper function is_perf_pid_map_name to check
> dso name of form "/tmp/perf-%d.map". Used sscanf
> instead of regex comparison.
>
> tools/perf/util/dso.c | 12 ++++++++++++
> tools/perf/util/dso.h | 4 ++++
> tools/perf/util/symbol.c | 3 ++-
> 3 files changed, 18 insertions(+), 1 deletion(-)
>
> diff --git a/tools/perf/util/dso.c b/tools/perf/util/dso.c
> index dde706b71da7..2340c4f6d0c2 100644
> --- a/tools/perf/util/dso.c
> +++ b/tools/perf/util/dso.c
> @@ -1652,3 +1652,15 @@ int dso__strerror_load(struct dso *dso, char *buf, size_t buflen)
> scnprintf(buf, buflen, "%s", dso_load__error_str[idx]);
> return 0;
> }
> +
> +bool perf_pid_map_tid(const char *dso_name, int *tid)
> +{
> + return sscanf(dso_name, "/tmp/perf-%d.map", tid) == 1;
> +}
> +
> +bool is_perf_pid_map_name(const char *dso_name)
> +{
> + int tid;
> +
> + return perf_pid_map_tid(dso_name, &tid);
> +}
> diff --git a/tools/perf/util/dso.h b/tools/perf/util/dso.h
> index df2c98402af3..d72f3b8c37f6 100644
> --- a/tools/perf/util/dso.h
> +++ b/tools/perf/util/dso.h
> @@ -809,4 +809,8 @@ void reset_fd_limit(void);
> u64 dso__find_global_type(struct dso *dso, u64 addr);
> u64 dso__findnew_global_type(struct dso *dso, u64 addr, u64 offset);
>
> +/* Check if dso name is of format "/tmp/perf-%d.map" */
> +bool perf_pid_map_tid(const char *dso_name, int *tid);
> +bool is_perf_pid_map_name(const char *dso_name);
> +
> #endif /* __PERF_DSO */
> diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c
> index 9e5940b5bc59..aee0a4cfb383 100644
> --- a/tools/perf/util/symbol.c
> +++ b/tools/perf/util/symbol.c
> @@ -1799,7 +1799,8 @@ int dso__load(struct dso *dso, struct map *map)
> const char *map_path = dso__long_name(dso);
>
> mutex_lock(dso__lock(dso));
> - perfmap = strncmp(dso__name(dso), "/tmp/perf-", 10) == 0;
> + perfmap = is_perf_pid_map_name(map_path);
> +
> if (perfmap) {
> if (dso__nsinfo(dso) &&
> (dso__find_perf_map(newmapname, sizeof(newmapname),
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH V4 1/3] tools/perf: Fix the string match for "/tmp/perf-$PID.map" files in dso__load
2024-06-25 11:57 ` [PATCH V4 1/3] tools/perf: Fix the string match for "/tmp/perf-$PID.map" files in dso__load Adrian Hunter
@ 2024-06-25 12:02 ` Adrian Hunter
2024-06-25 17:59 ` Namhyung Kim
0 siblings, 1 reply; 10+ messages in thread
From: Adrian Hunter @ 2024-06-25 12:02 UTC (permalink / raw)
To: Athira Rajeev, acme, jolsa, irogers, namhyung
Cc: linux-kernel, linux-perf-users, linuxppc-dev, akanksha, maddy,
kjain, disgoel
On 25/06/24 14:57, Adrian Hunter wrote:
> On 23/06/24 09:48, Athira Rajeev wrote:
>> Perf test for perf probe of function from different CU fails
>> as below:
>>
>> ./perf test -vv "test perf probe of function from different CU"
>> 116: test perf probe of function from different CU:
>> --- start ---
>> test child forked, pid 2679
>> Failed to find symbol foo in /tmp/perf-uprobe-different-cu-sh.Msa7iy89bx/testfile
>> Error: Failed to add events.
>> --- Cleaning up ---
>> "foo" does not hit any event.
>> Error: Failed to delete events.
>> ---- end(-1) ----
>> 116: test perf probe of function from different CU : FAILED!
>>
>> The test does below to probe function "foo" :
>>
>> # gcc -g -Og -flto -c /tmp/perf-uprobe-different-cu-sh.XniNxNEVT7/testfile-foo.c
>> -o /tmp/perf-uprobe-different-cu-sh.XniNxNEVT7/testfile-foo.o
>> # gcc -g -Og -c /tmp/perf-uprobe-different-cu-sh.XniNxNEVT7/testfile-main.c
>> -o /tmp/perf-uprobe-different-cu-sh.XniNxNEVT7/testfile-main.o
>> # gcc -g -Og -o /tmp/perf-uprobe-different-cu-sh.XniNxNEVT7/testfile
>> /tmp/perf-uprobe-different-cu-sh.XniNxNEVT7/testfile-foo.o
>> /tmp/perf-uprobe-different-cu-sh.XniNxNEVT7/testfile-main.o
>>
>> # ./perf probe -x /tmp/perf-uprobe-different-cu-sh.XniNxNEVT7/testfile foo
>> Failed to find symbol foo in /tmp/perf-uprobe-different-cu-sh.XniNxNEVT7/testfile
>> Error: Failed to add events.
>>
>> Perf probe fails to find symbol foo in the executable placed in
>> /tmp/perf-uprobe-different-cu-sh.XniNxNEVT7
>>
>> Simple reproduce:
>>
>> # mktemp -d /tmp/perf-checkXXXXXXXXXX
>> /tmp/perf-checkcWpuLRQI8j
>>
>> # gcc -g -o test test.c
>> # cp test /tmp/perf-checkcWpuLRQI8j/
>> # nm /tmp/perf-checkcWpuLRQI8j/test | grep foo
>> 00000000100006bc T foo
>>
>> # ./perf probe -x /tmp/perf-checkcWpuLRQI8j/test foo
>> Failed to find symbol foo in /tmp/perf-checkcWpuLRQI8j/test
>> Error: Failed to add events.
>>
>> But it works with any files like /tmp/perf/test. Only for
>> patterns with "/tmp/perf-", this fails.
>>
>> Further debugging, commit 80d496be89ed ("perf report: Add support
>> for profiling JIT generated code") added support for profiling JIT
>> generated code. This patch handles dso's of form
>> "/tmp/perf-$PID.map" .
>>
>> The check used "if (strncmp(self->name, "/tmp/perf-", 10) == 0)"
>> to match "/tmp/perf-$PID.map". With this commit, any dso in
>> /tmp/perf- folder will be considered separately for processing
>> (not only JIT created map files ). Fix this by changing the
>> string pattern to check for "/tmp/perf-%d.map". Add a helper
>> function is_perf_pid_map_name to do this check. In "struct dso",
>> dso->long_name holds the long name of the dso file. Since the
>> /tmp/perf-$PID.map check uses the complete name, use dso___long_name for
>> the string name.
>>
>> With the fix,
>> # ./perf test "test perf probe of function from different CU"
>> 117: test perf probe of function from different CU : Ok
>>
>> Signed-off-by: Athira Rajeev<atrajeev@linux.vnet.ibm.com>
>
> Reviewed-by: Adrian Hunter <adrian.hunter@intel.com>
>
Although it could use a Fixes tag
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH V4 2/3] tools/perf: Use is_perf_pid_map_name helper function to check dso's of pattern /tmp/perf-%d.map
2024-06-23 6:48 ` [PATCH V4 2/3] tools/perf: Use is_perf_pid_map_name helper function to check dso's of pattern /tmp/perf-%d.map Athira Rajeev
@ 2024-06-25 12:03 ` Adrian Hunter
2024-06-25 18:06 ` Namhyung Kim
0 siblings, 1 reply; 10+ messages in thread
From: Adrian Hunter @ 2024-06-25 12:03 UTC (permalink / raw)
To: Athira Rajeev, acme, jolsa, irogers, namhyung
Cc: linux-kernel, linux-perf-users, linuxppc-dev, akanksha, maddy,
kjain, disgoel
On 23/06/24 09:48, Athira Rajeev wrote:
> commit 80d496be89ed ("perf report: Add support for profiling JIT
> generated code") added support for profiling JIT generated code.
> This patch handles dso's of form "/tmp/perf-$PID.map".
>
> Some of the references doesn't check exactly for same pattern.
> some uses "if (!strncmp(dso_name, "/tmp/perf-", 10))". Fix
> this by using helper function perf_pid_map_tid and
> is_perf_pid_map_name which looks for proper pattern of
> form: "/tmp/perf-$PID.map" for these checks.
>
> Signed-off-by: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
Add a Fixes tag, then
Reviewed-by: Adrian Hunter <adrian.hunter@intel.com>
> ---
> tools/perf/util/dsos.c | 2 +-
> tools/perf/util/srcline.c | 2 +-
> 2 files changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/tools/perf/util/dsos.c b/tools/perf/util/dsos.c
> index ab3d0c01dd63..846828ea1f00 100644
> --- a/tools/perf/util/dsos.c
> +++ b/tools/perf/util/dsos.c
> @@ -275,7 +275,7 @@ static void dso__set_basename(struct dso *dso)
> char *base, *lname;
> int tid;
>
> - if (sscanf(dso__long_name(dso), "/tmp/perf-%d.map", &tid) == 1) {
> + if (perf_pid_map_tid(dso__long_name(dso), &tid)) {
> if (asprintf(&base, "[JIT] tid %d", tid) < 0)
> return;
> } else {
> diff --git a/tools/perf/util/srcline.c b/tools/perf/util/srcline.c
> index 9d670d8c1c08..51eb78993fe2 100644
> --- a/tools/perf/util/srcline.c
> +++ b/tools/perf/util/srcline.c
> @@ -39,7 +39,7 @@ static const char *srcline_dso_name(struct dso *dso)
> if (dso_name[0] == '[')
> return NULL;
>
> - if (!strncmp(dso_name, "/tmp/perf-", 10))
> + if (is_perf_pid_map_name(dso_name))
> return NULL;
>
> return dso_name;
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH V4 1/3] tools/perf: Fix the string match for "/tmp/perf-$PID.map" files in dso__load
2024-06-25 12:02 ` Adrian Hunter
@ 2024-06-25 17:59 ` Namhyung Kim
2024-06-26 5:04 ` Athira Rajeev
0 siblings, 1 reply; 10+ messages in thread
From: Namhyung Kim @ 2024-06-25 17:59 UTC (permalink / raw)
To: Adrian Hunter
Cc: Athira Rajeev, acme, jolsa, irogers, linux-kernel,
linux-perf-users, linuxppc-dev, akanksha, maddy, kjain, disgoel
Hello,
On Tue, Jun 25, 2024 at 5:02 AM Adrian Hunter <adrian.hunter@intel.com> wrote:
>
> On 25/06/24 14:57, Adrian Hunter wrote:
> > On 23/06/24 09:48, Athira Rajeev wrote:
> >> Perf test for perf probe of function from different CU fails
> >> as below:
> >>
> >> ./perf test -vv "test perf probe of function from different CU"
> >> 116: test perf probe of function from different CU:
> >> --- start ---
> >> test child forked, pid 2679
> >> Failed to find symbol foo in /tmp/perf-uprobe-different-cu-sh.Msa7iy89bx/testfile
> >> Error: Failed to add events.
> >> --- Cleaning up ---
> >> "foo" does not hit any event.
> >> Error: Failed to delete events.
> >> ---- end(-1) ----
> >> 116: test perf probe of function from different CU : FAILED!
> >>
> >> The test does below to probe function "foo" :
> >>
> >> # gcc -g -Og -flto -c /tmp/perf-uprobe-different-cu-sh.XniNxNEVT7/testfile-foo.c
> >> -o /tmp/perf-uprobe-different-cu-sh.XniNxNEVT7/testfile-foo.o
> >> # gcc -g -Og -c /tmp/perf-uprobe-different-cu-sh.XniNxNEVT7/testfile-main.c
> >> -o /tmp/perf-uprobe-different-cu-sh.XniNxNEVT7/testfile-main.o
> >> # gcc -g -Og -o /tmp/perf-uprobe-different-cu-sh.XniNxNEVT7/testfile
> >> /tmp/perf-uprobe-different-cu-sh.XniNxNEVT7/testfile-foo.o
> >> /tmp/perf-uprobe-different-cu-sh.XniNxNEVT7/testfile-main.o
> >>
> >> # ./perf probe -x /tmp/perf-uprobe-different-cu-sh.XniNxNEVT7/testfile foo
> >> Failed to find symbol foo in /tmp/perf-uprobe-different-cu-sh.XniNxNEVT7/testfile
> >> Error: Failed to add events.
> >>
> >> Perf probe fails to find symbol foo in the executable placed in
> >> /tmp/perf-uprobe-different-cu-sh.XniNxNEVT7
> >>
> >> Simple reproduce:
> >>
> >> # mktemp -d /tmp/perf-checkXXXXXXXXXX
> >> /tmp/perf-checkcWpuLRQI8j
> >>
> >> # gcc -g -o test test.c
> >> # cp test /tmp/perf-checkcWpuLRQI8j/
> >> # nm /tmp/perf-checkcWpuLRQI8j/test | grep foo
> >> 00000000100006bc T foo
> >>
> >> # ./perf probe -x /tmp/perf-checkcWpuLRQI8j/test foo
> >> Failed to find symbol foo in /tmp/perf-checkcWpuLRQI8j/test
> >> Error: Failed to add events.
> >>
> >> But it works with any files like /tmp/perf/test. Only for
> >> patterns with "/tmp/perf-", this fails.
> >>
> >> Further debugging, commit 80d496be89ed ("perf report: Add support
> >> for profiling JIT generated code") added support for profiling JIT
> >> generated code. This patch handles dso's of form
> >> "/tmp/perf-$PID.map" .
> >>
> >> The check used "if (strncmp(self->name, "/tmp/perf-", 10) == 0)"
> >> to match "/tmp/perf-$PID.map". With this commit, any dso in
> >> /tmp/perf- folder will be considered separately for processing
> >> (not only JIT created map files ). Fix this by changing the
> >> string pattern to check for "/tmp/perf-%d.map". Add a helper
> >> function is_perf_pid_map_name to do this check. In "struct dso",
> >> dso->long_name holds the long name of the dso file. Since the
> >> /tmp/perf-$PID.map check uses the complete name, use dso___long_name for
> >> the string name.
> >>
> >> With the fix,
> >> # ./perf test "test perf probe of function from different CU"
> >> 117: test perf probe of function from different CU : Ok
> >>
> >> Signed-off-by: Athira Rajeev<atrajeev@linux.vnet.ibm.com>
> >
> > Reviewed-by: Adrian Hunter <adrian.hunter@intel.com>
> >
>
> Although it could use a Fixes tag
>
Thanks, I will add
Fixes: 56cbeacf1435 ("perf probe: Add test for regression introduced
by switch to die_get_decl_file()")
Namhyung
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH V4 2/3] tools/perf: Use is_perf_pid_map_name helper function to check dso's of pattern /tmp/perf-%d.map
2024-06-25 12:03 ` Adrian Hunter
@ 2024-06-25 18:06 ` Namhyung Kim
0 siblings, 0 replies; 10+ messages in thread
From: Namhyung Kim @ 2024-06-25 18:06 UTC (permalink / raw)
To: Adrian Hunter
Cc: Athira Rajeev, acme, jolsa, irogers, linux-kernel,
linux-perf-users, linuxppc-dev, akanksha, maddy, kjain, disgoel
On Tue, Jun 25, 2024 at 5:03 AM Adrian Hunter <adrian.hunter@intel.com> wrote:
>
> On 23/06/24 09:48, Athira Rajeev wrote:
> > commit 80d496be89ed ("perf report: Add support for profiling JIT
> > generated code") added support for profiling JIT generated code.
> > This patch handles dso's of form "/tmp/perf-$PID.map".
> >
> > Some of the references doesn't check exactly for same pattern.
> > some uses "if (!strncmp(dso_name, "/tmp/perf-", 10))". Fix
> > this by using helper function perf_pid_map_tid and
> > is_perf_pid_map_name which looks for proper pattern of
> > form: "/tmp/perf-$PID.map" for these checks.
> >
> > Signed-off-by: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
>
> Add a Fixes tag, then
>
> Reviewed-by: Adrian Hunter <adrian.hunter@intel.com>
Thanks, but I'm not sure which commit I can add the Fixes tag because
the original commit 80d496be89ed is too old and I'm sure we added a
lot of changes after that.
Namhyung
>
> > ---
> > tools/perf/util/dsos.c | 2 +-
> > tools/perf/util/srcline.c | 2 +-
> > 2 files changed, 2 insertions(+), 2 deletions(-)
> >
> > diff --git a/tools/perf/util/dsos.c b/tools/perf/util/dsos.c
> > index ab3d0c01dd63..846828ea1f00 100644
> > --- a/tools/perf/util/dsos.c
> > +++ b/tools/perf/util/dsos.c
> > @@ -275,7 +275,7 @@ static void dso__set_basename(struct dso *dso)
> > char *base, *lname;
> > int tid;
> >
> > - if (sscanf(dso__long_name(dso), "/tmp/perf-%d.map", &tid) == 1) {
> > + if (perf_pid_map_tid(dso__long_name(dso), &tid)) {
> > if (asprintf(&base, "[JIT] tid %d", tid) < 0)
> > return;
> > } else {
> > diff --git a/tools/perf/util/srcline.c b/tools/perf/util/srcline.c
> > index 9d670d8c1c08..51eb78993fe2 100644
> > --- a/tools/perf/util/srcline.c
> > +++ b/tools/perf/util/srcline.c
> > @@ -39,7 +39,7 @@ static const char *srcline_dso_name(struct dso *dso)
> > if (dso_name[0] == '[')
> > return NULL;
> >
> > - if (!strncmp(dso_name, "/tmp/perf-", 10))
> > + if (is_perf_pid_map_name(dso_name))
> > return NULL;
> >
> > return dso_name;
>
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH V4 1/3] tools/perf: Fix the string match for "/tmp/perf-$PID.map" files in dso__load
2024-06-23 6:48 [PATCH V4 1/3] tools/perf: Fix the string match for "/tmp/perf-$PID.map" files in dso__load Athira Rajeev
` (2 preceding siblings ...)
2024-06-25 11:57 ` [PATCH V4 1/3] tools/perf: Fix the string match for "/tmp/perf-$PID.map" files in dso__load Adrian Hunter
@ 2024-06-26 3:55 ` Namhyung Kim
3 siblings, 0 replies; 10+ messages in thread
From: Namhyung Kim @ 2024-06-26 3:55 UTC (permalink / raw)
To: acme, jolsa, adrian.hunter, irogers, Athira Rajeev
Cc: linux-kernel, linux-perf-users, linuxppc-dev, akanksha, maddy,
kjain, disgoel
On Sun, 23 Jun 2024 12:18:48 +0530, Athira Rajeev wrote:
> Perf test for perf probe of function from different CU fails
> as below:
>
> ./perf test -vv "test perf probe of function from different CU"
> 116: test perf probe of function from different CU:
> --- start ---
> test child forked, pid 2679
> Failed to find symbol foo in /tmp/perf-uprobe-different-cu-sh.Msa7iy89bx/testfile
> Error: Failed to add events.
> --- Cleaning up ---
> "foo" does not hit any event.
> Error: Failed to delete events.
> ---- end(-1) ----
> 116: test perf probe of function from different CU : FAILED!
>
> [...]
Applied the series to perf-tools-next, thanks!
Best regards,
Namhyung
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH V4 1/3] tools/perf: Fix the string match for "/tmp/perf-$PID.map" files in dso__load
2024-06-25 17:59 ` Namhyung Kim
@ 2024-06-26 5:04 ` Athira Rajeev
0 siblings, 0 replies; 10+ messages in thread
From: Athira Rajeev @ 2024-06-26 5:04 UTC (permalink / raw)
To: Namhyung Kim, Adrian Hunter
Cc: Arnaldo Carvalho de Melo, Jiri Olsa, Ian Rogers, LKML,
linux-perf-users, linuxppc-dev, akanksha, Madhavan Srinivasan,
Kajol Jain, Disha Goel
> On 25 Jun 2024, at 11:29 PM, Namhyung Kim <namhyung@kernel.org> wrote:
>
> Hello,
>
> On Tue, Jun 25, 2024 at 5:02 AM Adrian Hunter <adrian.hunter@intel.com> wrote:
>>
>> On 25/06/24 14:57, Adrian Hunter wrote:
>>> On 23/06/24 09:48, Athira Rajeev wrote:
>>>> Perf test for perf probe of function from different CU fails
>>>> as below:
>>>>
>>>> ./perf test -vv "test perf probe of function from different CU"
>>>> 116: test perf probe of function from different CU:
>>>> --- start ---
>>>> test child forked, pid 2679
>>>> Failed to find symbol foo in /tmp/perf-uprobe-different-cu-sh.Msa7iy89bx/testfile
>>>> Error: Failed to add events.
>>>> --- Cleaning up ---
>>>> "foo" does not hit any event.
>>>> Error: Failed to delete events.
>>>> ---- end(-1) ----
>>>> 116: test perf probe of function from different CU : FAILED!
>>>>
>>>> The test does below to probe function "foo" :
>>>>
>>>> # gcc -g -Og -flto -c /tmp/perf-uprobe-different-cu-sh.XniNxNEVT7/testfile-foo.c
>>>> -o /tmp/perf-uprobe-different-cu-sh.XniNxNEVT7/testfile-foo.o
>>>> # gcc -g -Og -c /tmp/perf-uprobe-different-cu-sh.XniNxNEVT7/testfile-main.c
>>>> -o /tmp/perf-uprobe-different-cu-sh.XniNxNEVT7/testfile-main.o
>>>> # gcc -g -Og -o /tmp/perf-uprobe-different-cu-sh.XniNxNEVT7/testfile
>>>> /tmp/perf-uprobe-different-cu-sh.XniNxNEVT7/testfile-foo.o
>>>> /tmp/perf-uprobe-different-cu-sh.XniNxNEVT7/testfile-main.o
>>>>
>>>> # ./perf probe -x /tmp/perf-uprobe-different-cu-sh.XniNxNEVT7/testfile foo
>>>> Failed to find symbol foo in /tmp/perf-uprobe-different-cu-sh.XniNxNEVT7/testfile
>>>> Error: Failed to add events.
>>>>
>>>> Perf probe fails to find symbol foo in the executable placed in
>>>> /tmp/perf-uprobe-different-cu-sh.XniNxNEVT7
>>>>
>>>> Simple reproduce:
>>>>
>>>> # mktemp -d /tmp/perf-checkXXXXXXXXXX
>>>> /tmp/perf-checkcWpuLRQI8j
>>>>
>>>> # gcc -g -o test test.c
>>>> # cp test /tmp/perf-checkcWpuLRQI8j/
>>>> # nm /tmp/perf-checkcWpuLRQI8j/test | grep foo
>>>> 00000000100006bc T foo
>>>>
>>>> # ./perf probe -x /tmp/perf-checkcWpuLRQI8j/test foo
>>>> Failed to find symbol foo in /tmp/perf-checkcWpuLRQI8j/test
>>>> Error: Failed to add events.
>>>>
>>>> But it works with any files like /tmp/perf/test. Only for
>>>> patterns with "/tmp/perf-", this fails.
>>>>
>>>> Further debugging, commit 80d496be89ed ("perf report: Add support
>>>> for profiling JIT generated code") added support for profiling JIT
>>>> generated code. This patch handles dso's of form
>>>> "/tmp/perf-$PID.map" .
>>>>
>>>> The check used "if (strncmp(self->name, "/tmp/perf-", 10) == 0)"
>>>> to match "/tmp/perf-$PID.map". With this commit, any dso in
>>>> /tmp/perf- folder will be considered separately for processing
>>>> (not only JIT created map files ). Fix this by changing the
>>>> string pattern to check for "/tmp/perf-%d.map". Add a helper
>>>> function is_perf_pid_map_name to do this check. In "struct dso",
>>>> dso->long_name holds the long name of the dso file. Since the
>>>> /tmp/perf-$PID.map check uses the complete name, use dso___long_name for
>>>> the string name.
>>>>
>>>> With the fix,
>>>> # ./perf test "test perf probe of function from different CU"
>>>> 117: test perf probe of function from different CU : Ok
>>>>
>>>> Signed-off-by: Athira Rajeev<atrajeev@linux.vnet.ibm.com>
>>>
>>> Reviewed-by: Adrian Hunter <adrian.hunter@intel.com>
>>>
>>
>> Although it could use a Fixes tag
>>
>
> Thanks, I will add
>
> Fixes: 56cbeacf1435 ("perf probe: Add test for regression introduced
> by switch to die_get_decl_file()")
>
> Namhyung
>
Hi Adrian,
Thanks for the review.
Thanks Namhyung for adding the Fixes tag and pulling the fix
Athira
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2024-06-26 5:04 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-06-23 6:48 [PATCH V4 1/3] tools/perf: Fix the string match for "/tmp/perf-$PID.map" files in dso__load Athira Rajeev
2024-06-23 6:48 ` [PATCH V4 2/3] tools/perf: Use is_perf_pid_map_name helper function to check dso's of pattern /tmp/perf-%d.map Athira Rajeev
2024-06-25 12:03 ` Adrian Hunter
2024-06-25 18:06 ` Namhyung Kim
2024-06-23 6:48 ` [PATCH V4 3/3] tools/perf: Fix parallel-perf python script to replace new python syntax ":=" usage Athira Rajeev
2024-06-25 11:57 ` [PATCH V4 1/3] tools/perf: Fix the string match for "/tmp/perf-$PID.map" files in dso__load Adrian Hunter
2024-06-25 12:02 ` Adrian Hunter
2024-06-25 17:59 ` Namhyung Kim
2024-06-26 5:04 ` Athira Rajeev
2024-06-26 3:55 ` Namhyung Kim
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).