Perf 性能不';不显示应用程序本身的内部版本id

Perf 性能不';不显示应用程序本身的内部版本id,perf,Perf,当我运行以下perf命令来收集用户数据时 $ perf record -e cycles:u -j any,u -a -o perf.data.user ./test 生成id检查的输出为 $ perf buildid-list -f -i perf.data.user dbd41c586ea6789f3b998ed28be6ff37134e917a /lib/modules/4.19.125/build/vmlinux b5381a457906d279073822a5ceb24c4bfef9

当我运行以下perf命令来收集用户数据时

$ perf record -e cycles:u -j any,u -a -o perf.data.user ./test
生成id检查的输出为

$ perf buildid-list -f -i perf.data.user
dbd41c586ea6789f3b998ed28be6ff37134e917a /lib/modules/4.19.125/build/vmlinux
b5381a457906d279073822a5ceb24c4bfef94ddb /lib/x86_64-linux-gnu/libc-2.23.so
ce17e023542265fc11d9bc8f534bb4f070493d30 /lib/x86_64-linux-gnu/libpthread-2.23.so
5d7b6259552275a3c17bd4c3fd05f5a6bf40caa5 /lib/x86_64-linux-gnu/ld-2.23.so
55a35b6df1526bf3d69586896785bf1df0bb4be6 [vdso]
59081d88e819c2fd3bcd8e58bc0c858c0ee2c3a9 /home/mahmood/bin/perf
8edd43fbf5a6d895172d205a7248a814e3b07bb2 /home/mahmood/kernel-4.19.125/test/test
2c0a469e1700fdd0b2f670737dabafeb9c38f909 /opt/glibc-2.23-install/libc.so
正如您可以看到的
/home/mahmood/kernel-4.19.125/test/test
一样,二进制文件有一个build-id。这很好。然而,当我跑的时候

$ perf record -e cycles:k -j any,k -a -o perf.data.kernel ./test
我在同一输出中看不到应用程序的构建id

$ perf buildid-list -f -i perf.data.kernel
dbd41c586ea6789f3b998ed28be6ff37134e917a /lib/modules/4.19.125/build/vmlinux
49b4a1a69bb9aebaca5147b9821e1a3a2ca759f3 /lib/modules/4.19.125/kernel/net/ipv4/netfilter/iptable_filter.ko
bb4e88298fe274b1bec7ba8ab24e6a9670b93d04 /lib/modules/4.19.125/kernel/net/ipv4/netfilter/nf_nat_ipv4.ko
ee37b9e0cc9b7be3ca543ecfeaa6bde28b77df7d /lib/modules/4.19.125/kernel/net/netfilter/nf_nat.ko
2bc71fd8d0c750aa3427a31639ce75a16a3c288c /lib/modules/4.19.125/kernel/net/netfilter/nf_conntrack.ko
e5dfa4829fe8f9ed3185b708225a5bab8d6d0afe /lib/modules/4.19.125/kernel/net/ipv4/netfilter/nf_defrag_ipv4.ko
5d52d35a5b99dd81fed002ba571a7afe32b26cbd /lib/modules/4.19.125/kernel/net/ipv4/netfilter/ip_tables.ko
d19830cb5c697cb2583d327c28aa3961c945005d /lib/modules/4.19.125/kernel/drivers/gpu/drm/nouveau/nouveau.ko
b816c95c09032342acd644128cf4d21251b3578a /lib/modules/4.19.125/kernel/drivers/net/ethernet/intel/igb/igb.ko
da3d32f0230efe8329fae49f9de60ddaeddf48a9 /lib/modules/4.19.125/kernel/drivers/ata/libahci.ko
b5381a457906d279073822a5ceb24c4bfef94ddb /lib/x86_64-linux-gnu/libc-2.23.so
55a35b6df1526bf3d69586896785bf1df0bb4be6 [vdso]
有什么原因吗?我之所以这样做,是因为我的分析器检查了构建ID,并给出了一个关于缺少的
8edd43fbf5a6d895172d205a7248a814e3b07bb2
的错误,这是我的应用程序本身。分析器对前一种情况没有问题

