Skip to content

Instantly share code, notes, and snippets.

@azat
Last active January 29, 2024 16:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save azat/c6f808cc7d270142ed3f3eb297646a15 to your computer and use it in GitHub Desktop.
Save azat/c6f808cc7d270142ed3f3eb297646a15 to your computer and use it in GitHub Desktop.
Wrapper for llvm addr2line (faster then binutils) for perf
#!/usr/bin/env bash
# This is wrapper for faster addr2line, that is required for "perf --call-graph dwarf"
# NOTE: since v6.3 perf supports specifying addr2line and supports LLVM so it is not required there
# stdbuf is important here to avoid buffering, otherwise perf will stuck
stdbuf -o0 -i0 sed -e 's/,//' -e 's/^$/ffffffffffffff/' | llvm-addr2line "$@"
@azat
Copy link
Author

azat commented Jan 29, 2024

# time tr , '\n' <<<140602762285055,353180516,353180904,195201276,304433559,304512825,353200327,353201581,354519975,354510786,140602761813972,140602762339772 | xargs printf "%x\n" | addr2line.orig -e /usr/lib/debug/.build-id/04/01bd8da6edab3e45399d62571357ab12545133.debug -i -f -e /usr/lib/debug/usr/bin/clickhouse.debug
??
??:0
_ZN4Poco3Net10SocketImpl8pollImplERNS_8TimespanEi
./.build/./base/poco/Net/src/SocketImpl.cpp:?
_ZN4Poco3Net10SocketImpl4pollERKNS_8TimespanEi
./.build/./base/poco/Net/src/SocketImpl.cpp:505
_ZNK4Poco3Net6Socket4pollERKNS_8TimespanEi
./.build/./base/poco/Net/include/Poco/Net/Socket.h:374
_ZNK2DB24ReadBufferFromPocoSocket4pollEm
./.build/./src/IO/ReadBufferFromPocoSocket.cpp:124
_ZN2DB10TCPHandler7runImplEv
./.build/./src/Server/TCPHandler.cpp:302
_ZN2DB10TCPHandler3runEv
./.build/./src/Server/TCPHandler.cpp:2194
_ZN4Poco3Net19TCPServerConnection5startEv
./.build/./base/poco/Net/src/TCPServerConnection.cpp:57
_ZNKSt3__114default_deleteIN4Poco3Net19TCPServerConnectionEEclB6v15000EPS3_
./.build/./contrib/llvm-project/libcxx/include/__memory/unique_ptr.h:48
_ZNSt3__110unique_ptrIN4Poco3Net19TCPServerConnectionENS_14default_deleteIS3_EEE5resetB6v15000EPS3_
./.build/./contrib/llvm-project/libcxx/include/__memory/unique_ptr.h:305
_ZNSt3__110unique_ptrIN4Poco3Net19TCPServerConnectionENS_14default_deleteIS3_EEED2B6v15000Ev
./.build/./contrib/llvm-project/libcxx/include/__memory/unique_ptr.h:259
_ZN4Poco3Net19TCPServerDispatcher3runEv
./.build/./base/poco/Net/src/TCPServerDispatcher.cpp:116
_ZN4Poco12PooledThread3runEv
./.build/./base/poco/Foundation/src/ThreadPool.cpp:202
_ZN4Poco9SharedPtrINS_8RunnableENS_16ReferenceCounterENS_13ReleasePolicyIS1_EEE6assignEPS1_
./.build/./base/poco/Foundation/include/Poco/SharedPtr.h:139
_ZN4Poco9SharedPtrINS_8RunnableENS_16ReferenceCounterENS_13ReleasePolicyIS1_EEEaSEPS1_
./.build/./base/poco/Foundation/include/Poco/SharedPtr.h:180
_ZN4Poco10ThreadImpl13runnableEntryEPv
./.build/./base/poco/Foundation/src/Thread_POSIX.cpp:350
??
??:0
??
??:0

real    0m6.656s
user    0m5.230s
sys     0m1.422s

@azat
Copy link
Author

azat commented Jan 29, 2024

This wrapper almost 7x faster

# time tr , '\n' <<<140602762285055,353180516,353180904,195201276,304433559,304512825,353200327,353201581,354519975,354510786,140602761813972,140602762339772 | xargs printf "%x\n" | addr2line -e /usr/lib/debug/.build-id/04/01bd8da6edab3e45399d62571357ab12545133.debug -i -f -e /usr/lib/debug/usr/bin/clickhouse.debug
??
??:0
_ZN4Poco3Net10SocketImpl8pollImplERNS_8TimespanEi
./.build/./base/poco/Net/src/SocketImpl.cpp:0
_ZN4Poco3Net10SocketImpl4pollERKNS_8TimespanEi
./.build/./base/poco/Net/src/SocketImpl.cpp:505
_ZNK4Poco3Net6Socket4pollERKNS_8TimespanEi
./.build/./base/poco/Net/include/Poco/Net/Socket.h:374
_ZNK2DB24ReadBufferFromPocoSocket4pollEm
./.build/./src/IO/ReadBufferFromPocoSocket.cpp:124
_ZN2DB10TCPHandler7runImplEv
./.build/./src/Server/TCPHandler.cpp:302
_ZN2DB10TCPHandler3runEv
./.build/./src/Server/TCPHandler.cpp:2194
_ZN4Poco3Net19TCPServerConnection5startEv
./.build/./base/poco/Net/src/TCPServerConnection.cpp:57
_ZNKSt3__114default_deleteIN4Poco3Net19TCPServerConnectionEEclB6v15000EPS3_
./.build/./contrib/llvm-project/libcxx/include/__memory/unique_ptr.h:48
_ZNSt3__110unique_ptrIN4Poco3Net19TCPServerConnectionENS_14default_deleteIS3_EEE5resetB6v15000EPS3_
./.build/./contrib/llvm-project/libcxx/include/__memory/unique_ptr.h:305
_ZNSt3__110unique_ptrIN4Poco3Net19TCPServerConnectionENS_14default_deleteIS3_EEED2B6v15000Ev
./.build/./contrib/llvm-project/libcxx/include/__memory/unique_ptr.h:259
_ZN4Poco3Net19TCPServerDispatcher3runEv
./.build/./base/poco/Net/src/TCPServerDispatcher.cpp:116
_ZN4Poco12PooledThread3runEv
./.build/./base/poco/Foundation/src/ThreadPool.cpp:202
_ZN4Poco9SharedPtrINS_8RunnableENS_16ReferenceCounterENS_13ReleasePolicyIS1_EEE6assignEPS1_
./.build/./base/poco/Foundation/include/Poco/SharedPtr.h:139
_ZN4Poco9SharedPtrINS_8RunnableENS_16ReferenceCounterENS_13ReleasePolicyIS1_EEEaSEPS1_
./.build/./base/poco/Foundation/include/Poco/SharedPtr.h:180
_ZN4Poco10ThreadImpl13runnableEntryEPv
./.build/./base/poco/Foundation/src/Thread_POSIX.cpp:350
??
??:0
??
??:0

real    0m1.060s
user    0m0.942s
sys     0m0.129s

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment