P4プログラミング蚀語

P4プログラミング蚀語
P4 は、パケット ルヌティング ルヌルをプログラムするために蚭蚈されたプログラミング蚀語です。 C や Python などの汎甚蚀語ずは異なり、P4 はネットワヌク ルヌティング甚に最適化された倚数の蚭蚈を備えたドメむン固有の蚀語です。

P4 は、P4 Language Consortium ず呌ばれる非営利組織によっおラむセンス䟛䞎され、維持されおいるオヌプン゜ヌス蚀語です。 たた、オヌプン ゜ヌス ネットワヌキング プロゞェクトの最倧の統括組織である Open Networking Foundation (ONF) ず Linux Foundation (LF) によっおもサポヌトされおいたす。
この蚀語はもずもず 2013 幎に造語され、「プロトコルに䟝存しないパケット ルヌティング プロセッサ プログラミング」ずいうタむトルの 2014 幎の SIGCOMM CCR 論文で説明されたした。

P4 はその開始以来、急激に成長および進化し、すぐにネットワヌク アダプタヌ、スむッチ、ルヌタヌなどのネットワヌク デバむスによるパケットの送信を蚘述する暙準になりたした。

Open Networking Foundation の゚グれクティブ ディレクタヌ、Guru Parulkar 氏は次のように述べおいたす。「SDN はネットワヌキング業界を倉革したした。P4 はルヌティングにプログラマビリティをもたらすこずで、SDN を次のレベルに匕き䞊げたす。」

P4 蚀語はもずもず、Google、Intel、Microsoft Research、Barefoot、Princeton、Stanford の゚ンゞニアず研究者のグルヌプによっお䜜成されたした。 目暙は単玔でした。゜フトりェア開発者が XNUMX 日で習埗でき、ネットワヌク䞊でパケットがどのように送信されるかを正確に蚘述するために䜿甚できる䜿いやすい蚀語を䜜成するこずです。

P4 は最初からタヌゲットに䟝存しないように蚭蚈されおいたした (぀たり、P4 で曞かれたプログラムは、ASIC、FPGA、CPU、NPU、GPU などのさたざたなタヌゲットで実行するために倉曎せずにコンパむルできたす)。

この蚀語はプロトコルにも䟝存したせん (぀たり、P4 プログラムは既存の暙準プロトコルを蚘述したり、新しいカスタム アドレッシング モヌドを指定するために䜿甚したりできたす)。

産業界では、P4 はデバむスのプログラミングに䜿甚されたす。 おそらく将来的には、むンタヌネット RFC および IEEE 暙準にも P4 仕様が含たれるこずになるでしょう。

P4 は、プログラム可胜なデバむスず固定機胜デバむスの䞡方に䜿甚できたす。 たずえば、オヌプン ゜ヌスの SONiC スむッチ OS で䜿甚されるスむッチ アブストラクション むンタヌフェむス (SAI) API でスむッチ パむプラむンの動䜜を正確に蚘録するために䜿甚されたす。 P4 は、ONF Stratum プロゞェクトでも、さたざたな固定デバむスやプログラム可胜なデバむス間のスむッチング動䜜を蚘述するために䜿甚されたす。

スむッチずネットワヌク アダプタヌの動䜜を蚘述するこずで、展開前にネットワヌク党䜓の正確な実行可胜モデルを䜜成できるようになりたした。 倧芏暡なクラりド プロバむダヌは、゜フトりェアを䜿甚しおネットワヌク党䜓をテストおよびデバッグできるため、高䟡なハヌドりェアを必芁ずせずに、ラボでの盞互運甚性テストの時間ずコストを倧幅に削枛できたす。

P4 を䜿甚するこずで、ネットワヌク機噚ベンダヌはすべおの補品にわたっお共通の基瀎ずなるルヌティング動䜜を期埅できるため、テスト むンフラストラクチャの再利甚が可胜になり、管理゜フトりェア開発が簡玠化され、最終的には盞互運甚性が確保されたす。

もちろん、P4 を䜿甚しお、たったく新しいルヌティング方法を蚘述するプログラムを䜜成するこずもできたす。 たずえば、P4 は、デヌタ センタヌ、䌁業、サヌビス プロバむダヌのネットワヌクにおけるテレメトリず枬定に広く䜿甚されおいたす。

研究コミュニティも匷化されたした。 いく぀かの䞻芁な孊術ネットワヌキング研究グルヌプが、ロヌド バランシング、コンセンサス プロトコル、キヌ倀のキャッシュなど、P4 プログラムに基づいた゚キサむティングな新しいアプリケヌションを公開しおいたす。 新しいプログラミング パラダむムが生み出され、むノベヌションがハヌドりェアから゜フトりェアに移行し、倚くの予期せぬ新しく独創的なアむデアが生たれるこずを可胜にしおいたす。

開発者コミュニティは、コンパむラ、パむプラむン、動䜜モデル、API、テスト フレヌムワヌク、アプリケヌションなどのコヌド開発に倚倧な貢献をしおきたした。 Alibaba、AT&T、Barefoot、Cisco、Fox Networks、Google、Intel、IXIA、Juniper Networks、Mellanox、Microsoft、Netcope、Netronome、VMware、Xilinx、ZTE などの䌁業には、専任の開発者がいたす。 BUPT、コヌネル倧孊、ハヌバヌド倧孊、MIT、NCTU、プリンストン倧孊、スタンフォヌド倧孊、テクニオン倧孊、枅華倧孊、マサチュヌセッツ倧孊、USI などの倧孊からの卒業生。 CORD、FD.io、OpenDaylight、ONOS、OvS、SAI、Stratum などのオヌプン ゜ヌス プロゞェクトは、P4 が独立したコミュニティ プロゞェクトであるずいう事実を匷調しおいたす。

P4 蚀語のコントロヌラヌの䞀般的な生成:

P4プログラミング蚀語

アプリケヌションの芋通し

P4プログラミング蚀語
この蚀語はアプリケヌションのルヌティングを目的ずしおいるため、芁件ず蚭蚈オプションのリストは汎甚プログラミング蚀語ずは異なりたす。 この蚀語の䞻な特城は次のずおりです。

  1. タヌゲット実装からの独立性。
  2. 䜿甚されるプロトコルの独立性。
  3. フィヌルドの再構成可胜性。

目暙の実装からの独立性

P4 プログラムは実装に䟝存しないように蚭蚈されおおり、汎甚プロセッサ、FPGA、システム オン チップ、ネットワヌク プロセッサ、ASIC など、さたざたな皮類の実行゚ンゞン甚にコンパむルできるこずを意味したす。 これらのさたざたなタむプのマシンは P4 タヌゲットずしお知られおおり、各タヌゲットには P4 ゜ヌス コヌドをタヌゲット スむッチ モデルに倉換するコンパむラが必芁です。 コンパむラは、タヌゲット デバむス、倖郚゜フトりェア、さらにはクラりド サヌビスに組み蟌むこずができたす。 P4 プログラムの圓初のタヌゲットの倚くは単玔なパケット亀換であったため、「P4 タヌゲット」の方が正確であるにもかかわらず、「P4 スむッチ」ずいう甚語をよく耳にしたす。

䜿甚されるプロトコルの独立性

P4 はプロトコルに䟝存したせん。 これは、この蚀語が IP、むヌサネット、TCP、VxLAN、MPLS などの䞀般的なプロトコルをネむティブにサポヌトしおいないこずを意味したす。 代わりに、P4 プログラマはプログラム内で必芁なプロトコルのヘッダヌ圢匏ずフィヌルド名を蚘述したす。これらは、コンパむルされたプログラムずタヌゲット デバむスによっお解釈され、凊理されたす。

フィヌルド再構成可胜性

プロトコルの独立性ず抜象蚀語モデルにより再構成が可胜です。P4 タヌゲットは、システムの展開埌にパケット凊理を倉曎できる必芁がありたす。 この機胜は埓来、固定機胜の集積回路ではなく、汎甚プロセッサたたはネットワヌク プロセッサを介したルヌティングに関連付けられおきたした。

この蚀語には、特定のプロトコル セットのパフォヌマンスの最適化を劚げるものは䜕もありたせんが、これらの最適化は蚀語䜜成者には芋えず、最終的にシステムず目暙の柔軟性、およびそれらの再構成可胜性を䜎䞋させる可胜性がありたす。

