Уведомления
Очистить всё

Ruby 4.0: сравнил YJIT и новый JIT на своём парсере логов

5 Сообщения
5 Пользователи
4 Реакции
331 Просмотры
kirill_spb
Сообщения: 27
Автор темы
Собрал свой gem разработчик инструментов
Присоединился: 4 года назад
[#107]

На январских обновил свой CLI для разбора логов на Ruby 4.0 и заодно сравнил JIT. Утилита на чистом Ruby, без Rails: читает файлы по 1-2 ГБ, регулярки, группировка в хэши. Прогон на одном и том же файле 1,4 ГБ, по пять запусков, беру медиану:

Ruby 3.4, без JIT   41,2 с
Ruby 3.4, YJIT      29,7 с
Ruby 4.0, без JIT   40,5 с
Ruby 4.0, YJIT      28,9 с
Ruby 4.0, ZJIT      35,6 с

Новый JIT на моей задаче пока заметно отстаёт от YJIT, хотя интерпретатор обгоняет. Включал флагами --yjit и --zjit. Кто-нибудь пробовал его на вебе?


4 ответа
TimurK62
Сообщения: 31
Читает чужие PR бэкенд-разработчик
Присоединился: 3 года назад

На вебе у меня вышло похоже: на нагрузочном тесте с YJIT медиана на 4.0 почти та же, что на 3.4, а новый JIT медленнее YJIT процентов на 15. Он молодой, устроен иначе, и сами разработчики пишут, что для прода рано. Я бы весь этот год оставался на YJIT и проверял новый на каждом минорном релизе.


Ответ
artem_67
Сообщения: 18
Пишет тесты разработчик на Go
Присоединился: 4 года назад

Самый быстрый вариант 29 секунд на 1,4 ГБ. На Go такая штука упирается в диск, секунды четыре. Без обид, просто для масштаба


Ответ
Максим О
Сообщения: 22
Собрал свой gem студент
Присоединился: 2 года назад

а для --zjit при сборке через rbenv что-то особое нужно? поставил 4.0, yjit работает, а на --zjit пишет, что такой опции нет


Ответ
1 ответ
armen_pet
Присоединился: 4 года назад

Собрал свой gem DevOps-инженер
Сообщения: 30

Новый JIT тоже написан на Rust, и ему нужна достаточно свежая версия компилятора. Если подходящего rustc при сборке не нашлось, ruby-build молча соберёт Ruby без него. Обнови rust и пересобери ту же версию с RUBY_CONFIGURE_OPTS=--enable-zjit и --force, тогда configure хотя бы честно скажет, чего не хватает.


Ответ