Programmiersprache P4


P4 ist eine Programmiersprache zum Programmieren von Paketroutingregeln. Im Gegensatz zu einer Allzwecksprache wie C oder Python ist P4 eine domänenspezifische Sprache mit einer Reihe von Konstrukten, die für das Netzwerkrouting optimiert sind.

P4 ist eine Open-Source-Sprache, die von einer gemeinnützigen Organisation namens P4 Language Consortium lizenziert und unterstützt wird. Es wird auch von der Open Networking Foundation (ONF) und der Linux Foundation (LF) unterstützt, den beiden größten Dachorganisationen in Open Source-Netzwerkprojekten.
Die Sprache wurde ursprünglich 2013 geprägt und 2014 in einem SIGCOMM CCR-Dokument mit dem Titel „Protokollunabhängige Programmierung von Paketroutingprozessoren“ beschrieben.

Seit seiner Einführung ist P4 exponentiell gewachsen und hat sich schnell zum Standard für die Beschreibung der Paketübertragung durch Netzwerkgeräte, einschließlich Netzwerkadapter, Switches und Router, entwickelt.

"SDN hat die Netzwerkbranche verändert, und P4 bringt SDN auf die nächste Ebene und bietet Programmierbarkeit im Bereich Routing", sagte Guru Parulkar, Executive Director der Open Networking Foundation.

Die P4-Sprache wurde ursprünglich von einer Gruppe von Ingenieuren und Forschern aus Google, Intel, Microsoft Research, Barefoot, Princeton und Stanford erstellt. Das Ziel war einfach: Erstellen Sie eine benutzerfreundliche Sprache, die ein Softwareentwickler an einem Tag lernen kann, und beschreiben Sie damit genau, wie Pakete über das Netzwerk gesendet werden.

Von Anfang an war P4 so konzipiert, dass es unabhängig vom Ziel ist (d. H. Ein in P4 geschriebenes Programm konnte für verschiedene Zwecke wie ASIC, FPGA, CPU, NPU und GPU unverändert kompiliert werden).

Die Sprache ist auch protokollunabhängig (d. H. Das P4-Programm kann vorhandene Standardprotokolle beschreiben oder verwendet werden, um neue benutzerdefinierte Adressierungsmodi anzuzeigen).

In der Industrie wird P4 zum Programmieren von Geräten verwendet. Möglicherweise enthalten Internet-RFC- und IEEE-Standards in Zukunft auch die P4-Spezifikation.

P4 kann sowohl für programmierbare Geräte als auch für Geräte mit fester Funktion verwendet werden. Beispielsweise wird es verwendet, um das Verhalten der Switch-Pipeline in den vom Open-Source-SONiC-Switch-Betriebssystem verwendeten SAI-APIs (Switch Abstraction Interface) genau aufzuzeichnen. P4 wird auch im ONF Stratum-Projekt verwendet, um das Schaltverhalten für eine Vielzahl von festen und programmierbaren Geräten zu beschreiben.

Wenn Sie das Verhalten der Switch- und Netzwerkadapter zum ersten Mal beschreiben, können Sie vor der Bereitstellung ein genaues ausführbares Modell des gesamten Netzwerks erstellen. Große Cloud-Anbieter können das Netzwerk mithilfe von Software vollständig testen und debuggen, wodurch Zeit und Kosten für das Testen von Laborinteraktionen erheblich reduziert werden, ohne dass teure Geräte erforderlich sind.

Mit P4 können sich Anbieter von Netzwerkgeräten auf ein gemeinsames, grundlegendes Routing-Verhalten für alle Produkte verlassen, das die Wiederverwendung der Testinfrastruktur ermöglicht, die Entwicklung von Verwaltungssoftware vereinfacht und letztendlich die Interoperabilität sicherstellt.

Natürlich kann P4 verwendet werden, um Programme zu schreiben, die völlig neue Routing-Methoden beschreiben. Beispielsweise wird P4 häufig für Telemetrie und Messungen in Rechenzentren, Unternehmensnetzwerken und Dienstanbietern verwendet.

Die Forschungsgemeinschaft hat sich ebenfalls intensiviert. Mehrere führende akademische Forschungsgruppen für Netzwerktechnologie haben interessante neue Anwendungen veröffentlicht, die auf P4-Programmen basieren, darunter Lastausgleich, konsistente Protokolle und Schlüsselwert-Caching. Es wird ein neues Programmierparadigma geschaffen, Innovationen wechseln von Hardware zu Software, wodurch viele unerwartete, neue und brillante Ideen entstehen.

