Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
rbenv railsexpress

ruby-1.9.3-p484 cumulative performance patch for rbenv

This installs a patched ruby 1.9.3-p484 with the railsexpress patchsets: https://github.com/skaes/rvm-patchsets

Requirements

You will also need a C Compiler. If you're on Linux, you probably already have one or know how to install one. On OS X, you should install XCode, and brew install autoconf using homebrew.

BONUS!

Putting the following in your shell config (eg. ~/.bash_profile) will make Rails even faster, but will increase its memory footprint. For most applications, this will probably work well for you:

export RUBY_GC_MALLOC_LIMIT=60000000
export RUBY_FREE_MIN=200000

If you have a particularly large rails app (say, >100k lines), this seems to improve it even more:

export RUBY_GC_MALLOC_LIMIT=1000000000
export RUBY_FREE_MIN=500000
export RUBY_HEAP_MIN_SLOTS=40000

More BONUS!

If you're feeling adventurous, you can set some additional compile flags before you run the command above. These may cause the build to fail. If so, you can try again without the march flag, and it'll probably work. This generally makes my ruby ~1.5% faster. See http://www.opikdesign.com/kios/procie_kernel/ for more guidance on -march value.

export CFLAGS="-march=core2 -O3 -pipe -fomit-frame-pointer"

This has to be run BEFORE you compile ruby.

Even MORE BONUS!

Users who have installed libreadline and openssl via homebrew will find these libraries linked automatically. No need to specify any CONFIGURE_OPTS!

Ok, let's do this!

curl -L https://gist.githubusercontent.com/7hunderbird/4637375/raw/15c07b108b8f4ed245389c9e7c93c434bba67dcf/rbenv.sh | sh ; rbenv global 1.9.3-p484-railsexpress
build_package_combined_patch() {
local package_name="$1"
{
curl https://raw.github.com/skaes/rvm-patchsets/master/patchsets/ruby/1.9.3/p484/railsexpress | xargs -I % curl https://raw.github.com/skaes/rvm-patchsets/master/patches/ruby/1.9.3/p484/% | patch -p1
autoconf
./configure --prefix="$PREFIX_PATH" $CONFIGURE_OPTS
make -j 8
make install
} >&4 2>&1
}
install_package "yaml-0.1.4" "http://pyyaml.org/download/libyaml/yaml-0.1.4.tar.gz"
install_package "ruby-1.9.3-p484" "http://cache.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p484.tar.gz" combined_patch
VERSION="1.9.3-p484"
curl -L https://gist.githubusercontent.com/7hunderbird/4637375/raw/f7b535e95f18777ec2751a3db21d88d4e5583130/2-$VERSION-patched.sh > /tmp/$VERSION-railsexpress
if command -v brew > /dev/null
then
if brew --prefix openssl > /dev/null
then
CONFIGURE_OPTS="$CONFIGURE_OPTS --with-openssl-dir=`brew --prefix openssl`"
fi
if brew --prefix readline > /dev/null
then
CONFIGURE_OPTS="$CONFIGURE_OPTS --with-readline-dir=`brew --prefix readline`"
fi
fi
rbenv install /tmp/$VERSION-railsexpress
# for ubuntu
#if command apt-get -v > /dev/null
#then
# CONFIGURE_OPTS="$CONFIGURE_OPTS --with-openssl"
# CONFIGURE_OPTS="$CONFIGURE_OPTS --with-readline"
#fi
@supermarin

This comment has been minimized.

Copy link

supermarin commented Mar 18, 2014

curl doesn't work on OSX, needs -L flag.

curl -L ...

@7hunderbird

This comment has been minimized.

Copy link
Owner Author

7hunderbird commented Mar 20, 2014

Thanks @supermarin, added.

@supermarin

This comment has been minimized.

Copy link

supermarin commented Mar 20, 2014

@7hunderbird awesome! thanks

@johnantoni

This comment has been minimized.

Copy link

johnantoni commented Mar 24, 2014

Nice, updated for ruby 2.1.1

# (ruby-perf) performance patch configs for ruby
# https://gist.github.com/7hunderbird/4637375
export RUBY_GC_MALLOC_LIMIT=60000000
export RUBY_FREE_MIN=200000

# (ruby-perf) for really big ruby applications
export RUBY_GC_MALLOC_LIMIT=1000000000
export RUBY_GC_HEAP_FREE_SLOTS=500000
export RUBY_GC_HEAP_INIT_SLOTS=40000
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.