Upload
ontico
View
109
Download
8
Embed Size (px)
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