iovisor / iovisor/bcc

offcputime report too much [unknown] while debuginfo file under /usr/lib/debug/

Open
#4,255 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
C
Stars
22.7k
Forks
4.1k
Avg merge
10d 4h
Merged PRs (30d)
3

Description

Hi, I have a `[unknown]` issue only in offcputime report,
which expected resolved from `/usr/lib/debug/usr/lib64/libc-2.28.so.debug`

the installed debuginfo works well with gdb, perf and etc

here is strace report, `/usr/lib/debug/proc/9597/root/usr/lib64/libc-2.28.so.debug` seem suspicious
```
[root@Insight-8324 ~]# cat /tmp/strace.offcputime.log | grep libc-2.28.so.debug
223287 pread64(8, "libc-2.28.so.debug\0\0og\237\336", 24, 1456748) = 24
223287 newfstatat(AT_FDCWD, "/proc/9597/root/usr/lib64/libc-2.28.so.debug", 0xffffdf3872c8, 0) = -1 ENOENT (No such file or directory)
223287 faccessat(AT_FDCWD, "/proc/9597/root/usr/lib64/libc-2.28.so.debug", F_OK) = -1 ENOENT (No such file or directory)
223287 faccessat(AT_FDCWD, "/proc/9597/root/usr/lib64/.debug/libc-2.28.so.debug", F_OK) = -1 ENOENT (No such file or directory)
223287 faccessat(AT_FDCWD, "/usr/lib/debug/proc/9597/root/usr/lib64/libc-2.28.so.debug", F_OK) = -1 ENOENT (No such file or directory)
```

and here is stack
```
223287 newfstatat(AT_FDCWD, "/proc/9597/root/usr/lib64/libc-2.28.so.debug", 0xffffdf3872c8, 0) = -1 ENOENT (No such file or directory)
> /usr/lib64/libc-2.28.so(__xstat+0x14) [0xc666c]
> /usr/lib64/libbcc.so.0.15.0() [0x305de7]
> /usr/lib64/libbcc.so.0.15.0() [0x30614f]
> /usr/lib64/libbcc.so.0.15.0(ProcSyms::Module::load_sym_table()+0xff) [0x2ff2ff]
> /usr/lib64/libbcc.so.0.15.0(ProcSyms::Module::find_addr(unsigned long, bcc_symbol*)+0x37) [0x2ff3af]
> /usr/lib64/libbcc.so.0.15.0(ProcSyms::resolve_addr(unsigned long, bcc_symbol*, bool)+0x14b) [0x2ff793]
> /usr/lib64/libbcc.so.0.15.0(bcc_symcache_resolve+0x17) [0x2fb28f]
> /usr/lib64/libffi.so.7.1.0() [0x6177]
> /usr/lib64/libffi.so.7.1.0() [0x576b]
> /usr/lib64/python3.7/lib-dynload/_ctypes.cpython-37m-aarch64-linux-gnu.so(_ctypes_callproc+0x40f) [0x11e2f]

```

I thinks root cause here: `ProcSyms::_add_module` miss readlink as `bcc_perf_map_path` do

```cpp
int ProcSyms::_add_module(mod_info *mod, int enter_ns, void *payload) {
ProcSyms *ps = static_cast(payload);
std::string ns_relative_path = tfm::format("/proc/%d/root%s", ps->pid_, mod->name);
const char *modpath = enter_ns && ps->pid_ != -1 ? ns_relative_path.c_str() : mod->name;
```

```c
bool bcc_perf_map_path(char *map_path, size_t map_len, int pid) {
char source[64];
snprintf(source, sizeof(source), "/proc/%d/root", pid);

char target[4096];
ssize_t target_len = readlink(source, target, sizeof(target) - 1);
if (target_len == -1)
return false;
```

My OS is EulerOS (from CentOS)

Thanks.

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.