0Pricing
Lua Academy · レッスン

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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. LuaJITアーキテクチャの概要
  2. JITフレンドリーなLuaの記述
  3. jit.pとperfによるプロファイリング
  4. ベンチマークパターン
← Lua Academyに戻る