Profilowanie za pomocą jit.p i perf
Proszę profilować kod Lua za pomocą jit.p, oznaczać gorące ścieżki i ograniczać alokacje.
Profilowanie za pomocą jit.p i perf to bezpłatna lekcja Lua Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Lua Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Lua Academy zawiera 4 lekcji w sumie.
Dlaczego profilować?
Profilowanie wskazuje, które funkcje zużywają najwięcej czasu procesora. Bez profilowania wysiłki optymalizacyjne często koncentrują się na kodzie, który nie jest wąskim gardłem.
jit.p: Wbudowany profiler LuaJIT
LuaJIT zawiera jit.p — profiler próbkowania. Można go włączyć z wiersza poleceń lub wewnątrz skryptu.
-- Command line:
luajit -jp=s script.lua
-- Or inside script:
require("jit.p").start("s") -- sample at function level
-- ... code ...
require("jit.p").stop()Tryby jit.p
Tryby: "s" — próbkowanie według funkcji, "l" — próbkowanie według wiersza, "i" — wyświetlanie kodu interpretera i JIT. Zapis do pliku: "-jp=s,output.txt".
Odczytywanie danych wyjściowych jit.p
Dane wyjściowe pokazują procentowy podział czasu wykonania. Należy skupić się na kilku najważniejszych wąskich gardłach.
-- Example output:
-- 40% mymodule.hotLoop
-- 25% table.sort
-- 15% string.format
-- ...jit.dump — szczegóły śladów
require("jit.dump").on() wyświetla szczegółowy kod IR i maszynowy dla każdego skompilowanego śladu. Służy do sprawdzenia, co dokładnie skompilował JIT.
Korzystanie z Linux perf
W systemie Linux polecenie perf record -g luajit script.lua przechwytuje stosy wywołań na poziomie systemu operacyjnego. Należy połączyć je z perf report, aby uzyskać wykres płomieniowy.
Pliki map LuaJIT + perf
LuaJIT może generować pliki map symboli perf, dzięki czemu raporty perf pokazują nazwy funkcji Lua zamiast surowych adresów: luajit -jp=p script.lua.
os.clock do mikrobenchmarków
Do szybkich benchmarków należy mierzyć czas rzeczywisty za pomocą os.clock(). Operację należy powtórzyć wiele razy, aby uśrednić szum pomiarowy.
local function bench(fn, iters)
local t0 = os.clock()
for _ = 1, iters do fn() end
return (os.clock() - t0) / iters
endIzolowanie wąskich gardeł
Po profilowaniu należy wyodrębnić gorącą funkcję do minimalnego, samodzielnego benchmarku. Ułatwia to iteracyjne wprowadzanie optymalizacji i sprawdzanie ich efektów.
Wpływ GC na profilowanie
Przerwy GC są widoczne w profilowaniu jako skoki. Aby oddzielić czas działania algorytmu od czasu GC, należy wykonać pomiar przy wyłączonym GC (collectgarbage("stop")).
Najlepsze praktyki profilowania
- Profilowanie należy wykonywać na realistycznych danych, a nie na mikrobenchmarkach.
- Należy profilować kompilacje wydaniowe, a nie debugowe.
- Po każdej zmianie należy wykonać pomiar przed nią i po niej.
- Nie należy optymalizować kodu, który zajmuje <5% całkowitego czasu.
Pytanie dotyczące profilowania
Co mierzy tryb "s" funkcji jit.p?
Podsumowanie: profilowanie za pomocą jit.p i perf
Należy używać jit.p do profilowania funkcji i wierszy na poziomie Lua, jit.dump do analizy śladów JIT, a systemu Linux perf do tworzenia wykresów płomieniowych na poziomie systemu operacyjnego. Należy mierzyć, optymalizować i ponownie mierzyć.
Często zadawane pytania
Czy lekcja „Profilowanie za pomocą jit.p i perf” jest bezpłatna?
Tak — pełny tekst „Profilowanie za pomocą jit.p i perf” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Lua Academy, przejdź na CoddyKit PRO. Kurs Lua Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Profilowanie za pomocą jit.p i perf”?
Proszę profilować kod Lua za pomocą jit.p, oznaczać gorące ścieżki i ograniczać alokacje. Ćwiczysz Lua Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Lua Academy?
Nie wymagamy żadnego doświadczenia. Lua Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Profilowanie za pomocą jit.p i perf”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Lua Academy?
Tak. Każda lekcja Lua Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Przegląd architektury LuaJIT
- Pisanie kodu Lua przyjaznego dla JIT
- Profilowanie za pomocą jit.p i perf
- Wzorce benchmarków