linux-perf-users.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Bug with --buildid-mmap?
@ 2024-07-03 15:03 Jakob Jarmar
  2024-07-04  0:02 ` Namhyung Kim
  0 siblings, 1 reply; 2+ messages in thread
From: Jakob Jarmar @ 2024-07-03 15:03 UTC (permalink / raw)
  To: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
	Namhyung Kim
  Cc: linux-perf-users

Hi,

I believe I may have found a bug in the --buildid-mmap flag for perf record,
where it hangs trying to read from /dev/dri/renderD128 trying to look up a
build ID. I can reliably reproduce it with:

perf record -p 12345 -g --call-graph=dwarf --buildid-mmap

(where 12345 is some process such that /proc/12345/maps contains
/dev/dri/renderD218)

See example backtrace (produced with GDB on the hung perf process) below.
This backtrace is from a slightly old version of perf, but the issue is present
in master on torvalds/linux (I got some compiler errors from perf-tools-next).
Apologies in advance if Fastmail lied to me and sent this as HTML.

Kind regards
Jakob Jarmar


#0  0x00007f91dc500d95 in __libc_pread64 (fd=43, buf=0x7ffda9164310, count=0, offset=<optimized out>)
    at ../sysdeps/unix/sysv/linux/pread64.c:25
#1  __libc_pread64 (fd=fd@entry=43, buf=buf@entry=0x7ffda9164310, count=count@entry=0, 
    offset=offset@entry=0) at ../sysdeps/unix/sysv/linux/pread64.c:23
#2  0x00007f91dc53824e in __pread_chk (fd=fd@entry=43, buf=buf@entry=0x7ffda9164310, 
    nbytes=nbytes@entry=0, offset=offset@entry=0, buflen=buflen@entry=64) at pread_chk.c:28
#3  0x00007f91dd40ac7c in pread (__fd=43, __buf=0x7ffda9164310, __nbytes=0, __offset=<optimized out>)
    at /usr/include/bits/unistd.h:38
#4  pread_retry (fd=43, buf=0x7ffda9164310, len=0, off=0) at ../lib/system.h:192
#5  read_unmmaped_file (fildes=43, offset=0, maxsize=0, cmd=ELF_C_READ, parent=0x0)
    at /usr/src/debug/elfutils-0.191-4.fc40.x86_64/libelf/elf_begin.c:601
#6  read_file (fildes=fildes@entry=43, offset=offset@entry=0, maxsize=<optimized out>, 
    maxsize@entry=18446744073709551615, cmd=cmd@entry=ELF_C_READ, parent=parent@entry=0x0)
    at /usr/src/debug/elfutils-0.191-4.fc40.x86_64/libelf/elf_begin.c:716
#7  0x00007f91dd40fd6f in elf_begin (fildes=fildes@entry=43, cmd=cmd@entry=ELF_C_READ, ref=ref@entry=0x0)
    at /usr/src/debug/elfutils-0.191-4.fc40.x86_64/libelf/elf_begin.c:1212
#8  0x0000560146879b86 in read_build_id (filename=0x560159d97b48 "/dev/dri/renderD128", 
    bid=0x7ffda9165490) at util/symbol-elf.c:980
#9  filename__read_build_id (filename=filename@entry=0x560159d97b48 "/dev/dri/renderD128", 
    bid=bid@entry=0x7ffda9165490) at util/symbol-elf.c:1025
#10 0x000056014682f40f in perf_record_mmap2__read_build_id (event=event@entry=0x560159d97b00, 
    machine=<optimized out>, is_kernel=is_kernel@entry=false) at util/synthetic-events.c:397
#11 0x0000560146830e2b in perf_event__synthesize_mmap_events (tool=tool@entry=0x560146fbf420 <record>, 
    event=event@entry=0x560159d97b00, pid=pid@entry=1066149, tgid=tgid@entry=1066149, 
    process=process@entry=0x5601466d07c0 <process_synthesized_event>, 
    machine=machine@entry=0x560159d72a58, mmap_data=true) at util/synthetic-events.c:529
#12 0x000056014683141c in __event__synthesize_thread (comm_event=comm_event@entry=0x560159d97ab0, 
    mmap_event=mmap_event@entry=0x560159d97b00, fork_event=fork_event@entry=0x560159d98b70, 
    namespaces_event=namespaces_event@entry=0x560159dc5bb0, pid=1066149, full=full@entry=1, 
    process=0x5601466d07c0 <process_synthesized_event>, tool=0x560146fbf420 <record>, 
    machine=0x560159d72a58, needs_mmap=true, mmap_data=true) at util/synthetic-events.c:841
#13 0x000056014683167e in __perf_event__synthesize_threads (tool=tool@entry=0x560146fbf420 <record>, 
    process=process@entry=0x5601466d07c0 <process_synthesized_event>, 
    machine=machine@entry=0x560159d72a58, needs_mmap=needs_mmap@entry=true, 
    mmap_data=mmap_data@entry=true, dirent=0x560159da0210, start=0, num=510)
    at util/synthetic-events.c:978
#14 0x0000560146831ef9 in perf_event__synthesize_threads (tool=tool@entry=0x560146fbf420 <record>, 
    process=process@entry=0x5601466d07c0 <process_synthesized_event>, 
    machine=machine@entry=0x560159d72a58, needs_mmap=true, mmap_data=<optimized out>, 
    nr_threads_synthesize=nr_threads_synthesize@entry=1) at util/synthetic-events.c:1049
#15 0x0000560146833864 in perf_event__synthesize_threads (tool=0x560146fbf420 <record>, 
    process=0x5601466d07c0 <process_synthesized_event>, machine=0x560159d72a58, 
    needs_mmap=<optimized out>, mmap_data=<optimized out>, nr_threads_synthesize=1)
    at util/synthetic-events.c:1960
#16 0x00005601466cea47 in record__synthesize (tail=tail@entry=false, rec=0x560146fbf420 <record>)
    at builtin-record.c:2135
#17 0x00005601466d21f5 in __cmd_record (argc=argc@entry=0, argv=argv@entry=0x7ffda916fe70, 
    rec=0x560146fbf420 <record>) at builtin-record.c:2536
#18 0x00005601466d567e in cmd_record (argc=<optimized out>, argv=<optimized out>)
    at builtin-record.c:4257
#19 0x000056014677edcf in run_builtin (p=p@entry=0x560146fc20e8 <commands+264>, argc=argc@entry=8, 
    argv=argv@entry=0x7ffda916fe70) at perf.c:349
#20 0x00005601466bd717 in handle_internal_command (argc=8, argv=<optimized out>) at perf.c:402
#21 run_argv (argcp=<synthetic pointer>, argv=<synthetic pointer>) at perf.c:446
#22 main (argc=<optimized out>, argv=0x7ffda916fe70) at perf.c:562

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: Bug with --buildid-mmap?
  2024-07-03 15:03 Bug with --buildid-mmap? Jakob Jarmar
@ 2024-07-04  0:02 ` Namhyung Kim
  0 siblings, 0 replies; 2+ messages in thread
