Programmeringsspråket P4

Programmeringsspråket P4
P4 — eit programmeringsspråk retta mot programmering av rutingreglar for pakkar. I motsetnad til generelle programmeringsspråk som C eller Python, er P4 eit domeneorientert språk med ei rekkje konstruksjonar som er optimaliserte for nettverksruting.

P4 er eit opensource-språk, lisensiert og støtta av ein ideell organisasjon kalla P4 Language Consortium. Det er også støtta av Open Networking Foundation (ONF) og Linux Foundation (LF) — to av dei største paraplyorganisasjonane innan opensource-prosjekt for nettverksteknologi.
Språket vart første gong utvikla i 2013 og beskrive i 2014 i dokumentet SIGCOMM CCR titulerte «Protokolluavhengig programmering av pakkarutingsprosessorar».

Sidan opprettinga har P4 auka eksponensielt og utvikla seg, og blitt ein standard for å beskrive pakkeoverføring på nettverksutstyr, inkludert nettverksadapterar, svitsjar og rutarar.

«SDN har omforma nettverksindustrien, og P4 tek SDN til eit nytt nivå ved å tilby programmérbart innhald innan ruting,» sa Guru Parulkar, administrerande direktør i Open Networking Foundation.

P4-språket vart først utvikla av ein gruppe ingeniørar og forskarar frå Google, Intel, Microsoft Research, Barefoot, Princeton og Stanford. Målet var enkelt: å lage eit brukervennleg språk som ei programvareutviklar kunne lære seg på ein dag, og bruke til nøyaktig å beskrive korleis pakkar vert rutet i nettverket.

Frå starten vart P4 utvikla som mål-uavhengig (dvs. eit program skreve i P4 kunne bli kompilert utan endringar for å bli utført på ulike mål, som ASIC, FPGA, CPU, NPU og GPU).

Språket er også protokoll-uavhengig (dvs. eit P4-program kan beskrive eksisterande standardprotokollar eller brukast til å spesifisere nye tilpassa adresseringsmodusar).

Innan industrien er P4 brukt til programmering av enheitar. Det kan vere at Internet-RFC og IEEE-standardar i framtida også vil inkludere spesifikasjonen av P4.

P4 kan användas både för programmerbara och för enhetslösningar med fasta funktioner. Det används till exempel för att exakt registrera beteendet hos switchens pipeline via API-gränssnitten i switchens abstraherade gränssnitt (SAI), som används av den öppna källkodens switch-operativsystem SONiC. P4 används också i ONF Stratum-projektet för att beskriva växlingen av beteendet genom många stationära och programmerbara enheter.

Beskrivningen av beteendet hos switchar och nätverksadapter möjliggör för första gången att skapa en exakt körbar modell av hela nätverket innan det sätts i drift. Stora molnleverantörer kan helt testa och felsöka nätverket med mjukvara, vilket avsevärt minskar tid och kostnader för att testa interaktioner i laboratoriet utan att kräva dyr hårdvara.

Genom att använda P4 kan nätverksutrustningstillverkare förlita sig på en gemensam grundläggande routingbeteende över alla produkter, vilket möjliggör återanvändning av testinfrastruktur, förenklar utvecklingen av hanteringsmjukvara och så småningom garanterar kompatibilitet.

Självklart kan P4 användas för att skriva program som beskriver helt nya sätt att routa. Till exempel används P4 ofta för telemetri och mätningar i datacenter, företagsnät och tjänsteleverantörer.

Forskningssamhället har också intensifierat sina insatser. Flera ledande akademiska forskargrupper inom nätverksteknik har publicerat intressanta nya tillämpningar baserade på P4-program, inklusive lastbalansering, samordnade protokoll och nyckelvärde-cache. En ny programmeringsparadigm skapas, där innovationer flyttas från hårdvara till mjukvara, vilket möjliggör en mängd oväntade, nya och geniala idéer.

