Asayomu Tech
注目★★★★★Lobsters

libffiが引数配置を「プラン」として事前コンパイルし呼び出しを高速化

30秒で把握

  • 1libffiが引数配置を「プラン」としてキャッシュし再計算コストを削減
  • 23引数呼び出しで毎回発生していた約650命令のオーバーヘッドが解消
  • 3JITや実行可能メモリ不要・W^Xポリシー維持のまま高速化を確認

要約

libffiは関数シグネチャを実行時に解釈するインタープリタ型の関数呼び出しライブラリだが、毎回の呼び出しで引数配置を再計算する無駄が存在していた。x86-64の3引数呼び出しでは毎回約650命令のオーバーヘッドが発生し、その結果は常に同一だった。新たに「プラン」機構を導入し、引数の配置情報をフラットなバイトコード列として一度だけ計算・キャッシュする方式に変更した。全引数が64ビット汎用レジスタに収まる場合はthunkとして直接実行でき、ムーブループ自体もスキップされる。

あなたへの影響

RubyやPythonなどlibffiを多用するランタイムでは、頻繁なFFI呼び出しのオーバーヘッド削減につながり得る。

推奨:W^Xポリシーを維持したまま高速化できる点は、セキュリティ要件の厳しい環境での採用拡大につながり得るため、FFIを多用するプロジェクトでは将来の取り込みを追いたい。

詳細を読む → 元記事へ※ 本文は元記事をご確認ください (asayomu は要約のみ提供)

関連する記事

※ 外部記事の権利は原著作者に帰属します。著作権削除要請は copyright@asayomu.jp までご連絡ください(受領確認 24h・実処理 72h 以内)。