首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >perf记录--调用堆栈fp无法解压主功能。

perf记录--调用堆栈fp无法解压主功能。
EN

Stack Overflow用户
提问于 2021-06-22 09:38:28
回答 1查看 153关注 0票数 1

我有一个C++测试程序,它让CPU忙碌:

代码语言:javascript
复制
#include <cstdint>
#include <iostream>

// Linear-feedback shift register
uint64_t lfsr1(uint64_t max_ix)
{
    uint64_t start_state = 0xACE1u;  /* Any nonzero start state will work. */
    uint64_t lfsr = start_state;
    uint64_t bit;                    /* Must be 16-bit to allow bit<<15 later in the code */

    for (uint64_t ix = 0; ix < max_ix; ++ix)
    {   /* taps: 16 14 13 11; feedback polynomial: x^16 + x^14 + x^13 + x^11 + 1 */
        bit = ((lfsr >> 0) ^ (lfsr >> 1) ^ (lfsr >> 3) ^ (lfsr >> 4)) & 1 /* & 1u */;
        lfsr = (lfsr >> 1) | (bit << 15);
    }
    return lfsr;
}

int main() {
    std::cout << lfsr1(1717986914ull) << "\n";
}

我用g++ -g -O3 -fno-omit-frame-pointer cpu.cpp -o cpu.bin编译它,然后用perf record -F 100 --call-graph fp -- ./cpu.bin运行它,第二次用dwarf而不是fp运行它。

perf script输出的fp中,我可以看到

代码语言:javascript
复制
cpu.bin 23435 1535437.021156:   42706947 cycles: 
            5617daf4b7a1 main+0x31 (…/cpu.bin)
            7f9a95088bf7 __libc_start_main+0xe7 (/lib/x86_64-linux-gnu/libc-2.27.so)
         3fe258d4c544155 [unknown] ([unknown])

而对于dwarf来说

代码语言:javascript
复制
cpu.bin 23443 1535441.101859:   42952079 cycles: 
            55a3b4ffd7a1 lfsr1+0x31 (inlined)
            55a3b4ffd7a1 main+0x31 (…/cpu.bin)
            7f00bcc8ebf6 __libc_start_main+0xe6 (/lib/x86_64-linux-gnu/libc-2.27.so)
            55a3b4ffd829 _start+0x29 (…/cpu.bin)

看起来,fp__libc_start_main中关闭了一个字节,这导致它错过了最后一个展开步骤。怎么解决这个问题呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-25 17:50:44

正如Peter在他的评论中所说的,当使用一个带有框架指针的glibc版本时,问题就会自行解决。在Ubuntu20.04上,有一个带有这样一个glibc的包。

代码语言:javascript
复制
sudo apt install libc6-prof
# To use this library:
env LD_LIBRARY_PATH=/lib/libc6-prof/x86_64-linux-gnu perf record …

然后,按照预期将[unknown]解析为_start

来源:https://bugs.launchpad.net/ubuntu/+source/glibc/+bug/1908307

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68081147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档