From: Namhyung Kim @ 2024-07-04  0:02 UTC (permalink / raw)
  To: Jakob Jarmar
  Cc: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
	linux-perf-users

Hello,

On Wed, Jul 03, 2024 at 05:03:27PM +0200, Jakob Jarmar wrote:
> Hi,
> 
> I believe I may have found a bug in the --buildid-mmap flag for perf record,
> where it hangs trying to read from /dev/dri/renderD128 trying to look up a
> build ID. I can reliably reproduce it with:
> 
> perf record -p 12345 -g --call-graph=dwarf --buildid-mmap
> 
> (where 12345 is some process such that /proc/12345/maps contains
> /dev/dri/renderD218)

Thanks for the report!  For some reason, it seems to have an executable
mapping on the /dev/dri/renderD218.

> 
> See example backtrace (produced with GDB on the hung perf process) below.
> This backtrace is from a slightly old version of perf, but the issue is present
> in master on torvalds/linux (I got some compiler errors from perf-tools-next).

Ok, glad to tested it on the latest version.

Can you please share the compiler error you saw from perf-tools-next?


> Apologies in advance if Fastmail lied to me and sent this as HTML.

It seems ok. :)
 
> 
> #0  0x00007f91dc500d95 in __libc_pread64 (fd=43, buf=0x7ffda9164310, count=0, offset=<optimized out>)
>     at ../sysdeps/unix/sysv/linux/pread64.c:25
> #1  __libc_pread64 (fd=fd@entry=43, buf=buf@entry=0x7ffda9164310, count=count@entry=0, 
>     offset=offset@entry=0) at ../sysdeps/unix/sysv/linux/pread64.c:23
> #2  0x00007f91dc53824e in __pread_chk (fd=fd@entry=43, buf=buf@entry=0x7ffda9164310, 
>     nbytes=nbytes@entry=0, offset=offset@entry=0, buflen=buflen@entry=64) at pread_chk.c:28
> #3  0x00007f91dd40ac7c in pread (__fd=43, __buf=0x7ffda9164310, __nbytes=0, __offset=<optimized out>)
>     at /usr/include/bits/unistd.h:38
> #4  pread_retry (fd=43, buf=0x7ffda9164310, len=0, off=0) at ../lib/system.h:192

I don't know what happened in the libelf but it seems to try to read 0
bytes (maybe repeatedly?).  Looks like a bug in the libelf when it reads
special files but I think we can detect the ELF header in the file and
bail out early.

Thanks,
Namhyung


