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: commits-unsubscr...@doris.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org