KDAB / hotspot

The Linux perf GUI for performance analysis.
4.12k stars 255 forks source link

added test for PERF_FORMAT_LOST attribute #579

Closed GitMensch closed 9 months ago

GitMensch commented 10 months ago

fixes https://github.com/KDAB/hotspot/issues/578

note: the testcase output now has:

1: QWARN  : TestPerfParser::testZeroCost() hotspot.perfparser: Unexpected attribute id: -1 Only know about 2 attributes so far
1: QWARN  : TestPerfParser::testZeroCost() hotspot.perfparser: Unexpected attribute id: -1 Only know about 2 attributes so far
1: QWARN  : TestPerfParser::testZeroCost() hotspot.perfparser: Unexpected attribute id: -1
1: QWARN  : TestPerfParser::testZeroCost() hotspot.perfparser: Unexpected attribute id: -1 Only know about 2 attributes so far
1: QWARN  : TestPerfParser::testZeroCost() hotspot.perfparser: Unexpected attribute id: -1 Only know about 2 attributes so far
1: QWARN  : TestPerfParser::testZeroCost() hotspot.perfparser: Unexpected attribute id: -1
1: QWARN  : TestPerfParser::testZeroCost() hotspot.perfparser: Unexpected attribute id: -1 Only know about 2 attributes so far
1: QWARN  : TestPerfParser::testZeroCost() hotspot.perfparser: Unexpected attribute id: -1 Only know about 2 attributes so far
1: QWARN  : TestPerfParser::testZeroCost() hotspot.perfparser: Unexpected attribute id: -1
1: QWARN  : TestPerfParser::testZeroCost() hotspot.perfparser: Unexpected attribute id: -1 Only know about 2 attributes so far
1: QWARN  : TestPerfParser::testZeroCost() hotspot.perfparser: Unexpected attribute id: -1 Only know about 2 attributes so far
1: QWARN  : TestPerfParser::testZeroCost() hotspot.perfparser: Unexpected attribute id: -1
1: QWARN  : TestPerfParser::testZeroCost() hotspot.perfparser: Unexpected attribute id: -1 Only know about 2 attributes so far
1: QWARN  : TestPerfParser::testZeroCost() hotspot.perfparser: Unexpected attribute id: -1 Only know about 2 attributes so far
1: QWARN  : TestPerfParser::testZeroCost() hotspot.perfparser: Unexpected attribute id: -1
1: QWARN  : TestPerfParser::testZeroCost() hotspot.perfparser: Unexpected attribute id: -1 Only know about 2 attributes so far
1: QWARN  : TestPerfParser::testZeroCost() hotspot.perfparser: Unexpected attribute id: -1 Only know about 2 attributes so far
1: QWARN  : TestPerfParser::testZeroCost() hotspot.perfparser: Unexpected attribute id: -1
1: QWARN  : TestPerfParser::testZeroCost() hotspot.perfparser: Unexpected attribute id: -1 Only know about 2 attributes so far
1: QWARN  : TestPerfParser::testZeroCost() hotspot.perfparser: Unexpected attribute id: -1 Only know about 2 attributes so far
1: QWARN  : TestPerfParser::testZeroCost() hotspot.perfparser: Unexpected attribute id: -1
1: QWARN  : TestPerfParser::testZeroCost() hotspot.perfparser: Unexpected attribute id: -1 Only know about 2 attributes so far
1: QWARN  : TestPerfParser::testZeroCost() hotspot.perfparser: Unexpected attribute id: -1 Only know about 2 attributes so far
1: QWARN  : TestPerfParser::testZeroCost() hotspot.perfparser: Unexpected attribute id: -1
1: QWARN  : TestPerfParser::testZeroCost() hotspot.perfparser: Unexpected attribute id: -1 Only know about 2 attributes so far
1: QWARN  : TestPerfParser::testZeroCost() hotspot.perfparser: Unexpected attribute id: -1 Only know about 2 attributes so far
1: QWARN  : TestPerfParser::testZeroCost() hotspot.perfparser: Unexpected attribute id: -1
1: QWARN  : TestPerfParser::testZeroCost() hotspot.perfparser: Unexpected attribute id: -1 Only know about 2 attributes so far
1: QWARN  : TestPerfParser::testZeroCost() hotspot.perfparser: Unexpected attribute id: -1 Only know about 2 attributes so far
1: QWARN  : TestPerfParser::testZeroCost() hotspot.perfparser: Unexpected attribute id: -1
1: QWARN  : TestPerfParser::testZeroCost() hotspot.perfparser: Unexpected attribute id: -1 Only know about 2 attributes so far
1: QWARN  : TestPerfParser::testZeroCost() hotspot.perfparser: Unexpected attribute id: -1 Only know about 2 attributes so far
1: QWARN  : TestPerfParser::testZeroCost() hotspot.perfparser: Unexpected attribute id: -1
1: QWARN  : TestPerfParser::testZeroCost() hotspot.perfparser: Unexpected attribute id: -1 Only know about 2 attributes so far
1: QWARN  : TestPerfParser::testZeroCost() hotspot.perfparser: Unexpected attribute id: -1 Only know about 2 attributes so far
1: QWARN  : TestPerfParser::testZeroCost() hotspot.perfparser: Unexpected attribute id: -1
1: QWARN  : TestPerfParser::testZeroCost() hotspot.perfparser: Unexpected attribute id: -1 Only know about 2 attributes so far
1: QWARN  : TestPerfParser::testZeroCost() hotspot.perfparser: Unexpected attribute id: -1 Only know about 2 attributes so far
1: QWARN  : TestPerfParser::testZeroCost() hotspot.perfparser: Unexpected attribute id: -1
1: QWARN  : TestPerfParser::testZeroCost() hotspot.perfparser: Unexpected attribute id: -1 Only know about 2 attributes so far
1: QWARN  : TestPerfParser::testZeroCost() hotspot.perfparser: Unexpected attribute id: -1 Only know about 2 attributes so far
1: QWARN  : TestPerfParser::testZeroCost() hotspot.perfparser: Unexpected attribute id: -1
1: QWARN  : TestPerfParser::testZeroCost() hotspot.perfparser: Unexpected attribute id: -1 Only know about 2 attributes so far
1: QWARN  : TestPerfParser::testZeroCost() hotspot.perfparser: Unexpected attribute id: -1 Only know about 2 attributes so far
1: QWARN  : TestPerfParser::testZeroCost() hotspot.perfparser: Unexpected attribute id: -1
1: QWARN  : TestPerfParser::testZeroCost() hotspot.perfparser: Unexpected attribute id: -1 Only know about 2 attributes so far
1: QWARN  : TestPerfParser::testZeroCost() hotspot.perfparser: Unexpected attribute id: -1 Only know about 2 attributes so far
1: QWARN  : TestPerfParser::testZeroCost() hotspot.perfparser: Unexpected attribute id: -1
1: QWARN  : TestPerfParser::testZeroCost() hotspot.perfparser: Unexpected attribute id: -1 Only know about 2 attributes so far
1: QWARN  : TestPerfParser::testZeroCost() hotspot.perfparser: Unexpected attribute id: -1 Only know about 2 attributes so far