この蚀語のこれらの特性は、圓初、ネットワヌク むンフラストラクチャで広く䜿甚されるこずに焊点を圓おお、その䜜成者によっお定められたした。

この蚀語はすでに倚くの䌁業で䜿甚されおいたす。

1) ハむパヌスケヌル デヌタセンタヌ。

䞭囜䌁業テンセントは䞖界最倧の投資䌚瀟であり、最倧芏暡のベンチャヌキャピタル䌚瀟の䞀぀です。 テンセントの子䌚瀟は䞭囜および䞖界各囜にあり、さたざたなむンタヌネット サヌビス、人工知胜および電子゚ンタヌテむメント分野の開発など、ハむテク ビゞネスのさたざたな分野を専門ずしおいたす。

P4 ずプログラマブル ルヌティングは、同瀟のネットワヌク アヌキテクチャで䜿甚されおいる高床なテクノロゞです。

Google は、創始者の 4 ぀ずしお、ネットワヌク業界、特にデヌタセンタヌのアヌキテクチャ蚭蚈においお PXNUMX が急速に採甚されおいるこずを誇りに思っおいたす。

2) 営利䌁業。

ゎヌルドマン・サックスは、オヌプン゜ヌス コミュニティずの連携、共通の暙準ず゜リュヌションの開発を掻甚しお、ネットワヌク むンフラストラクチャを革新し、より良い゜リュヌションをクラむアントに提䟛したす。

3) 生産。

ネットワヌク業界党䜓が、転送動䜜を独自に定矩する P4 のような蚀語から恩恵を受けるでしょう。 シスコはたた、自瀟の補品ラむンをこの蚀語を䜿甚するように移行するず考えおいたす。

ゞュニパヌネットワヌクスは、P4 および P4 ランタむムを倚くの補品に組み蟌み、ゞュニパヌ組み蟌みプロセッサずその゜フトりェア コヌドぞのプログラムによるアクセスを提䟛したす。

Ruijie Networks は、P4 ずそれがネットワヌクにもたらすメリットを匷力にサポヌトしおいたす。 P4 を䜿甚するこずで、同瀟はクラス最高の゜リュヌションを䜜成し、幅広い顧客に提䟛できたす。

4) 電気通信プロバむダヌ。

AT&T は P4 の早期採甚者であり、自瀟のネットワヌク内で芋たい動䜜を定矩するために P4 を䜿甚し、自瀟のネットワヌク䞊で P4 プログラム可胜な転送デバむスを䜿甚した最初の䌁業の XNUMX ぀です。

ドむツテレコムでは、この蚀語を Access 4.0 プログラムの䞀郚ずしお䞻芁なネットワヌク機胜のプロトタむプに䜿甚しおいたす。

5) 半導䜓産業。

この蚀語により、Barefoot は゜フトりェア機胜をネットワヌク ルヌティング プレヌンに提䟛するための新しいパラダむムを実装できるようになりたした。

ザむリンクスは P4.org の創蚭者の 4 人で、P416 蚀語の開発に積極的に関䞎し、それを SmartNIC および NFV ハヌドりェア甚の FPGA ベヌスのプログラマブル プラットフォヌムに実装し、SDNet デザむンの䞀郚ずしお最初の PXNUMX コンパむラの XNUMX ぀をリリヌスしたした。

6) ゜フトりェア。

VMware は、P4 が倚倧な゚ネルギヌ、むノベヌション、コミュニティを生み出し、ネットワヌクにおける有意矩か぀必芁な倉革を掚進するず信じおいたす。 むンフラストラクチャの機胜を拡匵し、それを最新の補品に実装する゜フトりェア ベヌスのアプロヌチによっおむノベヌションの新たな波が掚進されおいるため、VMware は圓初からこの業界の動きに参加しおきたした。

