Mønstre for ytelsesmåling
Skriv pålitelige mikrobenchmark-tester med os.clock, og unngå vanlige fallgruver.
Mønstre for ytelsesmåling er en gratis leksjon i Lua Academy på CoddyKit. Dette er leksjon 4 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Lua Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Lua Academy inneholder totalt 4 leksjoner.
Hvorfor benchmarke?
Mikrobenchmarker måler ytelsen til et bestemt kodeutdrag isolert. De hjelper deg med å kontrollere at en optimalisering faktisk forbedrer hastigheten, uten å basere deg på magefølelsen.
Grunnleggende benchmarkmal
Legg koden i en løkke, mål veggklokketiden med os.clock(), og divider på antall iterasjoner.
local N = 1e6
local t0 = os.clock()
for i = 1, N do
-- code to benchmark
end
local elapsed = os.clock() - t0
print(("%.2f ns/op"):format(elapsed / N * 1e9))Oppvarmingskjøring
Kjør en oppvarmingsrunde før du tar tiden, slik at LuaJIT får kompilert sporene. Uten oppvarming inkluderer den første tidsmålte kjøringen kostnadene ved JIT-kompileringen.
for i = 1, 1000 do hotFunction(i) end -- warm up
local t0 = os.clock()
for i = 1, N do hotFunction(i) end
local elapsed = os.clock() - t0Forhindre eliminering av død kode
JIT kan optimalisere bort beregninger der resultatene ikke brukes. Akkumuler resultatene i en variabel for å sikre at benchmarken gir et riktig bilde.
local sum = 0
for i = 1, N do sum = sum + math.sin(i) end
print(sum) -- prevent eliminationSammenligne to tilnærminger
Benchmark alternative implementasjoner under identiske forhold. Kjør dem vekselvis eller flere ganger for å redusere støy fra operativsystemets prosessplanlegging.
local function approach1() -- ...
end
local function approach2() -- ...
end
local function bench(fn, n)
local t = os.clock()
for _ = 1, n do fn() end
return os.clock() - t
end
print("A:", bench(approach1, 1e5))
print("B:", bench(approach2, 1e5))Statistisk analyse
Kjør benchmarken flere ganger og beregn minimum, maksimum og median. Uteliggere fra GC-pauser eller prosessplanlegging i operativsystemet bør forkastes.
Benchmarking av minne
Mål minneallokering samtidig med tiden.
collectgarbage("collect")
local mem0 = collectgarbage("count")
-- ... run operation ...
collectgarbage("collect")
local mem1 = collectgarbage("count")
print(("Memory delta: %.1f KB"):format(mem1 - mem0))Unngå forstyrrelser fra GC
Stopp GC før tidsmålingen for å måle ren beregningstid. Start den igjen etterpå.
collectgarbage("stop")
local t0 = os.clock()
for i = 1, N do -- ... end
print(os.clock() - t0)
collectgarbage("restart")Realistiske benchmarker kontra mikrobenchmarker
Mikrobenchmarking optimaliserer små kodeutdrag, men gjenspeiler ikke nødvendigvis ytelsen i den virkelige verden. Kontroller alltid forbedringer mot en profilering av hele applikasjonen.
Benchmarkverktøy
Bygg et gjenbrukbart benchmark(name, fn, iters)-verktøy som skriver ut ensartede, formaterte resultater for alle benchmarkene dine.
local function benchmark(name, fn, iters)
iters = iters or 1e5
for _ = 1, iters // 10 do fn() end -- warm up
local t = os.clock()
for _ = 1, iters do fn() end
local ns = (os.clock() - t) / iters * 1e9
print(("%-30s %8.1f ns/op"):format(name, ns))
endBenchmarking i CI
Kjør benchmarker i CI for å oppdage ytelsesregresjoner. Varsle hvis en benchmark blir mer enn en definert terskel (for eksempel 10 %) dårligere.
Spørsmål om benchmarking
Hvorfor er en oppvarmingsrunde viktig når du benchmarker LuaJIT-kode?
Oppsummering: Benchmarkmønstre
Bruk en oppvarmingsrunde, forhindre eliminering av død kode ved å bruke resultatene, mål med os.clock(), kontroller GC, og kjør flere forsøk for stabile målinger. Bygg et gjenbrukbart benchmarkverktøy for å sikre konsistens.
Lær deg Lua med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 40
- Leksjoner
- 159
Ofte stilte spørsmål
Er leksjonen «Mønstre for ytelsesmåling» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Lua Academy, inkludert «Mønstre for ytelsesmåling», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Lua Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Mønstre for ytelsesmåling»?
Skriv pålitelige mikrobenchmark-tester med os.clock, og unngå vanlige fallgruver. Du øver på Lua Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Lua Academy?
Ingen tidligere erfaring er nødvendig. Lua Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.
Hvor lang tid tar leksjonen «Mønstre for ytelsesmåling»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Lua Academy-leksjonen?
Ja. Alle Lua Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Oversikt over LuaJIT-arkitekturen
- Skrive JIT-vennlig Lua
- Profilering med jit.p og perf
- Mønstre for ytelsesmåling