Comments 34
Я у себя добавил вот это в ~/.rvmrc: rvm_configure_env=(CFLAGS="-march=native -O3 -pipe -fomit-frame-pointer")
O3 достаточно опасный флаг, ИМХО. Его использование ИМХО не стоит так рекомендовать. O2 правда тут тоже не замечено…
Чем плох O3?
Зачастую бинарь собранный с O3 работает медленней O2. Я много где выдел рекомендаций использовать именно O2.
О3 применяет более агрессивный инлайнинг функций, что в при недостаточном размере кеша может замедлить программу, вместо ускорения.
Также раньше, AFAIR в старых gcc, некоторые оптимизации О3 могли привести к некорректному коду. Но в новых версиях gcc такого уже не должно быть.
Также раньше, AFAIR в старых gcc, некоторые оптимизации О3 могли привести к некорректному коду. Но в новых версиях gcc такого уже не должно быть.
Я ставил и О3 и О2, не заметил разницы что-то…
Хах, действительно — прирост в скорости ~ в 2 раза на моем сервере!
Intel Q6600, 8GB
andrii@andrii-serv:~$ time ruby -e «count = 0; while(count < 100000000); count = count + 1; end; puts count»
100000000
До:
real 0m5.877s
user 0m5.640s
sys 0m0.000s
После:
real 0m4.285s
user 0m4.272s
sys 0m0.008s
Обновил так же на макбуке, но прирост составил 100ms
andrii@andrii-serv:~$ time ruby -e «count = 0; while(count < 100000000); count = count + 1; end; puts count»
100000000
До:
real 0m5.877s
user 0m5.640s
sys 0m0.000s
После:
real 0m4.285s
user 0m4.272s
sys 0m0.008s
Обновил так же на макбуке, но прирост составил 100ms
до
после
MacBook MB991
⇢ time ruby -e «count = 0; while(count < 100000000); count = count + 1; end; puts count»
100000000
real 0m9.820s
user 0m9.672s
sys 0m0.020s
после
⇢ time ruby -e «count = 0; while(count < 100000000); count = count + 1; end; puts count»
100000000
real 0m2.833s
user 0m2.789s
sys 0m0.009s
MacBook MB991
Вы попробуйте на каком-нибудь достаточно крупном проекте time rake routes или time rake spec до и после… вот где более заметен прирост.
От CFLAGS не заметил никакого ускорения, которое не было бы в рамках погрешности. Вот патч от funny falcon действительно даёт огромный прирост. Собственно, о флагах компиляции написано тут:
This generally makes my ruby ~1.5% faster.
Непонятно. У меня руби 1.9.3-p194 скомпилен от 1 августа, там есть нужный флаг. Сейчас обновлю до p327, посмотрим как там.
$ less ~/.rvm/log/1.9.3-p194/make.log
[2012-08-01 12:03:08] make -j2
CC = /usr/bin/gcc-4.2
LD = ld
LDSHARED = /usr/bin/gcc-4.2 -dynamiclib
CFLAGS = -O3 -ggdb -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Werror=pointer-arith -Werror=write-strings -Werror=declaration-after-statement -Werror=shorten-64-to-32 -Werror=implicit-function-declaration -fno-common -pipe
аналогично, только у меня скомпилировано ещё в апреле:
обновление до p327 + патч от funny falcon ускорило тест из статьи на 3.8%
[2012-04-27 11:55:38] make
CC = gcc
LD = ld
LDSHARED = gcc -shared
CFLAGS = -O3 -ggdb -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Werror=pointer-arith -Werror=write-strings -Werror=declaration-after-statement -Werror=implicit-function-declaration -fPIC
XCFLAGS = -include ruby/config.h -include ruby/missing.h -fvisibility=hidden -DRUBY_EXPORT
CPPFLAGS = -I. -I.ext/include/i686-linux -I./include -I.
DLDFLAGS = -Wl,-soname,libruby.so.1.9
SOLIBS = -lpthread -lrt -ldl -lcrypt -lm
обновление до p327 + патч от funny falcon ускорило тест из статьи на 3.8%
Ну, кстати, falcon patch дал хороший прирост. Я замерял по спекам от рабочего проекта, у нас тут 600+ спек, которые выполняются 4m 30s, стало в районе 3m20s, одобряю.
И, собственно, это главная фича, -O3 тут мало при чем, а в этой версии статьи патч спрятан куда-то вниз в одну строчку. Его надо было поднять на самый верх и выделить большими буквами :)
И, собственно, это главная фича, -O3 тут мало при чем, а в этой версии статьи патч спрятан куда-то вниз в одну строчку. Его надо было поднять на самый верх и выделить большими буквами :)
Более подробная статья: alisnic.net/blog/making-your-ruby-fly/
RVM вроде как для development environment, a в продакшане лучше самому из исходников собрать…
Вам же дали JRuby, пользуйтесь. Нет, хотим жрать говно.
Ну зачем же так грубо? JRuby актуален для проектов выше среднего и для него нужно минимум 1 Gb RAM, в то время как MRI прекрасно подходит для маленьких проектов и позволяет легко обходиться начальными тарифами VDS.
Нет, мы хотим огрести кучу геморняка с нативными либами. И не надо про экспериментальную поддержку в 1.7
Реквестирую такие же тесты для php и mysql.
Впрочем для mysql некие современные тесты с заточкой под Intel есть (gcc, не ICC) — vbtechsupport.com/715/, где то сильно лучше, где-то хуже. Интересные современные тесты с ICC.
В 2005ом были тесты ( www.mysqlperformanceblog.com/files/presentations/LinuxWorld2005-Intel.pdf ) которые чуть ли не в 2 раза показывали преимущество mysql, скомпилированного через ICC.
Впрочем для mysql некие современные тесты с заточкой под Intel есть (gcc, не ICC) — vbtechsupport.com/715/, где то сильно лучше, где-то хуже. Интересные современные тесты с ICC.
В 2005ом были тесты ( www.mysqlperformanceblog.com/files/presentations/LinuxWorld2005-Intel.pdf ) которые чуть ли не в 2 раза показывали преимущество mysql, скомпилированного через ICC.
А вы mysql тоже из исходников ставите? Gentoo?
Не понял сарказма.
Ради производительности всегда можно скачать сырцы и сделать ./configure, или даже собрать из них rpm с нужными оптимизациями.
Ради производительности всегда можно скачать сырцы и сделать ./configure, или даже собрать из них rpm с нужными оптимизациями.
Как всегда, вносят поправку требования к времени на развёртывание. Если у вас есть лишние 6 часов, можно и libreoffice собрать. А если в кластере два винчестера полетели, и нужно срочно две машины новые поднять, а ваш накатывающий скрипт собирает всё из исходников, то это не дело. Конечно можно заранее поднять свой репозиторий пакетов, собирать всё необходимое с оптимизациями, класть в него и поддерживать для используемых платформ, то это хороший вариант со всех точек зрения. Кроме той, что этим нужно заниматься.
Есть еще вот такие пакеты для убунты — Next Generation Ubuntu Ruby Packages, там свежие руби с патчами и там есть ruby-switch
заголовок желтоват
Очень впечатлен! Пересобрал с патчем от falcon, на MacBook Air многие операции (rake routes, запуск rspec тестов) стали объективно почти в 2 раза быстрее.
Проблема уже решена ребята! Теперь нужно просто обновить RVM.
Sign up to leave a comment.
Ruby на вашем сервере может работать в 2 раза медленее из-за RVM