xinyiZzz opened a new pull request, #50340:
URL: https://github.com/apache/doris/pull/50340
### What problem does this PR solve?
Testing Doris stacktrace methods, `libunwind DISABLED` mode is the fastest
(not parse debug information).
except for the `libunwind FAST` mode (parses .debug_aranges), the other 4
methods do not have line numbers, including glog, boost, and glibc.
If you find that stack trace is too slow, use `libunwind DISABLED`.
```
17382022 : libunwind FAST cost(ms)
2305 : libunwind DISABLED cost(ms)
4779629 : boost cost(ms)
142682336 : glog cost(ms)
28597 : glibc cost(ms)
libunwind FAST:
0# doris::get_stack_trace(int, std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> >) at
/mnt/disk2/zouxinyi/doris/core/be/src/util/stack_util.cpp:59
1# doris::ThreadMemTrackerMgrTest_test1_Test::TestBody() at
/mnt/disk2/zouxinyi/doris/core/be/test/runtime/memory/thread_mem_tracker_mgr_test.cpp:597
2# void
testing::internal::HandleSehExceptionsInMethodIfSupported<testing::Test,
void>(testing::Test*, void (testing::Test::*)(), char const*)
3# void
testing::internal::HandleExceptionsInMethodIfSupported<testing::Test,
void>(testing::Test*, void (testing::Test::*)(), char const*)
4# testing::Test::Run()
5# testing::TestInfo::Run()
6# testing::TestSuite::Run()
7# testing::internal::UnitTestImpl::RunAllTests()
8# bool
testing::internal::HandleSehExceptionsInMethodIfSupported<testing::internal::UnitTestImpl,
bool>(testing::internal::UnitTestImpl*, bool
(testing::internal::UnitTestImpl::*)(), char const*)
9# bool
testing::internal::HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl,
bool>(testing::internal::UnitTestImpl*, bool
(testing::internal::UnitTestImpl::*)(), char const*)
10# testing::UnitTest::Run()
11# RUN_ALL_TESTS() at
/mnt/disk2/zouxinyi/doris/core/thirdparty/installed/include/gtest/gtest.h:2490
12# main at
/mnt/disk2/zouxinyi/doris/core/be/test/testutil/run_all_tests.cpp:104
13# __libc_start_main
14# _start
libunwind DISABLED:
0# doris::get_stack_trace(int, std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> >)
1# doris::ThreadMemTrackerMgrTest_test1_Test::TestBody()
2# void
testing::internal::HandleSehExceptionsInMethodIfSupported<testing::Test,
void>(testing::Test*, void (testing::Test::*)(), char const*)
3# void
testing::internal::HandleExceptionsInMethodIfSupported<testing::Test,
void>(testing::Test*, void (testing::Test::*)(), char const*)
4# testing::Test::Run()
5# testing::TestInfo::Run()
6# testing::TestSuite::Run()
7# testing::internal::UnitTestImpl::RunAllTests()
8# bool
testing::internal::HandleSehExceptionsInMethodIfSupported<testing::internal::UnitTestImpl,
bool>(testing::internal::UnitTestImpl*, bool
(testing::internal::UnitTestImpl::*)(), char const*)
9# bool
testing::internal::HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl,
bool>(testing::internal::UnitTestImpl*, bool
(testing::internal::UnitTestImpl::*)(), char const*)
10# testing::UnitTest::Run()
11# RUN_ALL_TESTS()
12# main
13# __libc_start_main
14# _start
boost: 0# doris::get_stack_trace_by_boost[abi:cxx11]() at
/mnt/disk2/zouxinyi/doris/core/be/src/util/stack_util.cpp:72
1# doris::ThreadMemTrackerMgrTest_test1_Test::TestBody() at
/mnt/disk2/zouxinyi/doris/core/be/test/runtime/memory/thread_mem_tracker_mgr_test.cpp:599
2# void
testing::internal::HandleSehExceptionsInMethodIfSupported<testing::Test,
void>(testing::Test*, void (testing::Test::*)(), char const*) in
/mnt/disk2/zouxinyi/doris/core/be/ut_build_ASAN/test//doris_be_test
3# void
testing::internal::HandleExceptionsInMethodIfSupported<testing::Test,
void>(testing::Test*, void (testing::Test::*)(), char const*) in
/mnt/disk2/zouxinyi/doris/core/be/ut_build_ASAN/test//doris_be_test
4# testing::Test::Run() in
/mnt/disk2/zouxinyi/doris/core/be/ut_build_ASAN/test//doris_be_test
5# testing::TestInfo::Run() in
/mnt/disk2/zouxinyi/doris/core/be/ut_build_ASAN/test//doris_be_test
6# testing::TestSuite::Run() in
/mnt/disk2/zouxinyi/doris/core/be/ut_build_ASAN/test//doris_be_test
7# testing::internal::UnitTestImpl::RunAllTests() in
/mnt/disk2/zouxinyi/doris/core/be/ut_build_ASAN/test//doris_be_test
8# bool
testing::internal::HandleSehExceptionsInMethodIfSupported<testing::internal::UnitTestImpl,
bool>(testing::internal::UnitTestImpl*, bool
(testing::internal::UnitTestImpl::*)(), char const*) in
/mnt/disk2/zouxinyi/doris/core/be/ut_build_ASAN/test//doris_be_test
9# bool
testing::internal::HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl,
bool>(testing::internal::UnitTestImpl*, bool
(testing::internal::UnitTestImpl::*)(), char const*) in
/mnt/disk2/zouxinyi/doris/core/be/ut_build_ASAN/test//doris_be_test
10# testing::UnitTest::Run() in
/mnt/disk2/zouxinyi/doris/core/be/ut_build_ASAN/test//doris_be_test
11# RUN_ALL_TESTS() at
/mnt/disk2/zouxinyi/doris/core/thirdparty/installed/include/gtest/gtest.h:2490
12# main at
/mnt/disk2/zouxinyi/doris/core/be/test/testutil/run_all_tests.cpp:104
13# __libc_start_main in /lib64/libc.so.6
14# _start in
/mnt/disk2/zouxinyi/doris/core/be/ut_build_ASAN/test//doris_be_test
glog: @ 0x5601ff94622b
testing::internal::HandleSehExceptionsInMethodIfSupported<>()
@ 0x5601ff940089
testing::internal::HandleExceptionsInMethodIfSupported<>()
@ 0x5601ff916a5a testing::Test::Run()
@ 0x5601ff91747e testing::TestInfo::Run()
@ 0x5601ff917d3e testing::TestSuite::Run()
@ 0x5601ff9273fe testing::internal::UnitTestImpl::RunAllTests()
@ 0x5601ff947076
testing::internal::HandleSehExceptionsInMethodIfSupported<>()
@ 0x5601ff941081
testing::internal::HandleExceptionsInMethodIfSupported<>()
@ 0x5601ff925bf3 testing::UnitTest::Run()
@ 0x5601c1847113 RUN_ALL_TESTS()
@ 0x5601c183ac70 main
@ 0x7f18a9a9d7e5 __libc_start_main
@ 0x5601bdfaf02a _start
@ (nil) (unknown)
glibc:
/mnt/disk2/zouxinyi/doris/core/be/ut_build_ASAN/test//doris_be_test(+0x26b5c7e9)
[0x5601cb1907e9]
/mnt/disk2/zouxinyi/doris/core/be/ut_build_ASAN/test//doris_be_test(+0x1cbc4caf)
[0x5601c11f8caf]
/mnt/disk2/zouxinyi/doris/core/be/ut_build_ASAN/test//doris_be_test(+0x5b31222b)
[0x5601ff94622b]
/mnt/disk2/zouxinyi/doris/core/be/ut_build_ASAN/test//doris_be_test(+0x5b30c089)
[0x5601ff940089]
/mnt/disk2/zouxinyi/doris/core/be/ut_build_ASAN/test//doris_be_test(+0x5b2e2a5a)
[0x5601ff916a5a]
/mnt/disk2/zouxinyi/doris/core/be/ut_build_ASAN/test//doris_be_test(+0x5b2e347e)
[0x5601ff91747e]
/mnt/disk2/zouxinyi/doris/core/be/ut_build_ASAN/test//doris_be_test(+0x5b2e3d3e)
[0x5601ff917d3e]
/mnt/disk2/zouxinyi/doris/core/be/ut_build_ASAN/test//doris_be_test(+0x5b2f33fe)
[0x5601ff9273fe]
/mnt/disk2/zouxinyi/doris/core/be/ut_build_ASAN/test//doris_be_test(+0x5b313076)
[0x5601ff947076]
/mnt/disk2/zouxinyi/doris/core/be/ut_build_ASAN/test//doris_be_test(+0x5b30d081)
[0x5601ff941081]
/mnt/disk2/zouxinyi/doris/core/be/ut_build_ASAN/test//doris_be_test(+0x5b2f1bf3)
[0x5601ff925bf3]
/mnt/disk2/zouxinyi/doris/core/be/ut_build_ASAN/test//doris_be_test(+0x1d213113)
[0x5601c1847113]
/mnt/disk2/zouxinyi/doris/core/be/ut_build_ASAN/test//doris_be_test(+0x1d206c70)
[0x5601c183ac70]
/lib64/libc.so.6(__libc_start_main+0xe5) [0x7f18a9a9d7e5]
/mnt/disk2/zouxinyi/doris/core/be/ut_build_ASAN/test//doris_be_test(+0x1997b02a)
[0x5601bdfaf02a]
```
```
{
MonotonicStopWatch watch;
watch.start();
for (int i = 0; i < 100; i++) {
get_stack_trace(0, "FAST");
}
std::cout << watch.elapsed_time() / 1000 << " : libunwind FAST
cost(ms)" << std::endl;
}
{
MonotonicStopWatch watch;
watch.start();
for (int i = 0; i < 100; i++) {
get_stack_trace(0, "DISABLED");
}
std::cout << watch.elapsed_time() / 1000 << " : libunwind DISABLED
cost(ms)" << std::endl;
}
{
MonotonicStopWatch watch;
watch.start();
for (int i = 0; i < 100; i++) {
get_stack_trace_by_boost();
}
std::cout << watch.elapsed_time() / 1000 << " : boost cost(ms)" <<
std::endl;
}
{
MonotonicStopWatch watch;
watch.start();
for (int i = 0; i < 100; i++) {
get_stack_trace_by_glog();
}
std::cout << watch.elapsed_time() / 1000 << " : glog cost(ms)" <<
std::endl;
}
{
MonotonicStopWatch watch;
watch.start();
for (int i = 0; i < 100; i++) {
get_stack_trace_by_glibc();
}
std::cout << watch.elapsed_time() / 1000 << " : glibc cost(ms)" <<
std::endl;
}
```
### Check List (For Author)
- Test <!-- At least one of them must be included. -->
- [ ] Regression test
- [ ] Unit Test
- [ ] Manual test (add detailed scripts or steps below)
- [ ] No need to test or manual test. Explain why:
- [ ] This is a refactor/code format and no logic has been changed.
- [ ] Previous test can cover this change.
- [ ] No code files have been changed.
- [ ] Other reason <!-- Add your reason? -->
- Behavior changed:
- [ ] No.
- [ ] Yes. <!-- Explain the behavior change -->
- Does this need documentation?
- [ ] No.
- [ ] Yes. <!-- Add document PR link here. eg:
https://github.com/apache/doris-website/pull/1214 -->
### Check List (For Reviewer who merge this PR)
- [ ] Confirm the release note
- [ ] Confirm test cases
- [ ] Confirm document
- [ ] Add branch pick label <!-- Add branch pick label that this PR should
merge into -->
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]