P4 programmeringsspråk

P4 programmeringsspråk
P4 är ett programmeringsspråk designat för att programmera regler för paketdirigering. Till skillnad från ett allmänt språk som C eller Python är P4 ett domänspecifikt språk med ett antal design optimerade för nätverksrouting.

P4 är ett språk med öppen källkod som licensierats och underhålls av en ideell organisation som heter P4 Language Consortium. Det stöds också av Open Networking Foundation (ONF) och Linux Foundation (LF), två av de största paraplyorganisationerna för nätverksprojekt med öppen källkod.
Språket myntades ursprungligen 2013 och beskrivs i en 2014 SIGCOMM CCR-tidning med titeln "Protocol Independent, Packet Routing Processor Programming."

Sedan starten har P4 växt och utvecklats exponentiellt och snabbt blivit en standard för att beskriva överföring av paket av nätverksenheter, inklusive nätverksadaptrar, switchar och routrar.

"SDN har förändrat nätverksbranschen och P4 tar SDN till nästa nivå genom att föra programmerbarhet till routing", säger Guru Parulkar, verkställande direktör för Open Networking Foundation.

P4-språket skapades ursprungligen av en grupp ingenjörer och forskare från Google, Intel, Microsoft Research, Barefoot, Princeton och Stanford. Målet var enkelt: skapa ett lättanvänt språk som en mjukvaruutvecklare kunde lära sig på en dag och använda för att exakt beskriva hur paket skickas över nätverk.

Redan från början var P4 designad för att vara måloberoende (dvs ett program skrivet i P4 kunde kompileras oförändrat för att köras på en mängd olika mål som ASIC, FPGA, CPU, NPU och GPU).

Språket är också protokolloberoende (dvs ett P4-program kan beskriva befintliga standardprotokoll eller användas för att specificera nya anpassade adresseringslägen).

Inom industrin används P4 för enhetsprogrammering. Kanske kommer Internet-RFC- och IEEE-standarderna i framtiden också att omfatta P4-specifikationen.

P4 kan användas för både programmerbara och fasta funktionsenheter. Till exempel används den för att noggrant registrera switchpipelinebeteende i Switch Abstraction Interface (SAI) API:er som används av SONiC switch OS med öppen källkod. P4 används också i ONF Stratum-projektet för att beskriva växlingsbeteende över en mängd fasta och programmerbara enheter.

För första gången kan du genom att beskriva switchens och nätverksadaptrarnas beteende skapa en exakt körbar modell av hela nätverket före driftsättning. Stora molnleverantörer kan testa och felsöka nätverket helt med hjälp av mjukvara, vilket avsevärt minskar tiden och kostnaderna för interoperabilitetstestning i labbet utan att kräva dyr hårdvara.

Genom att använda P4 kan leverantörer av nätverksutrustning förvänta sig gemensamt underliggande routingbeteende för alla produkter, vilket möjliggör återanvändning av testinfrastruktur, förenklar utveckling av programvara för hantering och i slutändan säkerställer interoperabilitet.

Givetvis kan P4 användas för att skriva program som beskriver helt nya sätt att dirigera. Till exempel används P4 flitigt för telemetri och mätningar i datacenter, företags- och tjänsteleverantörsnätverk.

Forskarsamhället har också trappats upp. Flera ledande akademiska nätverksforskningsgrupper har publicerat spännande nya applikationer baserade på P4-program, inklusive lastbalansering, konsensusprotokoll och nyckelvärdescache. Ett nytt programmeringsparadigm skapas, innovation går från hårdvara till mjukvara, vilket gör att många oväntade, nya och geniala idéer kan dyka upp.

Utvecklargemenskapen har gett betydande bidrag till kodutveckling, inklusive kompilatorer, pipelines, beteendemodeller, API:er, testramar, applikationer och mer. Företag som Alibaba, AT&T, Barefoot, Cisco, Fox Networks, Google, Intel, IXIA, Juniper Networks, Mellanox, Microsoft, Netcope, Netronome, VMware, Xilinx och ZTE har dedikerade utvecklare; från universitet inklusive BUPT, Cornell, Harvard, MIT, NCTU, Princeton, Stanford, Technion, Tsinghua, UMass och USI; och öppen källkodsprojekt inklusive CORD, FD.io, OpenDaylight, ONOS, OvS, SAI och Stratum framhäver det faktum att P4 är ett oberoende samhällsprojekt.

Typisk generation av kontroller för P4-språket:

P4 programmeringsspråk

Ansökningsmöjligheter

P4 programmeringsspråk
Eftersom språket är avsett för routingapplikationer är listan över krav och designalternativ annorlunda jämfört med generella programmeringsspråk. Huvuddragen i språket är:

  1. Oberoende av målimplementering;
  2. Oberoende av det eller de protokoll som används;
  3. Fält omkonfigurerbarhet.

