С того момента, как было принято решение использовать язык Lua в качестве языка описания бизнес-логики в нашей платформе, прошло уже больше восьми лет. Проекты росли, данных становилось больше, возрастала нагрузка на сервера приложений. Со временем у нас накопился солидный багаж знаний о том, как устроен LuaJIT, с какими проблемами можно столкнуться при его использовании и как эти проблемы можно решать.
Я расскажу про то...
* Почему при миграции с x86 на x64 доступной памяти в LuaJIT становится меньше, и как мы с этим боролись.
* Как загрузить в LuaJIT несколько миллионов объектов и не умереть в тормозах от сборщика мусора.
* Насколько ужасна встроенная функция хеширования строк и почему иногда надо жертвовать производительностью в пользу качества.
2. Что такое LuaJIT
• Среда исполнения для Lua 5.1, включающая в себя трассирующий
JIT-компилятор
3. Что такое LuaJIT
• Среда исполнения для Lua 5.1, включающая в себя трассирующий
JIT-компилятор
• Работает существенно быстрее, чем официальный интерпретатор:
x2-x4 без JIT-компиляции
x2-x100 с JIT-компиляцией
4. Что такое LuaJIT
Развивается и поддерживается более десяти лет
• 08/09/2005: первый публичный релиз 1.0.3
• 14/05/2015: стабильный релиз 2.0.4
• Ветка 2.1 в активной разработке
13. Ограничения по памяти
Как справиться?
• Снизить количество потоков
• Перейти от потоков к процессам
• Вывести данные в неуправляемую память
14. Ограничения по памяти
Как справиться?
• Снизить количество потоков
• Перейти от потоков к процессам
• Вывести данные в неуправляемую память
• Дождаться релиза v2.1
18. Сборка мусора
• Mark’n’Sweep сборщик унаследован от Lua 5.1
• Инкрементальная, но не поддерживает поколения
• До 30% производительности на реальных нагрузках!
23. Выводы
• Основное преимущество LuaJIT – высокая скорость работы в
большинстве случаев (особенно в численных вычислениях)
• Большое количество управляемой памяти (в смысле количества
объектов или их совокупного размера) может быть реальной
проблемой
• Много лексикографически похожих слов (URL, пути файловой
системы) – потенциальная DoS уязвимость