Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
ruby-1.9.3-p327 cumulative performance patch.

Patched ruby 1.9.3-p327 for 30% faster rails boot

Overview

This script installs a patched version of ruby 1.9.3-p327 with boot-time performance improvements (#66 and #68), and runtime performance improvements (#83 and #84). It also includes the new backported GC from ruby-trunk.

Many thanks to funny-falcon for the performance patches.

Requirements

OR

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.

Ok, let's do this!

If you're using rbenv:

curl https://raw.github.com/gist/4113123/rbenv.sh | sh ; rbenv global 1.9.3-p327-perf

If you're using rvm:

rvm get head && rvm reinstall 1.9.3-perf --patch falcon --force-autoconf -j 3

BONUS!

Putting the following in your shell config (eg. ~/.bash_profile) will make Rails even faster, but will increase its memory footprint:

export RUBY_HEAP_MIN_SLOTS=1000000
export RUBY_HEAP_SLOTS_INCREMENT=1000000
export RUBY_HEAP_SLOTS_GROWTH_FACTOR=1
export RUBY_GC_MALLOC_LIMIT=100000000
export RUBY_HEAP_FREE_MIN=500000

Also, you might want to try out Zeus, which takes advantage of the patched GC to preload your rails app. It can effectively boot your tests (and consoles, servers, runners...) in half a second, no matter the size of your app.

build_package_combined_patch() {
local package_name="$1"
{
curl https://raw.github.com/gist/3721562/01-cached-lp.diff | patch -p1
curl https://raw.github.com/gist/3721562/02-sorted-lf.diff | patch -p1
curl https://raw.github.com/gist/3721562/03-st_opt.diff | patch -p1
curl https://raw.github.com/gist/3721562/04-sparse_array.diff | patch -p1
curl https://raw.github.com/gist/3721562/05-ary-queue.diff | patch -p1
curl https://raw.github.com/gist/3721562/06-st_opt_sparse_array.diff | patch -p1
curl https://raw.github.com/gist/3721562/07-backport-gc.diff | 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-p327" "http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p327.tar.gz" combined_patch
VERSION="1.9.3-p327"
curl https://raw.github.com/gist/4113123/2-$VERSION-patched.sh > /tmp/$VERSION-perf
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
rbenv install /tmp/$VERSION-perf
@n0ne

This comment has been minimized.

Copy link

n0ne commented Nov 23, 2012

$ rvm get head && rvm reinstall 1.9.3-perf --patch falcon --force-autoconf -j 3

ruby-1.9.3-p327-perf - #extracted to /home/none/.rvm/src/ruby-1.9.3-p327-perf
Patch 'falcon' not found.
There has been an error applying the specified patches. Halting the installation.

:-(

@klebershimabuku

This comment has been minimized.

Copy link

klebershimabuku commented Jan 15, 2013

+1

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.