LuaProfilerによるプロファイリング
LuaProfilerでコードを計測し、CPUのホットスポットと呼び出し回数を特定します。
「LuaProfilerによるプロファイリング」はCoddyKit上の無料Lua Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLua Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Lua Academyコースには全4レッスンが含まれています。
LuaProfiler とは
LuaProfiler は Lua 用のフックベースのプロファイラーです。関数の呼び出し回数と各関数の累積実行時間を記録し、最適化分析用のレポートを生成します。
LuaProfiler のインストール
LuaRocks から利用できます:luarocks install luaprofiler。または、ソースをプロジェクトに直接含めます。
プロファイラーの起動
プロファイラーの開始呼び出しと停止呼び出しでコードを囲みます。
local profiler = require("profiler")
profiler.start("profile.txt") -- output to file
-- ... your code ...
profiler.stop()レポートの読み方
レポートには、関数名、呼び出し回数、1 回あたりの時間、合計時間が表示されます。合計時間が長い関数に注目してください。
-- Example report:
-- function calls total_time avg_time
-- hotLoop 1000 0.850 s 0.850 ms
-- table.sort 200 0.120 s 0.600 ms
-- string.format 5000 0.090 s 0.018 ms特定のコードパスのプロファイリング
オーバーヘッドを減らし、レポートの対象を絞るために、コードの一部だけをプロファイリングします。
profiler.start()
doExpensiveOperation()
profiler.stop()
profiler.report("expensive_op.txt")代替案:debug.sethook によるカスタムプロファイラー
外部ライブラリを使わず、debug.sethook を使用して呼び出し回数を収集する最小限のプロファイラーを構築します。
local counts = {}
debug.sethook(function(event)
if event == "call" then
local info = debug.getinfo(2, "n")
local name = info.name or "?"
counts[name] = (counts[name] or 0) + 1
end
end, "c")
-- ... run code ...
debug.sethook()
for name, count in pairs(counts) do
print(count, name)
end関数の計測に使う os.clock
個々の関数の実行時間を手動で計測し、対象を絞った簡単なベンチマークを行います。
local function time(fn, ...)
local t = os.clock()
fn(...)
return os.clock() - t
end
print("myFunc took:", time(myFunc, arg1, arg2))LuaJIT のプロファイリングに使う jit.p
LuaJIT では、jit.p は本番環境でフックベースのプロファイラーより優れています。オーバーヘッドが小さく、JIT を考慮したサンプリングが可能です。
フレームグラフ
スタックサンプルを収集してフレームグラフを生成します。ツールには、PUC Lua 用の lua-flameprof と LuaJIT 用の jit.p + FlameGraph があります。フレームグラフは、CPU 使用量の呼び出し階層全体を示します。
テストスイートでのプロファイリング
ユニットテスト内でプロファイラーを実行し、パフォーマンスの低下を自動的に検出します。ホットスポット関数が時間のしきい値を超えないことをアサートします。
よくあるホットスポット
- ループ内での
..による文字列連結(table.concat を使用します)。 - 大きなテーブルに対する table.sort(より高速なアルゴリズムを検討します)。
- クロージャの頻繁な生成。
- 深いメタテーブル __index チェーン。
プロファイリングの確認
LuaProfiler のレポートには何が表示されますか?
まとめ:LuaProfiler によるプロファイリング
LuaProfiler またはカスタムの debug.sethook プロファイラーを使用して、呼び出し回数と実行時間を収集します。合計時間が長い関数に注目してください。LuaJIT では jit.p を優先します。呼び出し階層を可視化するにはフレームグラフを使用します。
よくある質問
「LuaProfilerによるプロファイリング」レッスンは無料ですか?
はい。「LuaProfilerによるプロファイリング」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Lua Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Lua Academyコースには全4レッスンが含まれています。
「LuaProfilerによるプロファイリング」で何を学びますか?
LuaProfilerでコードを計測し、CPUのホットスポットと呼び出し回数を特定します。 ブラウザで直接実行するハンズオンコードでLua Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Lua Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLua Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「LuaProfilerによるプロファイリング」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLua Academyレッスンでコードを書いて実行できますか?
はい。すべてのLua Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- debugライブラリ詳説
- MobDebugによるリモートデバッグ
- LuaProfilerによるプロファイリング
- コードカバレッジとテスト計測