SpiderMonkeyのインラインキャッシュ:単純なキャッシングを超えて

2025-09-14

この記事では、SpiderMonkey JavaScriptエンジンのインラインキャッシュ(IC)の実装について詳しく説明します。従来のキャッシングとは異なり、SpiderMonkeyのICは自己修正コード技術です。呼び出しサイトに一連のスタブを挿入し、入力タイプに基づいて効率的な実行パスを動的に選択します。最初の呼び出しはフォールバックパスを実行し、結果に基づいて対応するスタブを生成します。同じタイプの後続の呼び出しはキャッシュにヒットし、効率が大幅に向上します。この記事では、JavaScriptの加算を例にICの動作を説明し、SpiderMonkeyの最新のCacheIRアーキテクチャについても触れています。CacheIRは、異なるコンパイラ間でICを共有できるように、ICの詳細を抽象化します。

続きを読む

eBPF を使用した Firefox のメモリ割り当ての追跡

2025-05-31

著者は、eBPF(拡張バークレーパケットフィルタ)を使用して、FirefoxのJavaScriptエンジンであるSpiderMonkeyにおけるメモリ割り当てを追跡しました。最初の目的は、メモリ管理の最適化のために、頻繁に作成されるRootedオブジェクトのソースコードの位置を特定することでした。bpftraceツールとユーザープローブ(uprobe)を使用して、著者は`registerWithRootLists`関数を正常に追跡し、ustack関数を使用してコールスタック情報を取得しました。最終的に、著者はレポートを作成し、いくつかのバグレポートを提出しました。これにより、メモリ割り当てが最適化され、`registerWithRootLists`への数千万回もの呼び出しが削減されました。

続きを読む
開発