LuaJIT как основа для сервера приложений - проблемы и...

Preview:

Citation preview

LuaJIT как основа для сервера приложенийИгорь Эрлих, IPONWEB

v0.3

Что такое LuaJIT• Среда исполнения для Lua 5.1, включающая в себя трассирующий

JIT-компилятор

Что такое LuaJIT• Среда исполнения для Lua 5.1, включающая в себя трассирующий

JIT-компилятор

• Работает существенно быстрее, чем официальный интерпретатор:x2-x4 без JIT-компиляцииx2-x100 с JIT-компиляцией

Что такое LuaJITРазвивается и поддерживается более десяти лет• 08/09/2005: первый публичный релиз 1.0.3• 14/05/2015: стабильный релиз 2.0.4• Ветка 2.1 в активной разработке

Что такое LuaJITБольшое количество пользователей и моделей применения

LuaJIT @ IPONWEB• Многопоточный веб-сервер

• Бизнес-логика на Lua

• x86_64 GNU/Linux

• LuaJIT 2.0.4 (стабильный релиз)

Проблема #1Ограничения по памяти

Ограничения по памятиСколько доступно управляемой памяти…

• В i686 GNU/Linux – 4GB

Ограничения по памятиСколько доступно управляемой памяти…

• В i686 GNU/Linux – 4GB

• В x86_64 GNU/Linux – 1GB???

Ограничения по памятиtypedef struct Mref { uint32_t ptr32;} Mref;

void *ptr = mmap((void *)MMAP_REGION_START, size, MMAP_PROT, MAP_32BIT|MMAP_FLAGS, -1, 0);

Ограничения по памятиКак справиться?• Снизить количество потоков

Ограничения по памятиКак справиться?• Снизить количество потоков• Перейти от потоков к процессам

Ограничения по памятиКак справиться?• Снизить количество потоков• Перейти от потоков к процессам• Вывести данные в неуправляемую память

Ограничения по памятиКак справиться?• Снизить количество потоков• Перейти от потоков к процессам• Вывести данные в неуправляемую память• Дождаться релиза v2.1

Проблема #2Сборка мусора

Сборка мусора• Mark’n’Sweep сборщик унаследован от Lua 5.1

Сборка мусора• Mark’n’Sweep сборщик унаследован от Lua 5.1• Инкрементальная, но не поддерживает поколения

Сборка мусора• Mark’n’Sweep сборщик унаследован от Lua 5.1• Инкрементальная, но не поддерживает поколения• До 30% производительности на реальных нагрузках!

Проблема #3Управление строками

Такая ситуация…

Управление строкамиhttp://myadsite.org/myhandler/creative_id=15365532&bidder_id=1http://myadsite.org/myhandler/creative_id=15365533&bidder_id=1http://myadsite.org/myhandler/creative_id=15365534&bidder_id=1http://myadsite.org/myhandler/creative_id=15365535&bidder_id=1http://myadsite.org/myhandler/creative_id=15365536&bidder_id=1http://myadsite.org/myhandler/creative_id=15365537&bidder_id=1http://myadsite.org/myhandler/creative_id=15365538&bidder_id=1......

Управление строкамиhttp://myadsite.org/myhandler/creative_id=15365532&bidder_id=1

Выводы• Основное преимущество LuaJIT – высокая скорость работы в

большинстве случаев (особенно в численных вычислениях)• Большое количество управляемой памяти (в смысле количества

объектов или их совокупного размера) может быть реальной проблемой• Много лексикографически похожих слов (URL, пути файловой

системы) – потенциальная DoS уязвимость

Ссылки• https://www.lua.org/• https://luajit.org/• https://github.com/LuaJIT/LuaJIT

• Or contact me:https://ru.linkedin.com/in/iaehrlic

Q&A

Recommended