Die Entwicklergemeinde hat wichtige Beiträge zur Codeentwicklung geleistet, darunter Compiler, Pipelines, Verhaltensmodelle, APIs, Testumgebungen, Anwendungen und mehr. Es gibt engagierte Entwickler bei Unternehmen wie Alibaba, AT & T, Barefoot, Cisco, Fox Networks, Google, Intel, IXIA, Juniper Networks, Mellanox, Microsoft, Netcope, Netronome, VMware, Xilinx und ZTE. von Universitäten, einschließlich BUPT, Cornell, Harvard, MIT, NCTU, Princeton, Stanford, Technion, Tsinghua, UMass und USI; Open-Source-Projekte wie CORD, FD.io, OpenDaylight, ONOS, OvS, SAI und Stratum unterstreichen die Tatsache, dass P4 ein unabhängiges Community-Projekt ist.

Typische P4-Reglergenerierung:



Anwendungsaussichten



Da die Sprache für Routing-Anwendungen vorgesehen ist, unterscheidet sich die Liste der Anforderungen und Entwurfsoptionen von den allgemeinen Programmiersprachen. Die Hauptmerkmale der Sprache sind:

  1. Unabhängigkeit von der Zielumsetzung;
  2. Unabhängigkeit der verwendeten Protokolle;
  3. Rekonfigurierbarkeit vor Ort.

Unabhängigkeit von der Zielimplementierung

P4-Programme sind implementierungsunabhängig konzipiert, dh sie können für viele verschiedene Arten von ausführenden Maschinen kompiliert werden, z. B. für Allzweckprozessoren, FPGAs, On-Chip-Systeme, Netzwerkprozessoren und ASICs. Diese verschiedenen Maschinentypen werden als P4-Ziele bezeichnet, und für jedes Ziel ist ein Compiler erforderlich, um den P4-Quellcode in das Ziel-Switch-Modell zu konvertieren. Der Compiler kann in das Zielgerät, externe Software oder sogar einen Cloud-Dienst eingebettet sein. Da viele der ursprünglichen Ziele für P4-Programme für die einfache Paketvermittlung verwendet wurden, können Sie häufig den Begriff "P4-Vermittlung" hören, auch wenn die Verwendung von "Ziel-P4" korrekter ist.

Unabhängigkeit der verwendeten Protokolle

P4 ist protokollunabhängig. Dies bedeutet, dass die Sprache keine integrierte Unterstützung für gängige Protokolle wie IP, Ethernet, TCP, VxLAN oder MPLS bietet. Stattdessen beschreibt der P4-Programmierer die Headerformate und Feldnamen der erforderlichen Protokolle im Programm, die wiederum vom kompilierten Programm und dem Zielgerät interpretiert und verarbeitet werden.

Rekonfigurierbarkeit vor Ort

Die Protokollunabhängigkeit und das abstrakte Sprachmodell ermöglichen eine Rekonfigurierbarkeit. P4-Ziele sollten in der Lage sein, die Verarbeitung von Paketen nach der Bereitstellung des Systems zu ändern. Diese Funktion wurde traditionell eher mit dem Routing über Allzweckprozessoren oder Netzwerkprozessoren als mit integrierten Schaltkreisen mit festen Funktionen in Verbindung gebracht.

Obwohl es keine Sprache gibt, die die Optimierung eines bestimmten Satzes von Protokollen verhindern könnte, sind diese Optimierungen für den Autor der Sprache unsichtbar und können letztendlich die Flexibilität des Systems und des Zwecks sowie deren Rekonfigurierbarkeit verringern.

Diese Merkmale der Sprache wurden ursprünglich von ihren Erstellern festgelegt, um sich an ihrer weit verbreiteten Verwendung in der Netzwerkinfrastruktur zu orientieren.

Die Sprache wird bereits in vielen Unternehmen verwendet:

1) Hyperscale-Rechenzentren;

Das chinesische Unternehmen Tencent ist die größte Investmentgesellschaft der Welt und eine der größten Risikokapitalgesellschaften. Tencent-Tochtergesellschaften in China und anderen Ländern der Welt sind auf verschiedene Bereiche des High-Tech-Geschäfts spezialisiert, darunter verschiedene Internetdienste, Entwicklungen auf dem Gebiet der künstlichen Intelligenz und elektronische Unterhaltung.