Oberoende av målimplementering

P4-program är designade för att vara implementeringsoberoende, vilket innebär att de kan kompileras för många olika typer av exekveringsmotorer, såsom processorer för allmänna ändamål, FPGA:er, system-on-chips, nätverksprocessorer och ASIC:er. Dessa olika typer av maskiner är kända som P4-mål, och varje mål kräver en kompilator för att konvertera P4-källkoden till en målväxelmodell. Kompilatorn kan byggas in i målenheten, extern programvara eller till och med en molntjänst. Eftersom många av de ursprungliga målen för P4-program var för enkel paketväxling, är det mycket vanligt att höra termen "P4-switch" även om "P4-mål" är mer exakt.

Oberoende av det eller de protokoll som används

P4 är protokolloberoende. Det betyder att språket inte har inbyggt stöd för vanliga protokoll som IP, Ethernet, TCP, VxLAN eller MPLS. Istället beskriver P4-programmeraren rubrikformaten och fältnamnen för de nödvändiga protokollen i programmet, som i sin tur tolkas och bearbetas av det kompilerade programmet och målenheten.

Fält omkonfigurerbarhet

Protokolloberoendet och abstrakt språkmodell möjliggör omkonfigurerbarhet – P4-mål ska kunna ändra paketbearbetning efter att systemet har distribuerats. Denna förmåga har traditionellt förknippats med routing genom processorer för allmänna ändamål eller nätverksprocessorer snarare än integrerade kretsar med fasta funktioner.

Även om det inte finns något i språket som skulle förhindra optimering av prestandan för en viss uppsättning protokoll, är dessa optimeringar osynliga för språkförfattaren och kan i slutändan minska flexibiliteten hos systemet och målen och deras omkonfigurerbarhet.

Dessa egenskaper hos språket fastställdes ursprungligen av dess skapare med fokus på dess utbredda användning i nätverksinfrastruktur.

Språket används redan i många företag:

1) Hyperskala datacenter;

Det kinesiska företaget Tencent är det största investeringsbolaget i världen och ett av de största riskkapitalföretagen. Tencents dotterbolag, både i Kina och i andra länder runt om i världen, är specialiserade på olika områden inom högteknologisk verksamhet, inklusive olika internettjänster, utveckling inom området artificiell intelligens och elektronisk underhållning.

P4 och programmerbar routing är avancerad teknik som används i företagets nätverksarkitektur.

Som en av upphovsmännen är Google stolta över att notera den snabba introduktionen av P4 i nätverksindustrin och i synnerhet inom arkitektonisk design av datacenter.

2) Kommersiella företag;

Goldman Sachs drar fördel av att arbeta med öppen källkodsgemenskap och utveckla gemensamma standarder och lösningar för att förnya nätverksinfrastruktur och tillhandahålla bättre lösningar för kunder.

3) Produktion;

Hela nätverksbranschen skulle dra nytta av ett språk som P4 som unikt definierar vidarebefordran. Cisco tror också på att överföra sina produktlinjer för att använda detta språk.

Juniper Networks har inkluderat P4 och P4 Runtime i ett antal produkter och ger programmatisk åtkomst till Juniper inbyggda processor och dess programvarukod.

Ruijie Networks är en stark anhängare av P4 och de fördelar det medför för nätverk. Med P4 kan företaget skapa och leverera klassens bästa lösningar till en lång rad kunder.

4) Telekommunikationsleverantörer;

AT&T var en tidig användare av P4, en av de första som använde P4 för att definiera beteendet den ville se i sina nätverk, och att använda P4-programmerbara vidarebefordranenheter i sitt nätverk.

På Deutsche Telekom används språket för att prototyper av viktiga nätverksfunktioner som en del av Access 4.0-programmet.

5) Halvledarindustrin;

Språket gjorde det möjligt för Barefoot att implementera ett nytt paradigm för att leverera mjukvarufunktioner till nätverkets routingplan.

Xilinx var en av grundarna av P4.org och var aktivt involverad i utvecklingen av P4-språket och implementerade det i FPGA-baserade programmerbara plattformar för SmartNIC- och NFV-hårdvara, och släppte en av de första P416-kompilatorerna som en del av SDNet-designen.

6) Programvara.

VMware tror att P4 skapar enorm energi, innovation och gemenskap som driver en meningsfull och nödvändig transformation i nätverket. VMware har varit en del av denna industrirörelse sedan starten, eftersom en ny våg av innovation drivs av mjukvarubaserade tillvägagångssätt som utökar infrastrukturkapaciteten och implementerar den i de senaste produkterna.

Således är P4 ett måloberoende och protokolloberoende programmeringsspråk som används av industri och akademi för att unikt definiera paketroutingbeteende som ett program, som i sin tur kan kompileras för flera mål. Idag inkluderar målen hårdvaru- och mjukvaruswitchar, hypervisorswitchar, NPU, GPU, FPGA, SmartNIC och ASIC.

