P4程式語言

P4程式語言
P4 是一種程式語言,旨在對資料包路由規則進行程式設計。 與 C 或 Python 等通用語言不同,P4 是一種特定於領域的語言,具有許多針對網路路由最佳化的設計。

P4 是一種開源語言,由名為 P4 語言聯盟的非營利組織授權和維護。 它還得到開放網路基金會 (ONF) 和 Linux 基金會 (LF) 的支持,這兩個基金會是開源網路專案最大的傘式組織。
該語言最初於 2013 年創造,並在 2014 年 SIGCOMM CCR 題為「協定無關,資料包路由處理器程式設計」的論文中進行了描述。

自誕生以來,P4 呈指數級增長和發展,迅速成為描述網路設備(包括網路適配器、交換器和路由器)傳輸資料包的標準。

開放網路基金會執行董事 Guru Parulkar 表示:“SDN 改變了網路產業,P4 透過為路由帶來可編程性,將 SDN 提升到了一個新的水平。”

P4 語言最初是由來自 Google、Intel、微軟研究院、Barefoot、普林斯頓大學和史丹佛大學的一群工程師和研究人員創建的。 目標很簡單:創建一種易於使用的語言,軟體開發人員可以在一天內學習並使用它來準確描述資料包如何透過網路發送。

從一開始,P4 就被設計為與目標無關(即用 P4 編寫的程式可以不加修改地編譯以在各種目標上運行,例如 ASIC、FPGA、CPU、NPU 和 GPU)。

該語言也是獨立於協定的(即,P4 程式可以描述現有的標準協定或用於指定新的自訂尋址模式)。

在工業上,P4用於設備編程。 也許將來的Internet-RFC和IEEE標準也將包括P4規範。

P4 可用於可編程和固定功能設備。 例如,它用於準確記錄開源 SONiC 交換器作業系統使用的交換器抽象介面 (SAI) API 中的交換器管道行為。 P4 也用於 ONF Stratum 專案來描述各種固定和可編程設備之間的開關行為。

描述交換器和網路介面卡的行為首次可讓您在部署之前建立整個網路的準確可執行模型。 大型雲端供應商可以完全使用軟體來測試和調試網絡,從而顯著減少實驗室互通性測試的時間和成本,而無需昂貴的硬體。

透過使用 P4,網路設備供應商可以期望在所有產品中實現通用的底層路由行為,從而允許重複使用測試基礎設施、簡化管理軟體開發並最終確保互通性。

當然,P4 可以用來寫出描述全新路由方式的程式。 例如,P4 廣泛用於資料中心、企業和服務提供者網路中的遙測和測量。

研究界也加大了力度。 幾個領先的學術網路研究小組已經發布了基於 P4 程序的令人興奮的新應用程序,包括負載平衡、共識協議和鍵值快取。 一種新的程式設計範式正在被創建,創新正在從硬體轉向軟體,允許許多意想不到的、新穎的和巧妙的想法出現。

開發者社群為程式碼開發做出了重大貢獻,包括編譯器、管道、行為模型、API、測試框架、應用程式等。 阿里巴巴、AT&T、Barefoot、思科、福斯網路、Google、英特爾、IXIA、瞻博網路、Mellanox、微軟、Netcope、Netronome、VMware、Xilinx 和中興等公司都有專門的開發人員; 北京郵電大學、康乃爾大學、哈佛大學、麻省理工學院、交大、普林斯頓大學、史丹佛大學、以色列理工學院、清華大學、麻省大學、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 很自豪地註意到 P4 在網路產業,特別是在資料中心架構設計中的快速採用。

2)商業公司;

高盛利用與開源社群合作、開發通用標準和解決方案的優勢,創新網路基礎設施,為客戶提供更好的解決方案。

3)生產;

整個網路產業將受益於像 P4 這樣唯一定義轉送行為的語言。 思科也相信將其產品線轉移到使用這種語言。

