注目★★★★★Lobsters
libffiが引数配置を「プラン」として事前コンパイルし呼び出しを高速化
30秒で把握
- 1libffiが引数配置を「プラン」としてキャッシュし再計算コストを削減
- 23引数呼び出しで毎回発生していた約650命令のオーバーヘッドが解消
- 3JITや実行可能メモリ不要・W^Xポリシー維持のまま高速化を確認
要約
libffiは関数シグネチャを実行時に解釈するインタープリタ型の関数呼び出しライブラリだが、毎回の呼び出しで引数配置を再計算する無駄が存在していた。x86-64の3引数呼び出しでは毎回約650命令のオーバーヘッドが発生し、その結果は常に同一だった。新たに「プラン」機構を導入し、引数の配置情報をフラットなバイトコード列として一度だけ計算・キャッシュする方式に変更した。全引数が64ビット汎用レジスタに収まる場合はthunkとして直接実行でき、ムーブループ自体もスキップされる。
あなたへの影響
RubyやPythonなどlibffiを多用するランタイムでは、頻繁なFFI呼び出しのオーバーヘッド削減につながり得る。
推奨:W^Xポリシーを維持したまま高速化できる点は、セキュリティ要件の厳しい環境での採用拡大につながり得るため、FFIを多用するプロジェクトでは将来の取り込みを追いたい。