public inbox for elfutils@sourceware.org
 help / color / mirror / Atom feed
* [Bug debuginfod/29478] New: Slow query of a debuginfo in a big rpm with very many files
@ 2022-08-12  8:58 mliska at suse dot cz
  2022-08-12 11:23 ` [Bug debuginfod/29478] " fche at redhat dot com
  2022-08-12 12:18 ` mliska at suse dot cz
  0 siblings, 2 replies; 3+ messages in thread
From: mliska at suse dot cz @ 2022-08-12  8:58 UTC (permalink / raw)
  To: elfutils-devel

https://sourceware.org/bugzilla/show_bug.cgi?id=29478

            Bug ID: 29478
           Summary: Slow query of a debuginfo in a big rpm with very many
                    files
           Product: elfutils
           Version: unspecified
            Status: NEW
          Severity: normal
          Priority: P2
         Component: debuginfod
          Assignee: unassigned at sourceware dot org
          Reporter: mliska at suse dot cz
                CC: elfutils-devel at sourceware dot org
  Target Milestone: ---

Consider a very common test case where you debug a binary and the binary
depends on linux-vdso.so.1, well, actually each Linux binary depends on it.

$ file /usr/lib/modules/5.19.0-1-default/vdso/vdso64.so
/usr/lib/modules/5.19.0-1-default/vdso/vdso64.so: ELF 64-bit LSB shared object,
x86-64, version 1 (SYSV), static-pie linked,
BuildID[sha1]=6c5e8eefd4b928a12d9eec149ba8eab49b3febcc, stripped

it belongs to the following debuginfo package:

$ du -hs ~/BIG/test/kernel-default-debuginfo-5.19.0-1.1.x86_64.rpm 
1.6G    /home/marxin/BIG/test/kernel-default-debuginfo-5.19.0-1.1.x86_64.rpm

and we (openSUSE) use bzip2 compression for it (mainly due to compatibility
with older system where one can install a recent kernel).

Anyway it contains quite many files:

$ rpm -qpl ~/BIG/test/kernel-default-debuginfo-5.19.0-1.1.x86_64.rpm | wc -l
15906

and it occupies 5.5 GB when extracted.

$ DEBUGINFOD_VERBOSE=1 gdb `which htop`
GNU gdb (GDB; openSUSE Tumbleweed) 12.1
...
url 0
https://debuginfod.opensuse.org/buildid/6c5e8eefd4b928a12d9eec149ba8eab49b3febcc/debuginfo
query 1 urls in parallel
server response HTTP response code said error
url 0 The requested URL returned error: 504
not found No such file or directory (err=-2)

So as seen, there's a timeout of the request. Apparently, libarchive
uncompresses the content of each entry:

perf confirms that:

    23.14%  libbz2.so.1.0.6   [.] BZ2_bzDecompress
     4.86%  libbz2.so.1.0.6   [.] 0x0000000000015f62
     2.21%  [kernel]          [k] virtnet_poll
     1.86%  [kernel]          [k] __raw_callee_save___pv_queued_spin_unlock

and I can reproduce it locally with:

$ cat /tmp/demo.c
#include <archive.h>
#include <archive_entry.h>
#include <stdlib.h>

int main()
{
  struct archive *a;
  struct archive_entry *entry;
  int r;

  a = archive_read_new();
  archive_read_support_filter_all(a);
  archive_read_support_format_all(a);
  r = archive_read_open_filename(a,
"/home/marxin/BIG/test/kernel-default-debuginfo-5.19.0-1.1.x86_64.rpm", 10240);
// Note 1
  if (r != ARCHIVE_OK)
    exit(1);
  while (archive_read_next_header(a, &entry) == ARCHIVE_OK) {
    printf("%s\n",archive_entry_pathname(entry));
    archive_read_data_skip(a);  // Note 2
  }
  r = archive_read_free(a);  // Note 3
  if (r != ARCHIVE_OK)
    exit(1);
}

Note rpm -qpl finishes very quickly:

$ time rpm -qpl ~/BIG/test/kernel-default-debuginfo-5.19.0-1.1.x86_64.rpm
>/dev/null

real    0m0.064s
user    0m0.060s
sys     0m0.004s

If I see correctly, the function handle_buildid_r_match skips all entries
different from b_source1, but it's really slow
due to mentioned libarchive slownes.

-- 
You are receiving this mail because:
You are on the CC list for the bug.

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

end of thread, other threads:[~2022-08-12 12:18 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-08-12  8:58 [Bug debuginfod/29478] New: Slow query of a debuginfo in a big rpm with very many files mliska at suse dot cz
2022-08-12 11:23 ` [Bug debuginfod/29478] " fche at redhat dot com
2022-08-12 12:18 ` mliska at suse dot cz

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 read-only IMAP folder(s) and NNTP newsgroup(s).