> #5  read_unmmaped_file (fildes=43, offset=0, maxsize=0, cmd=ELF_C_READ, parent=0x0)
>     at /usr/src/debug/elfutils-0.191-4.fc40.x86_64/libelf/elf_begin.c:601
> #6  read_file (fildes=fildes@entry=43, offset=offset@entry=0, maxsize=<optimized out>, 
>     maxsize@entry=18446744073709551615, cmd=cmd@entry=ELF_C_READ, parent=parent@entry=0x0)
>     at /usr/src/debug/elfutils-0.191-4.fc40.x86_64/libelf/elf_begin.c:716
> #7  0x00007f91dd40fd6f in elf_begin (fildes=fildes@entry=43, cmd=cmd@entry=ELF_C_READ, ref=ref@entry=0x0)
>     at /usr/src/debug/elfutils-0.191-4.fc40.x86_64/libelf/elf_begin.c:1212
> #8  0x0000560146879b86 in read_build_id (filename=0x560159d97b48 "/dev/dri/renderD128", 
>     bid=0x7ffda9165490) at util/symbol-elf.c:980
> #9  filename__read_build_id (filename=filename@entry=0x560159d97b48 "/dev/dri/renderD128", 
>     bid=bid@entry=0x7ffda9165490) at util/symbol-elf.c:1025
> #10 0x000056014682f40f in perf_record_mmap2__read_build_id (event=event@entry=0x560159d97b00, 
>     machine=<optimized out>, is_kernel=is_kernel@entry=false) at util/synthetic-events.c:397
> #11 0x0000560146830e2b in perf_event__synthesize_mmap_events (tool=tool@entry=0x560146fbf420 <record>, 
>     event=event@entry=0x560159d97b00, pid=pid@entry=1066149, tgid=tgid@entry=1066149, 
>     process=process@entry=0x5601466d07c0 <process_synthesized_event>, 
>     machine=machine@entry=0x560159d72a58, mmap_data=true) at util/synthetic-events.c:529
> #12 0x000056014683141c in __event__synthesize_thread (comm_event=comm_event@entry=0x560159d97ab0, 
>     mmap_event=mmap_event@entry=0x560159d97b00, fork_event=fork_event@entry=0x560159d98b70, 
>     namespaces_event=namespaces_event@entry=0x560159dc5bb0, pid=1066149, full=full@entry=1, 
>     process=0x5601466d07c0 <process_synthesized_event>, tool=0x560146fbf420 <record>, 
>     machine=0x560159d72a58, needs_mmap=true, mmap_data=true) at util/synthetic-events.c:841
> #13 0x000056014683167e in __perf_event__synthesize_threads (tool=tool@entry=0x560146fbf420 <record>, 
>     process=process@entry=0x5601466d07c0 <process_synthesized_event>, 
>     machine=machine@entry=0x560159d72a58, needs_mmap=needs_mmap@entry=true, 
>     mmap_data=mmap_data@entry=true, dirent=0x560159da0210, start=0, num=510)
>     at util/synthetic-events.c:978
> #14 0x0000560146831ef9 in perf_event__synthesize_threads (tool=tool@entry=0x560146fbf420 <record>, 
>     process=process@entry=0x5601466d07c0 <process_synthesized_event>, 
>     machine=machine@entry=0x560159d72a58, needs_mmap=true, mmap_data=<optimized out>, 
>     nr_threads_synthesize=nr_threads_synthesize@entry=1) at util/synthetic-events.c:1049
> #15 0x0000560146833864 in perf_event__synthesize_threads (tool=0x560146fbf420 <record>, 
>     process=0x5601466d07c0 <process_synthesized_event>, machine=0x560159d72a58, 
>     needs_mmap=<optimized out>, mmap_data=<optimized out>, nr_threads_synthesize=1)
>     at util/synthetic-events.c:1960
> #16 0x00005601466cea47 in record__synthesize (tail=tail@entry=false, rec=0x560146fbf420 <record>)
>     at builtin-record.c:2135
> #17 0x00005601466d21f5 in __cmd_record (argc=argc@entry=0, argv=argv@entry=0x7ffda916fe70, 
>     rec=0x560146fbf420 <record>) at builtin-record.c:2536
> #18 0x00005601466d567e in cmd_record (argc=<optimized out>, argv=<optimized out>)
>     at builtin-record.c:4257
> #19 0x000056014677edcf in run_builtin (p=p@entry=0x560146fc20e8 <commands+264>, argc=argc@entry=8, 
>     argv=argv@entry=0x7ffda916fe70) at perf.c:349
> #20 0x00005601466bd717 in handle_internal_command (argc=8, argv=<optimized out>) at perf.c:402
> #21 run_argv (argcp=<synthetic pointer>, argv=<synthetic pointer>) at perf.c:446
> #22 main (argc=<optimized out>, argv=0x7ffda916fe70) at perf.c:562

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2024-07-04  0:02 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-07-03 15:03 Bug with --buildid-mmap? Jakob Jarmar
2024-07-04  0:02 ` 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).