further note: this testcase without the binary files needed 45-95 seconds. I'm quite sure that this can be improved - but I don't have an environment where I can easily perf record that.

milianw commented 10 months ago

this looks conceptually broken to me, I rather believe that this goes wrong in perfparser land somehow - question is how and why. I have spend some time now and found the real issue in perfparser ab14b6989d123af60f4c822e8ece8638945139c6 - can you please rework this patch to only add the basic test coverage? that's fine, the rest shouldn't be needed

GitMensch commented 10 months ago

https://github.com/KDAB/perfparser/commit/ab14b6989d123af60f4c822e8ece8638945139c6 looks nice. Yes, I'll add the testcase part, then push and re-request a review.

GitMensch commented 10 months ago

Test case reworded and checked in without the skipping, works fine.

Note: the current output of the testcase is:

1: unhandled feature PerfHeader::MEM_TOPOLOGY 56
1: unhandled feature PerfHeader::SAMPLE_TIME 16
1: unhandled feature PerfHeader::CACHE 17608
1: feature not properly read PerfHeader::CPU_TOPOLOGY 2356 1708
1: unhandled feature PerfHeader::BPF_BTF 4
1: unhandled feature PerfHeader::BPF_PROG_INFO 4
1: unhandled feature PerfHeader::CPU_PMU_CAPS 140
1: Linux version "6.6-1" detected. Switching to automatic buffering.
1: unhandled event type 79   PERF_RECORD_TIME_CONV
1: unhandled event type 69   PERF_RECORD_ID_INDEX
1: unhandled event type 73   PERF_RECORD_THREAD_MAP
1: unhandled event type 74   PERF_RECORD_CPU_MAP
1: unhandled event type 17   PERF_RECORD_KSYMBOL
1: unhandled event type 17   PERF_RECORD_KSYMBOL
1: unhandled event type 82   unknown type
1: PerfUnwind::InvalidKallsyms: Failed to parse kernel symbol mapping file "//proc/kallsyms": Mapping is empty.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/ld-linux-x86-64.so.2. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/ld-linux-x86-64.so.2. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/ld-linux-x86-64.so.2. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/ld-linux-x86-64.so.2. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/libreadline.so.8.2. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/libreadline.so.8.2. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/libreadline.so.8.2. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/libreadline.so.8.2. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/libc.so.6. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/libc.so.6. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/libc.so.6. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/libc.so.6. This can break stack unwinding and lead to missing symbols.
1: DWARF unwind tried to access kernel space 7f3a0c3bd000
1: DWARF unwind tried to access kernel space 7f3a0c3bd008
1: DWARF unwind tried to access kernel space 7f3a0c3bd000
1: DWARF unwind tried to access kernel space 7f3a0c3bd008
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/libncursesw.so.6.4. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/libncursesw.so.6.4. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/libncursesw.so.6.4. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/libncursesw.so.6.4. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/libc.so.6. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/libncursesw.so.6.4. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/libreadline.so.8.2. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/ld-linux-x86-64.so.2. This can break stack unwinding and lead to missing symbols.
1: DWARF unwind tried to access kernel space 3
1: DWARF unwind tried to access kernel space b
1: DWARF unwind tried to access kernel space 3
1: DWARF unwind tried to access kernel space b
1: DWARF unwind tried to access kernel space 3
1: DWARF unwind tried to access kernel space b
1: DWARF unwind tried to access kernel space 3
1: DWARF unwind tried to access kernel space b
1: DWARF unwind tried to access kernel space 3
1: DWARF unwind tried to access kernel space b
1: DWARF unwind tried to access kernel space 3
1: DWARF unwind tried to access kernel space b
1: DWARF unwind tried to access kernel space 3
1: DWARF unwind tried to access kernel space b
1: DWARF unwind tried to access kernel space 3
1: DWARF unwind tried to access kernel space b
1: DWARF unwind tried to access kernel space 3
1: DWARF unwind tried to access kernel space b
1: DWARF unwind tried to access kernel space 3
1: DWARF unwind tried to access kernel space b
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/bin/python3.11. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/bin/python3.11. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/bin/python3.11. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/bin/python3.11. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/ld-linux-x86-64.so.2. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/ld-linux-x86-64.so.2. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/ld-linux-x86-64.so.2. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/ld-linux-x86-64.so.2. This can break stack unwinding and lead to missing symbols.
1: DWARF unwind tried to access kernel space 2f3d584946455250
1: DWARF unwind tried to access kernel space 2f3d584946455258
1: DWARF unwind tried to access kernel space 2f3d584946455250
1: DWARF unwind tried to access kernel space 2f3d584946455258
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/libpython3.11.so.1.0. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/libpython3.11.so.1.0. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/libpython3.11.so.1.0. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/libpython3.11.so.1.0. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/libc.so.6. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/libc.so.6. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/libc.so.6. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/libc.so.6. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/libm.so.6. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/libm.so.6. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/libm.so.6. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/libm.so.6. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/libc.so.6. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/libm.so.6. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/libpython3.11.so.1.0. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/bin/python3.11. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/ld-linux-x86-64.so.2. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_opcode.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_opcode.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_opcode.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_opcode.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_opcode.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/math.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/math.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/math.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/math.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/math.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_datetime.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_datetime.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_datetime.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_datetime.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_datetime.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: DWARF unwind tried to access kernel space 7ff051b89378
1: DWARF unwind tried to access kernel space 7ff051b89380
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_hashlib.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_hashlib.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_hashlib.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_hashlib.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/libcrypto.so.3. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/libcrypto.so.3. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/libcrypto.so.3. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/libcrypto.so.3. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/libcrypto.so.3. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_hashlib.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_blake2.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_blake2.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_blake2.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_blake2.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_blake2.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_json.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_json.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_json.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_json.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_json.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/zlib.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/zlib.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/zlib.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/zlib.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/libz.so.1.3. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/libz.so.1.3. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/libz.so.1.3. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/libz.so.1.3. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/libz.so.1.3. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/zlib.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_bz2.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_bz2.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_bz2.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_bz2.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/libbz2.so.1.0.8. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/libbz2.so.1.0.8. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/libbz2.so.1.0.8. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/libbz2.so.1.0.8. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/libbz2.so.1.0.8. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_bz2.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_lzma.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_lzma.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_lzma.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_lzma.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/liblzma.so.5.4.5. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/liblzma.so.5.4.5. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/liblzma.so.5.4.5. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/liblzma.so.5.4.5. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/liblzma.so.5.4.5. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_lzma.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/fcntl.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/fcntl.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/fcntl.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/fcntl.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/fcntl.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_posixsubprocess.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_posixsubprocess.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_posixsubprocess.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_posixsubprocess.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_posixsubprocess.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/select.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/select.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/select.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/select.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/select.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_struct.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_struct.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_struct.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_struct.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_struct.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/grp.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/grp.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/grp.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/grp.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/grp.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_bisect.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_bisect.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_bisect.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_bisect.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_bisect.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_random.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_random.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_random.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_random.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_random.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_sha512.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_sha512.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_sha512.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_sha512.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_sha512.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_pickle.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_pickle.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_pickle.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_pickle.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_pickle.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_socket.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_socket.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_socket.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_socket.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/_socket.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/array.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/array.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/array.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/array.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: PerfUnwind::MissingElfFile: Could not find ELF file for /usr/lib/python3.11/lib-dynload/array.cpython-311-x86_64-linux-gnu.so. This can break stack unwinding and lead to missing symbols.
1: DWARF unwind tried to access kernel space 2000
1: DWARF unwind tried to access kernel space 2008
1: DWARF unwind tried to access kernel space 2000
1: DWARF unwind tried to access kernel space 2008
1: DWARF unwind tried to access kernel space 2000
1: DWARF unwind tried to access kernel space 2008
1: DWARF unwind tried to access kernel space 2000
1: DWARF unwind tried to access kernel space 2008
1: DWARF unwind tried to access kernel space 15
1: DWARF unwind tried to access kernel space 1d
1: DWARF unwind tried to access kernel space 2000
1: DWARF unwind tried to access kernel space 2008
1: DWARF unwind tried to access kernel space 2000
1: DWARF unwind tried to access kernel space 2008
1: DWARF unwind tried to access kernel space 2000
1: DWARF unwind tried to access kernel space 2008
1: DWARF unwind tried to access kernel space 2000
1: DWARF unwind tried to access kernel space 2008
1: DWARF unwind tried to access kernel space 2000
1: DWARF unwind tried to access kernel space 2008
1: PASS   : TestPerfParser::testPerfFormatLost()

I still think that there's some performance issue - which seems to only occur during ctest (!) - when elf files are missing - but that's unrelated to the added test "in general".

GitMensch commented 10 months ago

This PR now contains 3 commits: the test without the lookup-time comment (as solved by https://github.com/KDAB/perfparser/pull/34), the minor adjustment to const the newSize in perfparser (not a huge improvement, but definitely more clear), and the unsetting of DEBUGINFOD_URLS as requested (along with removing comments about long parsing times that are gone as soon as https://github.com/KDAB/perfparser/pull/34 is applied)

I suggest to pull both this and the referenced perfparser changes in (+adjust the submodule reference), then have a look if it is possible to reduce the amount of calls to registerElf(). The ones not found are checked 5 times and because the new QSet is at "lookup sope" within findFile(), the filesystem check is still done 5 times. I've thought there was an issue for that, but it seems we just discussed it in some other issue. The option that seems most easy for me is to still include "not found" files in m_elfs, with a marker that there's no lookup possible.

GitMensch commented 9 months ago

adjusted as requested, should be ready to be merged (of course - please pull the hotspot-perfparser change first and update the reference, otherwise this will now fail on Debian/Ubuntu)