jit.pとperfによるプロファイリング
jit.pでLuaコードをプロファイリングし、ホットパスに注釈を付け、アロケーションを減らします。
「jit.pとperfによるプロファイリング」はCoddyKit上の無料Lua Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLua Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Lua Academyコースには全4レッスンが含まれています。
なぜプロファイリングするのか
プロファイリングにより、CPU時間を最も消費している関数を特定できます。プロファイリングを行わないと、ボトルネックではないコードを最適化してしまうことがよくあります。
jit.p:LuaJIT組み込みプロファイラー
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ホットスポットを分離する
プロファイリング後、処理の負荷が高い関数を最小限の単独ベンチマークとして切り出します。これにより、最適化を繰り返し試し、改善を検証しやすくなります。
プロファイリングにおけるGCの影響
GCによる一時停止は、プロファイリング上でスパイクとして現れます。GCによる時間とアルゴリズム自体の時間を分けるには、GCを無効にして(collectgarbage("stop"))測定します。
プロファイリングのベストプラクティス
- マイクロベンチマークではなく、現実的なデータでプロファイリングします。
- デバッグビルドではなく、リリースビルドをプロファイリングします。
- 変更するたびに、変更前と変更後を測定します。
- 全体の実行時間の<5%しか占めないコードは最適化しないでください。
プロファイリングに関する質問
jit.pのモード"s"は何を測定しますか?
まとめ:jit.pとperfによるプロファイリング
Luaレベルの関数・行単位のプロファイリングにはjit.p、JITトレースの調査にはjit.dump、OSレベルのフレームグラフにはLinuxのperfを使用します。測定し、最適化し、もう一度測定してください。
よくある質問
「jit.pとperfによるプロファイリング」レッスンは無料ですか?
はい。「jit.pとperfによるプロファイリング」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Lua Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Lua Academyコースには全4レッスンが含まれています。
「jit.pとperfによるプロファイリング」で何を学びますか?
jit.pでLuaコードをプロファイリングし、ホットパスに注釈を付け、アロケーションを減らします。 ブラウザで直接実行するハンズオンコードでLua Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Lua Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLua Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「jit.pとperfによるプロファイリング」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLua Academyレッスンでコードを書いて実行できますか?
はい。すべてのLua Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- LuaJITアーキテクチャの概要
- JITフレンドリーなLuaの記述
- jit.pとperfによるプロファイリング
- ベンチマークパターン