Skip to main content
QUICK REVIEW

[論文レビュー] Gauntlet: Finding Bugs in Compilers for Programmable Packet Processing

Fabian Ruffy, Tao Wang|arXiv (Cornell University)|Jun 1, 2020
Software-Defined Networks and 5G参考文献 43被引用数 7
ひとこと要約

Gauntletは、P4 16コンパイラにおけるコンパイラバグを検出するために、ランダムなプログラム生成、自動翻訳検証、モデルベーステストを組み合わせたドメイン特化ツールである。P4C、P4の参照ソフトウェアスイッチ、Barefoot Tofinoバックエンドの3つにおいて、合計96件の異なるバグ(62件のクラッシュと34件の意味的問題)を発見した。そのうち54件は修正済みであり、現在はP4CのCIパイプラインに統合済みである。

ABSTRACT

Programmable packet-processing devices such as programmable switches and network interface cards are becoming mainstream. These devices are configured in a domain-specific language such as P4, using a compiler to translate packet-processing programs into instructions for different targets. As networks with programmable devices become widespread, it is critical that these compilers be dependable. This paper considers the problem of finding bugs in compilers for packet processing in the context of P4-16. We introduce domain-specific techniques to induce both abnormal termination of the compiler (crash bugs) and miscompilation (semantic bugs). We apply these techniques to (1) the open-source P4 compiler (P4C) infrastructure, which serves as a common base for different P4 back ends; (2) the P4 back end for the P4 reference software switch; and (3) the P4 back end for the Barefoot Tofino switch. Across the 3 platforms, over 8 months of bug finding, our tool Gauntlet detected 96 new and distinct bugs (62 crash and 34 semantic), which we confirmed with the respective compiler developers. 54 have been fixed (31 crash and 23 semantic); the remaining have been assigned to a developer. Our bug-finding efforts also led to 6 P4 specification changes. We have open sourced Gauntlet at p4gauntlet.github.io and it now runs within P4C's continuous integration pipeline.

研究の動機と目的

  • プログラマブルなパケット処理デバイスにおける信頼性の高いコンパイラの必要性を満たすため、現代のネットワークインfraストラクチャの根幹をなすものである。
  • P4のドメイン固有の制約(例:ループやポ인터の不在)を活用することで、一般言語向けのコンパイラバグ検出手法の限界を克服する。
  • P4コンパイラにおけるクラッシュバグおよび意味的バグを、スケーラブルで自動的かつ正確に検出する手法を開発する。
  • 継続的インテグレーション(CI)パイプラインにツールを統合し、コンパイラの正しさを継続的かつ自動的に検証できるようにする。

提案手法

  • P4の最小限の未定義動作に起因するシンプルなテスト生成を可能にするために、構文的に正しく型付きのP4プログラムをランダムに生成し、コンパイラのクラッシュを引き起こす。
  • 形式的意味論を用いた自動翻訳検証を適用し、コンパイルパス間の正しさを検証する。P4の限定的構文による有限かつ決定的プログラム同等性のおかげで、実現可能である。
  • 形式的意味論に基づいた入力出力パケットペアを生成することで、中間表現へのアクセスなしにブラックボックステストを実施するモデルベーステストを活用する。
  • 翻訳検証およびモデルベーステストを両立させるために、P4 16の形式的インタプリタおよび意味論を設計し、各コンパイルパスごとの手動検証に依存するのを減らす。
  • P4CのCIパイプラインにGauntletを統合し、継続的かつ自動化されたレグレッションテストを可能にし、レグレッションの早期検出を実現する。
  • ターゲット固有のexternを処理するための拡張モデルを提供するが、低レベルのハードウェア知識がなければ正確な意味論を確立するのは困難である。

実験結果

リサーチクエスチョン

  • RQ1P4のドメイン特化的制約を活用することで、一般言語と比較してコンパイラバグ検出を簡素化・自動化できるか?
  • RQ2P4のようなDSLにおいて、プログラム同等性が決定的であるにもかかわらず、自動翻訳検証をどれほど正確かつスケーラブルに実現できるか?
  • RQ3ランダムなプログラム生成、翻訳検証、モデルベーステストの組み合わせが、実際のP4コンパイラにおけるリアルワールドのバグをどれほど効果的に発見できるか?
  • RQ4このようなツールをCIパイプラインに統合することで、継続的検証を可能にし、長期的なコンパイラの信頼性を向上できるか?

主な発見

  • Gauntletは、P4コンパイラのバックエンド3種類(P4C、P4の参照ソフトウェアスイッチ、Barefoot Tofino)において、合計96件の新しいかつ異なるコンパイラバグを検出した(クラッシュバグ62件、意味的バグ34件)。
  • 報告された96件のバグのうち、54件(クラッシュバグ31件、意味的バグ23件)は修正済みであり、残りの42件は開発者に割り当てられ、解決を待っている。
  • このツールの影響により、P4仕様に6回の変更が加えられ、言語設計および標準化への影響を示している。
  • Gauntletは現在、P4Cの継続的インテグレーション(CI)パイプラインに統合されており、継続的かつ自動化されたレグレッションテストが可能になっている。
  • 本手法は、制限された意味論を持つドメイン特化言語が、正確で自動的かつスケーラブルなコンパイラ検証を可能にし、従来の一般言語向け手法の限界を克服できることを示している。
  • Gauntletの成功は、P4にとどまらず、同等の決定的意味論と限定された未定義動作を有する他のドメイン特化言語に対しても、同様の手法が一般化可能である可能性を示唆している。

より良い研究を、今すぐ始めましょう

論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。

クレジットカード登録不要

このレビューはAIが作成し、人間の編集者が確認しました。