Huvuddragen i språket utökar avsevärt tillämpningsområdet och säkerställer dess snabba implementering i nätverksarkitekturer.

Komma igång

P4 är ett öppet projekt, all relevant information finns på hemsidan P4.org

Förvarslänk https://github.com/p4lang, där du kan få exempel på källkod och handledning.

plugin för Eclipse med P4-stöd, men vi kan rekommendera P4 Studio från Barefoot.

P4 programmeringsspråk

Låt oss titta på kärnans huvudsakliga abstraktioner:

Definiera rubriker — med deras hjälp bestäms protokollrubriker.

Rubrikdefinitionen anger:

  • beskrivning av paketformat och rubrikfältsnamn
  • fasta och variabla tillåtna fält

Till exempel

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

Parsers — deras uppgift är att analysera rubrikerna.

Följande parserexempel kommer att bestämma övergången av maskinens sluttillstånd från ett initialtillstånd till ett av två sluttillstånd:

P4 programmeringsspråk

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

Таблицы — innehåller maskintillstånd som länkar användarnycklar med åtgärder. Aktivitet — En beskrivning av hur förpackningen ska manipuleras.

Tabellerna innehåller tillstånd (definierade på förvaltningsnivå) för vidarebefordran av paket, beskriver Match-Action-enheten

Paketen matchas av:

  • Exakt matchning
  • Längsta prefixmatchning (LPM)
  • Trippelmatchning (maskering)

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

Alla möjliga åtgärder måste definieras i tabeller i förväg.

Åtgärder består av kod och data. Uppgifterna kommer från förvaltningsnivån (t.ex. IP-adresser/portnummer). Vissa, loop-fria primitiver kan anges direkt i handlingen, men antalet instruktioner måste vara förutsägbart. Därför kan åtgärder inte innehålla några loopar eller villkorliga uttalanden.

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-moduler — åtgärder för att skapa en söknyckel, söka i en tabell, utföra åtgärder.

Ett typiskt exempel på en modul visas i figuren:

P4 programmeringsspråk

Styrningsflöde — anger i vilken ordning Match-Action-moduler används. Detta är ett imperativt program som definierar logiken på hög nivå och Match-Action-sekvensen. Kontrollflödet länkar alla objekt genom att definiera kontrollnivån.

Externa föremål är specifika objekt med en tydligt definierad arkitektur och API-gränssnitt. Till exempel checksummaberäkning, register, räknare, räknare osv.

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
}

Metadata — Datastrukturer associerade med varje paket.

Det finns två typer av metadata:

  Anpassad metadata (tom struktur för alla paket)
    Du kan lägga vad du vill här
    Tillgänglig i hela pipelinen
    bekvämt att använda för dina egna syften, till exempel för att lagra ett pakethash

  Intern metadata - tillhandahålls av arkitekturen
    Ingångsport, utgångsport definieras här
    Tidsstämpel när paketet stod i kö, ködjup
    multicast-hash / multicast-kö
    Paketprioritet, paketets betydelse
    Utgångsportspecifikation (t.ex. utgångskö)

P4 kompilator

P4-kompilatorn (P4C) genererar:

  1. Dataplans körtid
  2. API för att hantera maskintillstånd i dataplanet

P4 programmeringsspråk

Exempel på en mjukvaruväxel i P4-språk

Källkoder kan laddas ner från förvaret.

p4lang/p4c-bm: skapar JSON-konfiguration för bmv2
p4lang/bmv2: en mjukvaruväxel som förstår bmv2-versionens JSON-konfigurationer

Bilden visar projektets sammanställningsdiagram:

P4 programmeringsspråk

Manipulationer med tabeller, läsregister, räknare:

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


Källkoden innehåller simple_switch_CLI-programmet för bekväm användning av mjukvaruväxlings-API.

Du kan ladda ner detta och andra exempel från förvaret.

P4 programmeringsspråk

PS Tidigt i somras tecknade Intel ett avtal om att förvärva Barefoot Networks i ett försök att snabbt möta behoven hos Hyperscale Cloud-användare. Som Navin Shenoy (executive vice president och general manager för Data Center Group på Intel Corporation) sa, kommer detta att tillåta Intel att ge större arbetsbelastningar och fler möjligheter för datacenterkunder.

Enligt min personliga åsikt bör vi inte glömma att Intel är ledande inom produktion av FPGA-chips och har en utmärkt Quartus-miljö. Det betyder att vi kan förvänta oss att med Intels ankomst kommer Barefoot inte bara att utöka sin produktlinje, utan även Quartus och P4 Studio kommer att få seriösa uppdateringar och tillägg till Toffino och Toffino 2-linjen.

Officiell medlem av P4-communityt - företag Faktorgrupp.

Källa: will.com

Lägg en kommentar