P4 und programmierbares Routing sind fortschrittliche Technologien, die in der Netzwerkarchitektur des Unternehmens verwendet werden.

Als einer der Entwickler ist Google stolz auf die rasche Einführung von P4 in der Netzwerkbranche und insbesondere im Bereich der architektonischen Gestaltung von Rechenzentren.

2) Handelsunternehmen;

Goldman Sachs nutzt die Zusammenarbeit mit der Open Source-Community und entwickelt gemeinsame Standards und Lösungen. Er bringt bereits Innovationen in die Netzwerkinfrastruktur und bietet den Kunden die besten Lösungen.

3) Produktion;

Die gesamte Netzwerkbranche wird von einer Sprache wie P4 profitieren, die das Verhalten der Anrufumleitung eindeutig definiert. Erwägen Sie auch in Cisco, die Produktlinien zu übertragen, um diese Sprache zu verwenden.

Juniper Networks hat die P4- und P4-Laufzeit in eine Reihe von Produkten aufgenommen und bietet programmgesteuerten Zugriff auf den eingebetteten Juniper-Prozessor und dessen Programmcode.

Ruijie Networks ist ein aktiver Unterstützer von P4 und dessen Vorteilen für Netzwerke. Mit P4 kann ein Unternehmen erstklassige Lösungen für eine Vielzahl von Kunden erstellen und liefern.

4) Telekommunikationsanbieter;

AT & T war einer der ersten Unterstützer von P4, einer der ersten, der P4 verwendete, um das Verhalten zu bestimmen, das in Netzwerken angezeigt werden sollte, und um programmierbare P4-Weiterleitungsgeräte in seinem Netzwerk zu verwenden.

Die Deutsche Telekom verwendet die Sprache, um wichtige Netzwerkfunktionen im Rahmen von Access 4.0 zu prototypisieren.

5) Halbleiterindustrie;

Die Sprache ermöglichte die Implementierung eines neuen Paradigmas für die Übertragung von Softwarefunktionen auf die Netzwerkrouting-Ebene durch Barefoot.

Xilinx war einer der Gründer von P4.org und beteiligte sich aktiv an der Entwicklung der P4-Sprache und implementierte sie in FPGA-basierten programmierbaren Plattformen für SmartNIC- und NFV-Geräte. Im Rahmen des SDNet-Designs wurde einer der ersten P4 16- Compiler veröffentlicht.

6) Software.

VMware glaubt, dass P4 enorme Energie, Innovation und eine Community schafft, die zu einer bedeutenden und notwendigen Transformation im Netzwerk führt. VMware war ursprünglich Teil dieser Branchenbewegung, da eine neue Innovationswelle von Softwareansätzen angetrieben wird, die die Fähigkeiten der Infrastruktur erweitern und in die neuesten Produkte implementieren.

Somit ist P4 eine zielunabhängige und protokollunabhängige Programmiersprache, die von der Industrie und der wissenschaftlichen Gemeinschaft verwendet wird, um das Verhalten des Paketroutings als Programm eindeutig zu bestimmen, das wiederum für verschiedene Zwecke kompiliert werden kann. Zu den heutigen Zielen gehören Hardware- und Software-Switches, Hypervisor-Switches, NPUs, GPUs, FPGAs, SmartNICs und ASICs.

Die Hauptmerkmale der Sprache erweitern den Anwendungsbereich erheblich und ermöglichen eine schnelle Implementierung in die Netzwerkarchitektur.

Wo soll ich anfangen?


P4 ist ein Open Source-Projekt, alle aktuellen Informationen finden Sie auf der P4.org- Website

Link zum Repository https://github.com/p4lang , wo Sie den Quellcode der Beispiele und Schulungsmaterialien erhalten.

Plugin für Eclipse mit P4-Unterstützung, aber wir können P4 Studio von Barefoot empfehlen.



Lassen Sie uns die Hauptabstraktionen des Kernels analysieren:

Definition von Headern - mit ihrer Hilfe werden Protokoll-Header definiert

Die Definition von Headern setzt:

  • Beschreibung der Paketformate und Headerfeldnamen
  • feste und variable erlaubte Felder

Zum Beispiel

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


Parser sind ihre Aufgabe, Header zu analysieren.

Das folgende Parser-Beispiel bestimmt den Übergang des Endzustands einer Maschine von einem Anfangszustand zu einem von zwei Endzuständen:



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