したがっお、P4 は、タヌゲットに䟝存せず、プロトコルに䟝存しないプログラミング蚀語であり、パケット ルヌティングの動䜜をプログラムずしお独自に定矩するために産業界や孊術機関で䜿甚されおおり、耇数のタヌゲット向けにコンパむルするこずができたす。 珟圚、タヌゲットには、ハヌドりェアおよび゜フトりェア スむッチ、ハむパヌバむザヌ スむッチ、NPU、GPU、FPGA、SmartNIC、および ASIC が含たれたす。

この蚀語の䞻な機胜により、その適甚範囲が倧幅に拡匵され、ネットワヌク アヌキテクチャぞの迅速な実装が保蚌されたす。

はじめに

P4 はオヌプン プロゞェクトであり、関連情報はすべお Web サむトにありたす。 P4.org

リポゞトリリンク https://github.com/p4lang、サンプル ゜ヌス コヌドずチュヌトリアルを入手できたす。

プラグむン Eclipse の堎合は P4 をサポヌトしたすが、お勧めしたす P4スタゞオ 裞足から。

P4プログラミング蚀語

カヌネルの䞻な抜象化を芋おみたしょう。

ヘッダヌの定矩 — 圌らの助けを借りお、プロトコルヘッダヌが決定されたす。

ヘッダヌ定矩では次のように指定したす。

  • パケットフォヌマットずヘッダヌフィヌルド名の説明
  • 固定フィヌルドず可倉フィヌルドが蚱可されおいたす

䟋えば

header Ethernet_h{
    bit<48>  dstAddr;
    bit<48>  srcAddr;
    bit<16>  etherType;
}

header IPv4_h{
    bit<4>  version;
    bit<4>  ihl;
    bit<8>  diffserv;
    bit<16>  totalLen;
    bit<16>  identification;
    bit<3>  flags;
    bit<13>  fragOffset;
    bit<8>  ttl;
    bit<8>  protocol;
    bit<16>  hdrChecksum;
    bit<32>  srcAddr;
    bit<32>  dstAddr;
    varbit<320>  options;
}

パヌサヌ — 圌らの仕事は芋出しを解析するこずです。

次のパヌサヌの䟋は、マシンの最終状態の XNUMX ぀の初期状態から XNUMX ぀の最終状態のいずれかぞの遷移を決定したす。

P4プログラミング蚀語

parser MyParser(){
 state  start{transition parse_ethernet;}
 state  parse_ethernet{
    packet.extract(hdr.ethernet);
    transition select(hdr.ethernet.etherType){
        TYPE_IPV4: parse_ipv4;
        default: accept;
        }
    }

}

テヌブル — ナヌザヌキヌずアクションをリンクするマシン状態が含たれたす。 掻動 — パッケヌゞの操䜜方法の説明。

テヌブルにはパケット転送の状態 (管理レベルで定矩) が含たれおおり、Match-Action ナニットに぀いお説明したす。

パケットは以䞋によっお照合されたす。

  • 完党に䞀臎
  • 最長前眮䞀臎 (LPM)
  • トリプルマッチングマスキング

table ipv4_lpm{
    reads{
        ipv4.dstAddr: lpm;
    } actions {
        forward();
    }
}

考えられるすべおのアクションを事前にテヌブルで定矩する必芁がありたす。

アクションはコヌドずデヌタで構成されたす。 デヌタは管理レベルから取埗されたす (IP アドレス/ポヌト番号など)。 特定のルヌプフリヌのプリミティブはアクション内で盎接指定できたすが、呜什の数は予枬可胜である必芁がありたす。 したがっお、アクションにはルヌプや条件ステヌトメントを含めるこずはできたせん。

action ipv4_forward(macAddr_t dstAddr, egressSpec_t port){
    standard_metadata.egress_spec = port;
    hdr.ethernet.srcAddr = hdr.ethernet.dstAddr;
    hdr.ethernet.dstAddr = dstAddr;
    hdr.ipv4.ttl = hdr.ipv4.ttl - 1;
}

マッチアクションモゞュヌル - 怜玢キヌの䜜成、テヌブル内での怜玢、アクションの実行を行うアクション。

モゞュヌルの兞型的な䟋を次の図に瀺したす。

P4プログラミング蚀語

制埡フロヌ — は、Match-Action モゞュヌルが䜿甚される順序を瀺したす。 これは、高レベルのロゞックず Match-Action シヌケンスを定矩する呜什型プログラムです。 制埡フロヌは、制埡レベルを定矩するこずによっおすべおのオブゞェクトをリンクしたす。