Utviklersamfunnet har ytt betydelige bidrag til utviklingen av koden, inkludert kompilatorer, rørledningsprogrammer, atferdsmodeller, API-grensesnitt, testmiljøer, applikasjoner og mye mer. Dedikerte utviklere finnes i selskaper som Alibaba, AT&T, Barefoot, Cisco, Fox Networks, Google, Intel, IXIA, Juniper Networks, Mellanox, Microsoft, Netcope, Netronome, VMware, Xilinx og ZTE; fra universiteter som BUPT, Cornell, Harvard, MIT, NCTU, Princeton, Stanford, Technion, Tsinghua, UMass, og USI; og prosjekter med åpen kildekode, inkludert CORD, FD.io, OpenDaylight, ONOS, OvS, SAI og Stratum, understreker det faktum at P4 er et uavhengig samfunnsprosjekt.

Typisk generering av kontrollere for P4-språket:

Programmeringsspråket P4

Bruksområder

Programmeringsspråket P4
Ettersom språket er utviklet for rutingsapplikasjoner, er listen over krav og designalternativer forskjellig fra generelle programmeringsspråk. De viktigste funksjonene i språket inkluderer:

  1. Uavhengighet fra målimplementasjon;
  2. Uavhengighet fra protokoll(-er) som brukes;
  3. Feltkonfigurerbarhet.

Uavhengighet fra målimplementasjon

P4-programmer er utviklet slik at de ikke er avhengige av implementeringen, det vil si at de kan kompileres for mange forskjellige typer eksekveringsmaskiner, som generelle prosessorer, FPGA-er, systemer på brikken, nettverksprosessorer og ASIC-er. Disse forskjellige typer maskiner er kjent som P4-mål, og for hvert mål er det nødvendig med en kompilator for å konvertere P4-kildekoden til modellen for den målrettede svitsjen. Kompilatoren kan være innebygd i det målrettede enheten, eksterne programvare eller til og med en nettsky-tjeneste. Siden mange av de opprinnelige målene for P4-programmer ble brukt for enkel pakke-svitsjing, høres ofte termen "P4-svitsj" selv om bruken av "P4-mål" er mer korrekt.

Uavhengighet fra protokoll(-er) som brukes

P4 er uavhengig av protokoller. Dette betyr at språket ikke har innebygd støtte for vanlige protokoller som IP, Ethernet, TCP, VxLAN eller MPLS. I stedet beskriver P4-programmereren formatene på overskrifter og feltnavnene til de nødvendige protokollene i programmet, som deretter tolkes og behandles av det kompilerte programmet og det målrettede enheten.

Feltkonfigurerbarhet

Uavhengighet av protokoll og modellen for abstrakt språk tillater rekonfigurerbarhet — P4-målene må kunne endre pakkeprosessen etter at systemet er implementert. Denne muligheten har tradisjonelt vært knyttet til ruting gjennom allsidige prosessorer eller nettverksprosessorer, snarere enn integrerte kretser med faste funksjoner.

Selv om språket ikke har noe som hindrer optimalisering av ytelser til et bestemt sett av protokoller, er disse optimaliseringene usynlige for språkforfatteren og kan til slutt redusere systemets fleksibilitet og mål, samt deres rekonfigurerbarhet.

Disse egenskapene ved språket ble opprinnelig lagt inn av dets skapere med fokus på bredt samarbeid i nettverksinfrastrukturen.

Språket brukes allerede i mange selskaper:

1) Hyperskala datacentere;

Det kinesiske selskapet Tencent er verdens største investeringsselskap og en av de største risikokapitalaktørene. Datterselskapene til Tencent, både i Kina og i andre land, spesialiserer seg på forskjellige områder av høyteknologisk virksomhet, inkludert ulike internettjenester, kunstig intelligens-forskning og elektroniske underholdningstjenester.

P4 og programmerbar ruting er banebrytende teknologier som brukes i selskapets nettverksarkitektur.

Som en av skaperne, er Google stolt over den raske adopsjonen av P4 i nettverksindustrien, spesielt innen arkitektonisk design av datasentre.

2) Kommersiell virksomhet;

Goldman Sachs bringer allerede innovasjoner inn i nettverksinfrastrukturen ved å dra nytte av samarbeid med open-source-samfunnet og utviklingen av felles standarder og løsninger, som gir bedre løsninger for kundene.

