From: "mliska at suse dot cz" <sourceware-bugzilla@sourceware.org>
To: elfutils-devel@sourceware.org
Subject: [Bug debuginfod/29478] New: Slow query of a debuginfo in a big rpm with very many files
Date: Fri, 12 Aug 2022 08:58:10 +0000 [thread overview]
Message-ID: <bug-29478-10460@http.sourceware.org/bugzilla/> (raw)
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.
next reply other threads:[~2022-08-12 8:58 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-08-12 8:58 mliska at suse dot cz [this message]
2022-08-12 11:23 ` [Bug debuginfod/29478] " fche at redhat dot com
2022-08-12 12:18 ` mliska at suse dot cz
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=bug-29478-10460@http.sourceware.org/bugzilla/ \
--to=sourceware-bugzilla@sourceware.org \
--cc=elfutils-devel@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).