0Pricing
Lua Academy · Урок

Профилирование с jit.p и perf

Профилируйте код Lua с помощью jit.p, отмечайте горячие участки и сокращайте число выделений памяти.

«Профилирование с jit.p и perf» — бесплатный урок Lua Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Lua Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Lua Academy содержит 4 уроков всего.

Зачем нужно профилирование

Профилирование показывает, какие функции потребляют больше всего времени CPU. Без профилирования усилия по оптимизации часто направляются на код, который не является узким местом.

Встроенный профилировщик LuaJIT: jit.p

LuaJIT включает jit.p — профилировщик сэмплирования. Включить его можно из командной строки или внутри скрипта.

-- Command line:
luajit -jp=s script.lua
-- Or inside script:
require("jit.p").start("s")  -- sample at function level
-- ... code ...
require("jit.p").stop()

Режимы jit.p

Режимы: "s" — сэмплирование по функциям, "l" — сэмплирование по строкам, "i" — отображение интерпретатора и JIT. Вывод в файл: "-jp=s,output.txt".

Чтение вывода jit.p

В выводе показано процентное распределение затраченного времени. Сосредоточьтесь на нескольких первых узких местах.

-- Example output:
-- 40%  mymodule.hotLoop
-- 25%  table.sort
-- 15%  string.format
-- ...

jit.dump: подробности трассировок

require("jit.dump").on() выводит подробные сведения об IR и машинном коде для каждой скомпилированной трассировки. Используйте его, чтобы понять, что именно скомпилировал JIT.

Использование Linux perf

В Linux команда perf record -g luajit script.lua записывает стеки вызовов на уровне OS. Объедините её с perf report, чтобы получить пламенный граф.

Файлы карт LuaJIT и perf

LuaJIT может создавать файлы карт символов perf, чтобы в отчётах perf отображались имена функций Lua, а не необработанные адреса: luajit -jp=p script.lua.

os.clock для микроизмерений

Для быстрых тестов производительности измеряйте реальное время выполнения с помощью os.clock(). Повторите операцию много раз, чтобы усреднить погрешность измерений.

local function bench(fn, iters)
  local t0 = os.clock()
  for _ = 1, iters do fn() end
  return (os.clock() - t0) / iters
end

Выделение узких мест

После профилирования вынесите горячую функцию в минимальный автономный тест производительности. Так будет проще перебирать варианты оптимизации и проверять улучшения.

Влияние сборки мусора на профилирование

Паузы сборки мусора проявляются в профиле как всплески. Выполните измерения с отключённой сборкой мусора (collectgarbage("stop")), чтобы отделить время работы алгоритма от времени сборки мусора.

Рекомендации по профилированию

  • Профилируйте на реалистичных данных, а не на микроизмерениях.
  • Профилируйте сборки для выпуска, а не отладочные сборки.
  • Измеряйте производительность до и после каждого изменения.
  • Не оптимизируйте код, на который приходится <5% общего времени.

Вопрос о профилировании

Что измеряет режим "s" у jit.p?

Итоги: профилирование с jit.p и perf

Используйте jit.p для профилирования функций и строк на уровне Lua, jit.dump — для анализа JIT-трассировок, а Linux perf — для пламенных графов на уровне OS. Измеряйте, оптимизируйте и измеряйте снова.

Часто задаваемые вопросы

Урок «Профилирование с jit.p и perf» бесплатный?

Да — полный текст урока «Профилирование с jit.p и perf» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Lua Academy, подпишись на CoddyKit PRO. Курс Lua Academy содержит 4 уроков всего.

Чему я научусь в уроке «Профилирование с jit.p и perf»?

Профилируйте код Lua с помощью jit.p, отмечайте горячие участки и сокращайте число выделений памяти. Ты практикуешь Lua Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Lua Academy?

Предыдущий опыт не требуется. Lua Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Профилирование с jit.p и perf»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Lua Academy?

Да. Каждый урок Lua Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Обзор архитектуры LuaJIT
  2. Написание кода Lua, удобного для JIT
  3. Профилирование с jit.p и perf
  4. Шаблоны бенчмаркинга
← Назад к Lua Academy