瞻博網路已將 P4 和 P4 Runtime 納入許多產品中,並提供對瞻博網路嵌入式處理器及其軟體程式碼的程式存取。

銳捷網路是P4及其為網路帶來的好處的堅定支持者。 借助 P4,該公司可以為廣大客戶創建並提供一流的解決方案。

4) 電信業者;

AT&T 是 P4 的早期採用者,也是最早使用 P4 來定義其希望在其網路中看到的行為並在其網路上使用 P4 可程式轉發設備的公司之一。

在德國電信,該語言被用來建立關鍵網路功能的原型,作為 Access 4.0 計畫的一部分。

5)半導體產業;

該語言使 Barefoot 能夠實現一種向網路路由平面提供軟體功能的新範例。

Xilinx 是P4.org 的創始人之一,積極參與P4 語言的開發,並將其實施到基於FPGA 的SmartNIC 和NFV 硬體可編程平台中,並作為SDNet 設計的一部分發布了首批P416 編譯器之一。

6)軟體。

VMware 相信 P4 創造了巨大的能量、創新和社區,正在推動網路中有意義且必要的變革。 VMware 從一開始就參與了這項行業運動,新一波的創新浪潮是由基於軟體的方法推動的,這些方法擴展了基礎架構功能並將其實施到最新產品中。

因此,P4 是一種獨立於目標和協定的程式語言,工業界和學術界使用它來唯一地將資料包路由行為定義為程序,而該程式又可以針對多個目標進行編譯。 如今,目標包括硬體和軟體交換器、管理程式交換器、NPU、GPU、FPGA、SmartNIC 和 ASIC。

該語言的主要特點顯著擴展了其應用範圍,並確保其在網路架構中的快速實現。

入門

P4是一個開放項目,所有相關資訊都在網站上 P4.org

儲存庫連結 https://github.com/p4lang,您可以在其中獲取範例原始程式碼和教程。

插件 對於支援 P4 的 Eclipse,但我們可以推薦 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;
}

解析器 ——他們的任務是解析頭條新聞。

以下解析器範例將確定機器的最終狀態從一種初始狀態到兩種最終狀態之一的轉換:

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;
        }
    }…
}

— 包含將使用者按鍵與操作連結的機器狀態。 行動 — 如何操作包的描述。

這些表包含封包轉送的狀態(在管理層級定義),描述比對操作單元

資料包透過以下方式匹配:

  • 完全符合
  • 最長前綴匹配 (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 模組的使用順序。 這是一個命令式程序,定義了高級邏輯和匹配動作序列。 控制流程透過定義控制層級來連結所有物件。

外部對象 是具有明確定義的架構和 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
}

元數據 — 與每個套件相關的資料結構。

有兩種類型的元資料:

  自訂元資料(所有套件的空結構)
    你可以在這裡放任何你想要的東西
    整個管道可用
    方便用於您自己的目的,例如,用於存儲包哈希

  內部元資料 - 由架構提供
    輸入埠、輸出埠在這裡定義
    資料包排隊時的時間戳記、佇列深度
    多播哈希/多播隊列
    包優先、包重要性
    輸出埠規格(例如輸出佇列)

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>


原始碼包含 simple_switch_CLI 程序,方便使用軟體開關 API。

您可以從儲存庫下載此範例和其他範例。

P4程式語言

聚苯乙烯 今年夏初,英特爾簽署了收購Barefoot Networks的協議,以期快速滿足超大規模雲端用戶的需求。 正如Navin Shenoy(英特爾公司執行副總裁兼資料中心事業部總經理)所說,這將使英特爾能夠為資料中心客戶提供更大的工作負載和更多機會。

在我個人看來,我們不應該忘記Intel是FPGA晶片生產的領導者,它擁有優秀的Quartus環境。 這意味著我們可以預期,隨著Intel的到來,Barefoot不僅會擴大其產品線,Quartus和P4 Studio也將在Toffino和Toffino 2系列上得到重大更新和補充。

P4社群正式會員-公司 因素組.

來源: www.habr.com

添加評論