更新:

我想,因为我正在分析内核活动,所以记录的数据中没有程序本身的迹象。但是,如果我运行
perf record-e cycles-j any-a-o perf.data.kernel./test
,那么除了内核文件之外,我还会看到程序的构建id

dbd41c586ea6789f3b998ed28be6ff37134e917a /lib/modules/4.19.125/build/vmlinux
49b4a1a69bb9aebaca5147b9821e1a3a2ca759f3 /lib/modules/4.19.125/kernel/net/ipv4/netfilter/iptable_filter.ko
bb4e88298fe274b1bec7ba8ab24e6a9670b93d04 /lib/modules/4.19.125/kernel/net/ipv4/netfilter/nf_nat_ipv4.ko
ee37b9e0cc9b7be3ca543ecfeaa6bde28b77df7d /lib/modules/4.19.125/kernel/net/netfilter/nf_nat.ko
2bc71fd8d0c750aa3427a31639ce75a16a3c288c /lib/modules/4.19.125/kernel/net/netfilter/nf_conntrack.ko
e5dfa4829fe8f9ed3185b708225a5bab8d6d0afe /lib/modules/4.19.125/kernel/net/ipv4/netfilter/nf_defrag_ipv4.ko
5d52d35a5b99dd81fed002ba571a7afe32b26cbd /lib/modules/4.19.125/kernel/net/ipv4/netfilter/ip_tables.ko
d19830cb5c697cb2583d327c28aa3961c945005d /lib/modules/4.19.125/kernel/drivers/gpu/drm/nouveau/nouveau.ko
b816c95c09032342acd644128cf4d21251b3578a /lib/modules/4.19.125/kernel/drivers/net/ethernet/intel/igb/igb.ko
55a35b6df1526bf3d69586896785bf1df0bb4be6 [vdso]
59081d88e819c2fd3bcd8e58bc0c858c0ee2c3a9 /home/mahmood/bin/perf
8edd43fbf5a6d895172d205a7248a814e3b07bb2 /home/mahmood/kernel-4.19.125/test/test
b592b0baf11cf7172f25d71f5f69de2d762897cb /opt/glibc-2.23-install/lib/ld-2.23.so
2c0a469e1700fdd0b2f670737dabafeb9c38f909 /opt/glibc-2.23-install/libc.so

但我不确定我是否正确。欢迎任何评论。

我想说的是,如果程序本身没有样本,那么
perf.data
文件只包含样本击中的路径的信息是有意义的。也许这是一个很好的特性,可以基于单个进程/可执行文件而不是整个系统来记录一个记录的主可执行文件。你能解释一下吗?这个程序是一个简单的for和struct,它在文件和显示器上写一些东西。因此,磁盘和显示器应该有一些内核活动。这不是真的吗?但是,我看到了与网络相关的文件。虽然我使用ssh运行程序(终端上的printf),但这让我感到困惑。我没有看到任何与磁盘相关的文件。另外,在用户配置文件中,我看到了libphtread,但对于内核,我没有看到。我想说的是,如果程序本身没有样本,那么
perf.data
文件只包含样本命中路径的信息是有意义的。也许这是一个很好的特性,可以基于单个进程/可执行文件而不是整个系统来记录一个记录的主可执行文件。你能解释一下吗?这个程序是一个简单的for和struct,它在文件和显示器上写一些东西。因此,磁盘和显示器应该有一些内核活动。这不是真的吗?但是,我看到了与网络相关的文件。虽然我使用ssh运行程序(终端上的printf),但这让我感到困惑。我没有看到任何与磁盘相关的文件。另外,在用户配置文件中,我看到了libphtread,但对于内核,我没有看到。我想不出任何理由。