3) Produksjon;

Hele nettverksindustrien vil dra nytte av et språk som P4, som klart definerer oppførselen ved videresending. Dette er også Cisco sin oppfatning, som tilpasser sine produktlinjer for å bruke dette språket.

Juniper Networks har inkludert P4 og P4 Runtime i flere produkter og gir programmatisk tilgang til Juniper sin innebygde prosessor og dens programvare.

Ruijie Networks er en aktiv forkjemper for P4 og fordelene det bringer til nettverk. Ved hjelp av P4 kan selskapet utvikle og levere førsteklasses løsninger til et bredt spekter av kunder.

4) Telekommunikasjonsleverandører;

AT&T var en av de første tilhengerne av P4, en av de første som brukte P4 for å definere atferd de ønsket å se i nettverk, og som bruker P4-programmerbare videresendingsenheter i sitt nettverk.

I Deutsche Telekom brukes språket til å prototype nøkkelfunksjoner i nettverket innenfor programmet Access 4.0.

5) Halvlederindustrien;

Språket har gjort det mulig å realisere en ny paradigme for programvareoverføring til nettverksruteflaten av Barefoot.

Xilinx var en av grunnleggerne av P4.org og deltok aktivt i utviklingen av P4-språket, og implementerte det i programmerbare plattformer basert på FPGA for SmartNIC- og NFV-utstyr, og lanserte en av de første P416-kompilatorene som en del av SDNet-designen.

6) Programvare.

VMware mener at P4 skaper enorm energi, innovasjon og et fellesskap som fører til betydelige og nødvendige transformasjoner i nettverket. VMware var opprinnelig en del av denne bransjebevegelsen, ettersom den nye bølgen av innovasjoner er drevet av programvaretilnærminger som utvider infrastrukturens muligheter og implementerer dette i de nyeste produktene.

Dermed er P4 et mål- og protokolluavhengig programmeringsspråk som brukes av industrien og det vitenskapelige samfunn for entydig å definere ruting av pakker som et program som igjen kan kompileres for flere mål. I dag inkluderer målene maskinvare- og programvarebrytere, hypervisor-brytere, NPUer, grafikkprosessorer, FPGAer, SmartNIC-er og ASIC-er.

Hovedtrekkene ved språket utvider bruksområdene betydelig og sikrer rask implementering i nettverksarkitekturer.

Hvordan komme i gang

P4 er et åpent prosjekt, all aktuell informasjon finnes på nettsiden P4.org

Link til repositoriet https://github.com/p4lang, hvor du kan få kildekodene til eksempler og opplæringsmaterialer.

Plugin for Eclipse med støtte for P4, men vi kan anbefale P4 Studio fra Barefoot.

Programmeringsspråket P4

La oss gå gjennom kjernens viktigste abstraksjoner:

Definisjon av overskrifter — ved hjelp av dem bestemmes protokolloverskriftene.

I definisjonen av overskriftene angis:

  • beskrivelse av pakkeformater og navn på overskriftsfelt
  • fastsatte og variable tillatte felt

For eksempel

hode Ethernet_h{
    bitdstAddr;
    bitsrcAddr;
    bitetherType;
}

hode IPv4_h{
    bitversion;
    bitihl;
    bitdiffserv;
    bittotalLen;
    bitidentification;
    bitflags;
    bitfragOffset;
    bitttl;
    bitprotocol;
    bithdrChecksum;
    bitsrcAddr;
    bitdstAddr;
    varbitoptions;
}

Parsellere — deres oppgave er å analysere overskriftene.

Det følgende eksemplet på en parser vil bestemme overgangen til sluttstate-maskinen fra en startstate til en av to sluttstate:

Programmeringsspråket 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;
        }
    }…
}

Tabeller — inneholder tilstander i maskinen som knytter bruker-nøkler til handlinger. Handlinger — beskrivelse av hvordan man skal manipulere pakken.

Tabeller inneholder tilstander (definert på administrativt nivå) for videresending av pakker, beskriver en handlingens enhet Match-Action