Tabellen - enthalten den Status des Computers, der Benutzerschlüssel mit Aktionen verknüpft. Aktionen - Eine Beschreibung, wie das Paket manipuliert werden soll.

Tabellen enthalten Zustände (auf Führungsebene definiert) zum Weiterleiten von Paketen, beschreiben die Einheit der Übereinstimmungsaktion

Der Paketabgleich erfolgt durch:

  • Genaue Übereinstimmung
  • Längste Übereinstimmung mit einem Präfix (LPM)
  • Triple Matching (Maskierung)

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


Alle möglichen Aktionen sollten im Voraus in den Tabellen definiert werden.

Aktionen bestehen aus Code und Daten. Daten kommen auf der Verwaltungsebene an (z. B. IP-Adressen / Portnummern). Bestimmte schleifenlose Grundelemente können direkt in Aktion angegeben werden, die Anzahl der Befehle muss jedoch vorhersehbar sein. Daher können Aktionen keine Schleifen oder bedingten Anweisungen enthalten.

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


Match-Action-Module - Aktionen zum Erstellen eines Suchschlüssels, zum Suchen in einer Tabelle und zum Ausführen von Aktionen.

Ein typisches Modulbeispiel ist in der Abbildung dargestellt:



Kontrollfluss - Gibt die Anwendungsreihenfolge der Match-Action-Module an. Dies ist ein zwingendes Programm, das Logik und Match-Action-Sequenz auf hoher Ebene definiert. Der Kontrollfluss verknüpft alle Objekte und legt die Kontrollebene fest.

Externe Objekte sind spezifische Objekte mit einer klar definierten Architektur und APIs. Zum Beispiel Prüfsummenberechnung, Register, Zähler, Zähler usw.

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
}

Metadaten sind die Datenstrukturen, die jedem Paket zugeordnet sind.

Es gibt zwei Arten von Metadaten:

Benutzerdefinierte Metadaten (leere Struktur für alle Pakete)
Hier können Sie alles platzieren, was Sie wollen
Überall in der Pipeline verfügbar
Praktisch für Ihren eigenen Gebrauch, um beispielsweise den Hash eines Pakets zu speichern

Interne Metadaten - von der Architektur bereitgestellt
Eingangsport, Ausgangsport sind hier definiert
Zeitstempel, wenn das Paket in die Warteschlange gestellt wurde, Warteschlangentiefe
Multicast-Hash / Multicast-Warteschlange
Paketpriorität, Paketbedeutung
Spezifikation des Ausgabeports (z. B. Ausgabewarteschlange)

Compiler P4


Der P4-Compiler (P4C) generiert:

  1. Laufzeit der Datenebene
  2. API zur Steuerung des Maschinenzustands in der Datenebene


Ein Beispiel für einen Software-Switch in P4


Quellcodes können aus dem Repository heruntergeladen werden.

p4lang / p4c-bm: Erstellt eine JSON-Konfiguration für bmv2
p4lang / bmv2: Ein Software-Switch, der JSON-Konfigurationen der BMV2-Version versteht

Die Abbildung zeigt das Projektzusammenstellungsdiagramm:



Manipulationen mit Tabellen, Leseregistern, Zähler:

  • 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>
  • 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>
  • 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>

Der Quellcode enthält das Programm simple_switch_CLI zur bequemen Verwendung der Software-Switch-API.

Sie können dieses und andere Beispiele im Repository herunterladen.



PS Im Frühsommer unterzeichnete Intel eine Vereinbarung zur Übernahme von Barefoot Networks mit dem Ziel, die Anforderungen von Hyperscale Cloud-Benutzern schnell zu erfüllen. Laut Navin Shenoy (Executive Vice President und General Manager der Data Center Group bei der Intel Corporation) wird Intel damit mehr Workloads und mehr Möglichkeiten für Kunden von Rechenzentren bieten können.

Vergessen Sie meiner persönlichen Meinung nach nicht, dass Intel führend in der Herstellung von FPGA-Chips ist und über eine hervorragende Quartus-Umgebung verfügt. Sie können also davon ausgehen, dass Barefoot mit dem Aufkommen von Intel nicht nur seine Produktlinie erweitern wird, sondern Quartus und P4 Studio auch ernsthafte Updates und Ergänzungen für die Toffino- und Toffino 2-Linie erhalten werden.

Das offizielle Mitglied der P4-Community ist Factor Group .

Source: https://habr.com/ru/post/de460439/


All Articles