-
Notifications
You must be signed in to change notification settings - Fork 5.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
install tcmalloc #4564
install tcmalloc #4564
Changes from 3 commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,88 @@ | ||||||||||||||||||||||||||||||||||||||||||||
#!/bin/bash | ||||||||||||||||||||||||||||||||||||||||||||
# | ||||||||||||||||||||||||||||||||||||||||||||
# Copyright 2021 Hang Lyu | ||||||||||||||||||||||||||||||||||||||||||||
# | ||||||||||||||||||||||||||||||||||||||||||||
# This script attempts to install tcmalloc and libunwind. | ||||||||||||||||||||||||||||||||||||||||||||
# The tcmalloc provides the more efficient way to malloc so that it can speed | ||||||||||||||||||||||||||||||||||||||||||||
# up the code, especially for the decoding code which contains massive memory | ||||||||||||||||||||||||||||||||||||||||||||
# allocation operations. | ||||||||||||||||||||||||||||||||||||||||||||
# | ||||||||||||||||||||||||||||||||||||||||||||
# At the same time, the tcmalloc also provides some profilers which can help | ||||||||||||||||||||||||||||||||||||||||||||
# the user to analysis the performance of the code. However, there may have | ||||||||||||||||||||||||||||||||||||||||||||
# some deadlock problems when you use the profilers with default build-in glibc. | ||||||||||||||||||||||||||||||||||||||||||||
# So the libunwind is recommanded to be installed. When the deadlock problems | ||||||||||||||||||||||||||||||||||||||||||||
# happen, the user can try to link with the library libunwind. But there may | ||||||||||||||||||||||||||||||||||||||||||||
# still be some crash on x64 platform. You can skip the installation about | ||||||||||||||||||||||||||||||||||||||||||||
# libunwind if you don't need it. (Link with "-lunwind" after your installation | ||||||||||||||||||||||||||||||||||||||||||||
# if you want to include it.) | ||||||||||||||||||||||||||||||||||||||||||||
# | ||||||||||||||||||||||||||||||||||||||||||||
# Depending on different platforms which are used by different users, the users | ||||||||||||||||||||||||||||||||||||||||||||
# also can try differnet malloc libraries such as tbbmalloc and so on. From our | ||||||||||||||||||||||||||||||||||||||||||||
# test, the tcmalloc is most efficient on our platform. | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
# Make sure we are in the tools/ directory. | ||||||||||||||||||||||||||||||||||||||||||||
if [ $(basename $PWD) == extras ]; then | ||||||||||||||||||||||||||||||||||||||||||||
cd .. | ||||||||||||||||||||||||||||||||||||||||||||
fi | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
! [ $(basename $PWD) == tools ] && \ | ||||||||||||||||||||||||||||||||||||||||||||
echo "You must call this script from the tools/ directory" && exit 1; | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
# prepare libunwind | ||||||||||||||||||||||||||||||||||||||||||||
echo "****() Installing libunwind" | ||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||||||||||||||||||||||||||||||||||||||||||||
if [ ! -e libunwind-1.5-rc1.tar.gz ]; then | ||||||||||||||||||||||||||||||||||||||||||||
echo "Trying to download libunwind via wget" | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
if ! which wget >&/dev/null; then | ||||||||||||||||||||||||||||||||||||||||||||
echo "This script requires you to first install wget" | ||||||||||||||||||||||||||||||||||||||||||||
echo "You can also just download libunwind-1.5-rc1.tar.gz from" | ||||||||||||||||||||||||||||||||||||||||||||
echo "http://download-mirror.savannah.gnu.org/releases/libunwind/libunwind-1.5-rc1.tar.gz" | ||||||||||||||||||||||||||||||||||||||||||||
exit 1; | ||||||||||||||||||||||||||||||||||||||||||||
fi | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
wget http://download.savannah.nongnu.org/releases/libunwind/libunwind-1.5-rc1.tar.gz || exit 1; | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
if [ ! -f libunwind-1.5-rc1.tar.gz ]; then | ||||||||||||||||||||||||||||||||||||||||||||
echo "Download of libunwind failed!" | ||||||||||||||||||||||||||||||||||||||||||||
echo "Aborting script. Please download and install libunwind manually!" | ||||||||||||||||||||||||||||||||||||||||||||
exit 1; | ||||||||||||||||||||||||||||||||||||||||||||
fi | ||||||||||||||||||||||||||||||||||||||||||||
fi | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
# install libunwind | ||||||||||||||||||||||||||||||||||||||||||||
# The installation directory can be changed. But be careful, set the prefix as | ||||||||||||||||||||||||||||||||||||||||||||
#`pwd` will cause recursive problem. | ||||||||||||||||||||||||||||||||||||||||||||
tar vxzf libunwind-1.5-rc1.tar.gz | ||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. tar is extremely noisy with |
||||||||||||||||||||||||||||||||||||||||||||
( | ||||||||||||||||||||||||||||||||||||||||||||
cd libunwind-1.5-rc1 | ||||||||||||||||||||||||||||||||||||||||||||
./configure --prefix=$PWD/install || exit 1; | ||||||||||||||||||||||||||||||||||||||||||||
make || exit 1; | ||||||||||||||||||||||||||||||||||||||||||||
make install || exit 1; | ||||||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
All pipelining operators at end of line ( |
||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
# prepare tcmalloc | ||||||||||||||||||||||||||||||||||||||||||||
if [ -d gperftools ]; then | ||||||||||||||||||||||||||||||||||||||||||||
echo "$0: Assuming gperftools is already installed Please delete the directory" | ||||||||||||||||||||||||||||||||||||||||||||
echo "./gperftools if you need to reinstall." | ||||||||||||||||||||||||||||||||||||||||||||
mv gproftools gproftools_backup | ||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The message does not say what is really going on. Also gperftools != gproftools. You create the former below. Consider
Suggested change
The extension |
||||||||||||||||||||||||||||||||||||||||||||
fi | ||||||||||||||||||||||||||||||||||||||||||||
git clone https://github.com/gperftools/gperftools.git gperftools | ||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
# install tcmalloc | ||||||||||||||||||||||||||||||||||||||||||||
wd=$PWD | ||||||||||||||||||||||||||||||||||||||||||||
cd gperftools | ||||||||||||||||||||||||||||||||||||||||||||
bash autogen.sh | ||||||||||||||||||||||||||||||||||||||||||||
./configure --prefix=$PWD || exit 1; | ||||||||||||||||||||||||||||||||||||||||||||
make || exit 1; | ||||||||||||||||||||||||||||||||||||||||||||
make install || exit 1; | ||||||||||||||||||||||||||||||||||||||||||||
cd .. | ||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
# add path | ||||||||||||||||||||||||||||||||||||||||||||
( | ||||||||||||||||||||||||||||||||||||||||||||
wd=$PWD | ||||||||||||||||||||||||||||||||||||||||||||
echo export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$wd/gperftools/lib | ||||||||||||||||||||||||||||||||||||||||||||
echo export PATH=$PATH:$wd/gperftools/bin | ||||||||||||||||||||||||||||||||||||||||||||
) >> env.sh | ||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
Also:
|
||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Remove empty line |
||||||||||||||||||||||||||||||||||||||||||||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I would merge both cases into one. "Can't find tcmalloc in tools/gperftools. Run 'extras/install_tcmalloc.sh' in 'tools/' to install." is good enough for both. install_tcmalloc.sh will print an error if the user tries to do what message says, i.e run
../tools/extras/install_tcmalloc.sh
. "Refer for instructions" is a lie, the script installs stuff without giving any :)If you split lines, unindent the continuations, it will look weird when printed.
failure
takes any number of arguments and prints them in a single string with a space between, so if a message is concise enough, this will work to splitFirst half and second half
into two code lines:Just FYI, you may stick
$'\n'
into a string to break lines, outside double quotes, but w/o space, or else Line 2 will start with a space, e.g.:"Line 1"$'\n'"Line 2"
or$'Line 1\nLine 2'
do the same thing. You can also do\'
for'
inside a$
-prefixed string.