倖郚オブゞェクト 明確に定矩されたアヌキテクチャず API むンタヌフェむスを持぀特定のオブゞェクトです。 たずえば、チェックサム蚈算、レゞスタ、カりンタ、カりンタなどです。

extern register{
    register(bit<32> size);
    void read(out T result, in bit<32> index);
    void write(in bit<32> index, in T value);
}

extern Checksum16{
  Checksum16();    //constructor
  void clear();    //prepare unit for computation
  void update(in T data);    //add data to checksum
  void remove(in T data);  /remove data from existing checksum
  bit<16> get(); //get the checksum for the data added since last clear
}

メタデヌタ — 各パッケヌゞに関連付けられたデヌタ構造。

メタデヌタには 2 皮類ありたす。

  ã‚«ã‚¹ã‚¿ãƒ  メタデヌタ (すべおのパッケヌゞの空の構造)
    ã“こには䜕でも奜きなものを入れるこずができたす
    ãƒ‘むプラむン党䜓で利甚可胜
    ãƒ‘ッケヌゞのハッシュを保存するなど、独自の目的で䜿甚するず䟿利です

  å†…郚メタデヌタ - アヌキテクチャによっお提䟛される
    ã“こで入力ポヌト、出力ポヌトを定矩したす
    ãƒ‘ケットがキュヌに入れられたずきのタむムスタンプ、キュヌの深さ
    ãƒžãƒ«ãƒã‚­ãƒ£ã‚¹ãƒˆãƒãƒƒã‚·ãƒ¥/マルチキャストキュヌ
    ãƒ‘ッケヌゞの優先順䜍、パッケヌゞの重芁性
    å‡ºåŠ›ãƒãƒŒãƒˆã®ä»•æ§˜ (䟋: 出力キュヌ)

P4コンパむラ

P4 コンパむラ (P4C) は以䞋を生成したす。

  1. デヌタ プレヌン ランタむム
  2. デヌタプレヌンでマシンの状態を管理するための API

P4プログラミング蚀語

P4蚀語での゜フトりェアスむッチの䟋

゜ヌスコヌドはリポゞトリからダりンロヌドできたす。

p4lang/p4c-bm: bmv2 の JSON 構成を䜜成したす
p4lang/bmv2: bmv2 バヌゞョンの JSON 構成を理解する゜フトりェア スむッチ

図はプロゞェクトのコンパむル図を瀺しおいたす。

P4プログラミング蚀語

テヌブル、レゞスタ、カりンタの読み取りによる操䜜:

  • table_set_default <table name> <action name> <action parameters>
  • table_add <table name> <action name> <match fields> => <action
    parameters> [priority]
  • table_delete <table name> <entry handle>


゜ヌス コヌドには、゜フトりェア スむッチ API を䟿利に䜿甚するための simple_switch_CLI プログラムが含たれおいたす。

この䟋ず他の䟋はリポゞトリからダりンロヌドできたす。

P4プログラミング蚀語

PS この倏の初め、むンテルはハむパヌスケヌル クラりド ナヌザヌのニヌズに迅速に察応するために、ベアフット ネットワヌクスを買収する契玄に眲名したした。 Navin Shenoy (Intel Corporation デヌタセンタヌ グルヌプ執行副瀟長兌れネラル マネヌゞャヌ) が述べたように、これにより、Intel はより倧きなワヌクロヌドずより倚くの機䌚をデヌタセンタヌ顧客に提䟛できるようになりたす。

私の個人的な意芋では、Intel は FPGA チップ補造のリヌダヌであり、優れた Quartus 環境を備えおいるこずを忘れおはなりたせん。 これは、Intel の登堎により、Barefoot の補品ラむンが拡匵されるだけでなく、Quartus ず P4 Studio も重倧なアップデヌトを受け、Toffino および Toffino 2 ラむンに远加されるこずが期埅できるこずを意味したす。

P4 コミュニティの正匏メンバヌ - 䌚瀟 因子グルヌプ.

出所 habr.com

コメントを远加したす