Pakker sammenlignes etter:

  • Nøyaktig samsvar
  • Den lengste Match med prefiks (LPM)
  • Tredobbelt samsvar (maskering)

table ipv4_lpm{
    leser{
        ipv4.dstAddr: lpm;
    } handlinger {
        viderekost();
    }
}

Alle mulige handlinger må defineres i tabeller på forhånd.

Handlingene består av kode og data. Dataene kommer fra det administrative nivået (for eksempel IP-adresser / portnumre). Bestemte, ikke-sirkulære primitive kan angis direkte i handlingen, men antallet kommandoer må være forutsigbart. Derfor kan handlingene ikke inneholde noen sløyfer eller betingede operatorer.

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

Moduler for Match-Action — handlinger for å lage en søkenøkkel, søke i tabellen, utføre handlinger.

Et typisk eksempel på en modul er vist i figuren:

Programmeringsspråket P4

Kontrollflyt — angir rekkefølgen for anvendelse av Match-Action-modulene. Dette er et imperativt program som definerer høy-nivå logikk og sekvens for Match-Action. Kontrollflyten binder alle objektene sammen og angir kontrollnivået.

Eksterne objekter — spesifikke objekter med klart definerte arkitekturer og API-grensesnitt. For eksempel kalkulering av sjekksum, registre, tellere, etc.

ekstern registrer{
    registrer(bit størrelse);
    void les(out T resultat, in bit indeks);
    void skriv(in bit indeks, in T verdi);
}

ekstern Checksum16{
  Checksum16();    //konstruktør
  void clear();    //forbered enhet for beregning
  void update(in T data);    //legg til data til sjekk-summen
  void remove(in T data);  //fjern data fra eksisterende sjekk-sum
  bitget(); //hent sjekk-summen for data lagt til siden siste klarering
}

Metadata — datastrukturer knyttet til hver pakke.

Det finnes 2 typer metadata:

  Brukermetadata (tom struktur for alle pakker)
    Du kan legge alt du vil her
    Tilgjengelig gjennom hele pipeline
    praktisk for bruk til egne formål, for eksempel lagring av pakke-hash

  Interne metadata — sikres av arkitekturen
    Inngangsport, utgangsport defineres her
    Tidsstempel for når pakken ble stilt i kø, dybde av køen
    multicast hash / multicast queue
    Packet priority, packet importance
    Output port specification (for example, output queue)

P4 compiler

The P4 compiler (P4C) generates:

  1. Data plane runtime
  2. API for managing state machines in the data plane

Programmeringsspråket P4

Example of a software switch in P4 language

The source codes can be downloaded from the repository.

p4lang/p4c-bm: creates a JSON configuration for bmv2
p4lang/bmv2: a software switch that understands JSON configurations of version bmv2

The figure shows the compilation scheme of the project:

Programmeringsspråket P4

Manipulations with tables, read registers, counters:

  • sett tabellstandard <table name> <action name> <action parameters>
  • legge_til <table name> <action name> <match fields> => &lt;aksjon
    parameters> [priority]
  • slette_tabell <table name> <entry handle>


The source codes include the simple_switch_CLI program for easy use of the software switch API.

You can download this and other examples from the repository.

Programmeringsspråket P4

P.S. At the beginning of summer, Intel signed an agreement to acquire Barefoot Networks, aiming to quickly meet the needs of Hyperscale Cloud users. As Navin Shenoy (executive vice president and general manager of the Data Center Group at Intel Corporation) stated — this will allow Intel to deliver larger workloads and more capabilities for data center customers.

In my personal opinion, it is important not to forget that Intel is a leader in FPGA chip manufacturing and has an excellent Quartus environment. This means we can expect that with Barefoot joining Intel, the company will not only expand its product line but also Quartus and P4 Studio are set for significant updates and the addition of Toffino and Toffino 2.

Official participant of the P4 community — the company Faktor gruppe.

Kilde: habr.com

Kjøp pålitelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere 🔥 Kjøp pålitelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere | ProHoster