インストルメントコードから呼び出し • 大量のJavaScript関数の呼び出し Pros: ランタイムや実行方式に非依存な内部状態の取得(R1,2) Cons: インストルメンテーションによる大幅な性能低下(R3) Wasabi[3]:静的なインストルメントコード挿入手法 10 Wasm バイトコード 改変済Wasmバイトコード インストルメント コード挿入 解析用 JavaScript関数 解析関数 呼び出し … local.get $p1 local.get $p2 i32.add call $hoge … … call $analysis local.get $p1 call $analysis local.get $p2 call $analysis i32.add call $analysis call $hoge call $analysis … [3] Daniel Lehmann and Michael Pradel. Wasabi: A framework for dynamically analyzing webassembly. In Proceedings of the Twenty-Fourth International Conference on Architectural Support for Programming Languages and Operating Systems, ASPLOS ’19, p. 1045–1058, New York, NY, USA, 2019. Association for Computing Machinery.
計測対象の命令を置き換え • 対象外の命令はそのまま実行し 実行性能に与えるオーバヘッドを軽減 • 実行方式に依存 • インタプリタとJITコンパイルをサポート • 実行方式ごとに異なるインストルメンテーション機構 Wizardランタイム … local.get $p1 local.get $p2 i32.add call $hoge … … probe local.get $p2 probe call $hoge … インストルメンテーション 機構 インタプリタ向け 実装 JIT向け 実装 実行中に 命令を置き換え [4] Ben L. Titzer, Elizabeth Gilbert, Bradley Wei Jie Teo, Yash Anand, Kazuyuki Takayama, and Heather Miller. Flexible non-intrusive dynamic instrumentation for webassembly. In Proceedings of the 29th ACM International Conference on Architectural Support for Programming Languages and Operating Systems, Volume 3, ASPLOS ’24, p. 398–415, New York, NY, USA, 2024. Association for Computing Machinery.
• カーネル内動作で性能に与えるオーバヘッドを軽減 • ランタイムとアプリケーションの状態が混在 • アプリケーションの状態のみを取得する必要 • 実行方式に合わせて内部状態も変化 • アプリケーションの状態のみを取得するのは困難 OSプロセス OSカーネル Dtrace Wasm バイトコード Wasmランタイム [5] Bryan M. Cantrill, Michael W. Shapiro, and Adam H. Leventhal. Dynamic instrumentation of production systems. In 2004 USENIX Annual Technical Conference (USENIX ATC 04), Boston, MA, June 2004. USENIX Association.