Pull to refresh

Срочно обновляем RVM (Ruby Version Manager)

Reading time 2 min
Views 17K
Совсем недавно во многих ruby-блогах, сообществах, да и на хабре, было написано немало постов о том что RVM дурно влияет на производительность MRI-версии ruby (официальный интерпретатор языка) по причине того что установщик не учитывает оптимизации компилятора GCC. Конечно для этого недуга были «лекарства», но применять их приходилось ручками, причем довольно-таки прямыми. Так вот, спешу всех обрадовать что в последних версиях RVM (начиная с версии 1.17.0) ситуация изменилась, и конечно же в лучшую сторону, теперь Вы снова можете полностью положится на менеджера версий ruby. Все что Вам нужно сделать — это обновиться до последней версии.

Для тех кто не умеет или забыл как это делается, подскажу.
Запускаем терминал, и пишем:
$ rvm get stable

RVM тянет последнюю стабильную версию себя, перезапускается, и выводит стандартное сообщение с результатом обновления и благодарностями за использование от небезызвестного Уэйна Сегвина (Wayne E. Seguin), автора данного пакета.

После того как RVM обновлен, Вам необходимо перекомпилировать установленные MRI версии ruby, а еще лучше — установить последнюю. На момент написания данного поста, последние стабильные версии это: RVM — 1.17.2 и Ruby — 1.9.3-p327. Перекомпилировать ruby с помощью RVM очень просто:
$ rvm reinstall 1.9.3

Для того чтобы использовать свежеустановленную версию ruby по умолчанию, выполните:
$ rvm use 1.9.3 --default

Помимо процессорных оптимизаций, RVM теперь знает про патч funny-falcon'а и ставит его со всеми последними версиями для которых он существует. Прирост производительности очевиден, на моем Intel® Core(TM) i5-2320 CPU @ 3.00GHz с четырьмя гигами ОЗУ под Ubuntu 12.04, типичный бенчмарк дает следующие результаты:

До (RVM — 1.16.17, Ruby — 1.9.3-p286)
$ time ruby -e "count = 0; while(count < 100000000); count = count + 1; end; puts count"
100000000

real    0m5.303s
user    0m5.244s
sys     0m0.016s

После (RVM — 1.17.2, Ruby — 1.9.3-p327)
$ time ruby -e "count = 0; while(count < 100000000); count = count + 1; end; puts count"
100000000

real    0m1.940s
user    0m1.932s
sys     0m0.004s

Ну вот собственно и все. Спасибо за внимание, как говорится — Happy Hacking!

Update: для пользователей Mac OS X 10.6 и выше.
Для явной компиляции при установке Ruby, возможно потребуется добавить опцию --with-gcc=clang, то есть:
$ rvm reinstall 1.9.3 --with-gcc=clang

Спасибо пользователю virusman за эту наводку.
Tags:
Hubs:
+31
Comments 30
Comments Comments 30

Articles