P4 programmeringsspråk

P4 programmeringsspråk
P4 er et programmeringsspråk designet for å programmere regler for pakkerouting. I motsetning til et generellt bruksspråk som C eller Python, er P4 et domenespesifikt språk med en rekke design optimert for nettverksruting.

P4 er et åpen kildekodespråk lisensiert og vedlikeholdt av en ideell organisasjon kalt P4 Language Consortium. Det er også støttet av Open Networking Foundation (ONF) og Linux Foundation (LF), to av de største paraplyorganisasjonene for åpen kildekode-nettverksprosjekter.
Språket ble opprinnelig laget i 2013 og beskrevet i et SIGCOMM CCR-dokument fra 2014 med tittelen "Protocol Independent, Packet Routing Processor Programming."

Siden oppstarten har P4 vokst og utviklet seg eksponentielt, og har raskt blitt en standard for å beskrive overføring av pakker av nettverksenheter, inkludert nettverksadaptere, svitsjer og rutere.

"SDN har transformert nettverksindustrien, og P4 tar SDN til neste nivå ved å bringe programmerbarhet til ruting," sa Guru Parulkar, administrerende direktør for Open Networking Foundation.

P4-språket ble opprinnelig laget av en gruppe ingeniører og forskere fra Google, Intel, Microsoft Research, Barefoot, Princeton og Stanford. Målet var enkelt: å lage et brukervennlig språk som en programvareutvikler kunne lære på en dag og bruke til å nøyaktig beskrive hvordan pakker sendes på tvers av nettverk.

Helt fra begynnelsen ble P4 designet for å være måluavhengig (dvs. et program skrevet i P4 kunne kompileres uendret for å kjøre på en rekke mål som ASICer, FPGAer, CPUer, NPUer og GPUer).

Språket er også protokolluavhengig (dvs. et P4-program kan beskrive eksisterende standardprotokoller eller brukes til å spesifisere nye tilpassede adresseringsmoduser).

I industrien brukes P4 til enhetsprogrammering. Kanskje i fremtiden vil Internet-RFC- og IEEE-standarder også inkludere P4-spesifikasjonen.

P4 kan brukes til både programmerbare og faste funksjonsenheter. Den brukes for eksempel til nøyaktig å registrere switch-pipeline-atferd i Switch Abstraction Interface (SAI) APIer som brukes av åpen kildekode SONiC-svitsj OS. P4 brukes også i ONF Stratum-prosjektet for å beskrive bytteatferd på tvers av en rekke faste og programmerbare enheter.

For første gang kan du ved å beskrive oppførselen til svitsjen og nettverkskortene lage en nøyaktig kjørbar modell av hele nettverket før distribusjon. Store skyleverandører kan teste og feilsøke nettverket utelukkende ved hjelp av programvare, noe som reduserer tiden og kostnadene for interoperabilitetstesting i laboratoriet betydelig uten å kreve dyr maskinvare.

Ved å bruke P4 kan leverandører av nettverksutstyr forvente felles underliggende rutingatferd på tvers av alle produkter, noe som tillater gjenbruk av testinfrastruktur, forenkler utvikling av programvare for administrasjon og til slutt sikre interoperabilitet.

P4 kan selvsagt brukes til å skrive programmer som beskriver helt nye måter å rutinge på. For eksempel er P4 mye brukt til telemetri og målinger i datasentre, bedrifts- og tjenesteleverandørnettverk.

Forskningsmiljøet har også trappet opp. Flere ledende akademiske nettverksforskningsgrupper har publisert spennende nye applikasjoner basert på P4-programmer, inkludert lastbalansering, konsensusprotokoller og caching av nøkkelverdier. Et nytt programmeringsparadigme blir skapt, innovasjon går fra maskinvare til programvare, og lar mange uventede, nye og geniale ideer dukke opp.

Utviklerfellesskapet har gitt betydelige bidrag til kodeutvikling, inkludert kompilatorer, pipelines, atferdsmodeller, APIer, testrammeverk, applikasjoner og mer. Selskaper som Alibaba, AT&T, Barefoot, Cisco, Fox Networks, Google, Intel, IXIA, Juniper Networks, Mellanox, Microsoft, Netcope, Netronome, VMware, Xilinx og ZTE har dedikerte utviklere; fra universiteter inkludert BUPT, Cornell, Harvard, MIT, NCTU, Princeton, Stanford, Technion, Tsinghua, UMass og USI; og åpen kildekode-prosjekter inkludert CORD, FD.io, OpenDaylight, ONOS, OvS, SAI og Stratum fremhever det faktum at P4 er et uavhengig samfunnsprosjekt.

Typisk generasjon av kontrollere for P4-språket:

P4 programmeringsspråk

Søknadsutsikter

P4 programmeringsspråk
Siden språket er beregnet på ruting av applikasjoner, er listen over krav og designalternativer annerledes sammenlignet med generelle programmeringsspråk. Hovedtrekkene til språket er:

  1. Uavhengig av målimplementering;
  2. Uavhengighet av protokollen(e) som brukes;
  3. Felt rekonfigurerbarhet.

Uavhengig av målimplementering

P4-programmer er designet for å være implementeringsuavhengige, noe som betyr at de kan kompileres for mange forskjellige typer utførelsesmotorer, for eksempel prosessorer for generelle formål, FPGA-er, system-på-brikker, nettverksprosessorer og ASIC-er. Disse forskjellige typene maskiner er kjent som P4-mål, og hvert mål krever en kompilator for å konvertere P4-kildekoden til en målsvitsjmodell. Kompilatoren kan bygges inn i målenheten, ekstern programvare eller til og med en skytjeneste. Fordi mange av de opprinnelige målene for P4-programmer var for enkel pakkeveksling, er det veldig vanlig å høre begrepet "P4-svitsj" selv om "P4-mål" er mer nøyaktig.

Uavhengighet av protokollen(e) som brukes

P4 er protokolluavhengig. 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 overskriftsformatene og feltnavnene til de nødvendige protokollene i programmet, som igjen tolkes og behandles av det kompilerte programmet og målenheten.

Felt rekonfigurerbarhet

Protokolluavhengigheten og den abstrakte språkmodellen gir mulighet for rekonfigurerbarhet – P4-mål skal kunne endre pakkebehandling etter at systemet er distribuert. Denne evnen har tradisjonelt vært assosiert med ruting gjennom prosessorer eller nettverksprosessorer for generelle formål i stedet for integrerte kretser med fast funksjon.

Selv om det ikke er noe i språket som hindrer optimalisering av ytelsen til et bestemt sett med protokoller, er disse optimaliseringene usynlige for språkforfatteren og kan til slutt redusere fleksibiliteten til systemet og målene og deres rekonfigurerbarhet.

Disse egenskapene til språket ble opprinnelig fastsatt av skaperne med fokus på dets utbredte bruk i nettverksinfrastruktur.

Språket brukes allerede i mange selskaper:

1) Hyperscale datasentre;

Det kinesiske selskapet Tencent er det største investeringsselskapet i verden og et av de største venturekapitalselskapene. Tencents datterselskaper, både i Kina og i andre land rundt om i verden, spesialiserer seg på ulike områder innen høyteknologisk virksomhet, inkludert ulike internettjenester, utvikling innen kunstig intelligens og elektronisk underholdning.

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

Будучи одним из создателей, Google с гордостью отмечает быстрое внедрение P4 в сетевой индустрии и, в частности, в сфере архитектурного проектирования ЦОД.

2) Kommersielle selskaper;

Goldman Sachs drar fordel av å jobbe med åpen kildekode-fellesskapet og utvikle felles standarder og løsninger for å innovere nettverksinfrastruktur og gi bedre løsninger for klienter.

3) Produksjon;

Hele nettverksbransjen vil dra nytte av et språk som P4 som unikt definerer videresendingsatferd. Cisco tror også på å overføre sine produktlinjer til å bruke dette språket.

Juniper Networks har inkludert P4 og P4 Runtime i en rekke produkter, og gir programmatisk tilgang til Juniper innebygde prosessor og dens programvarekode.

Ruijie Networks er en sterk tilhenger av P4 og fordelene det gir nettverk. Med P4 kan selskapet skape og levere klassens beste løsninger til et bredt spekter av kunder.

4) Telekommunikasjonsleverandører;

AT&T var en tidlig bruker av P4, en av de første som brukte P4 til å definere atferden den ønsket å se i sine nettverk, og til å bruke P4 programmerbare videresendingsenheter på nettverket.

Hos Deutsche Telekom brukes språket til å prototyper av nøkkelnettverksfunksjoner som en del av Access 4.0-programmet.

5) Halvlederindustri;

Язык позволил реализовать новую парадигму передачи возможностей программного обеспечения в плоскость маршрутизации сети компанией Barefoot.

Xilinx var en av grunnleggerne av P4.org og var aktivt involvert i utviklingen av P4-språket og implementerte det i FPGA-baserte programmerbare plattformer for SmartNIC- og NFV-maskinvare, og ga ut en av de første P416-kompilatorene som en del av SDNet-designet.

6) Programvare.

VMware mener at P4 skaper enorm energi, innovasjon og fellesskap som driver fram meningsfull og nødvendig transformasjon i nettverket. VMware har vært en del av denne bransjebevegelsen siden starten, ettersom en ny bølge av innovasjon er drevet av programvarebaserte tilnærminger som utvider infrastrukturkapasiteten og implementerer den i de nyeste produktene.

Dermed er P4 et måluavhengig og protokolluavhengig programmeringsspråk som brukes av industri og akademia for å unikt definere pakkeruting som et program, som igjen kan kompileres for flere mål. I dag inkluderer målene maskinvare- og programvaresvitsjer, hypervisor-svitsjer, NPU-er, GPU-er, FPGA-er, SmartNIC-er og ASIC-er.

Hovedtrekkene til språket utvider omfanget av applikasjonen betydelig og sikrer rask implementering i nettverksarkitekturer.

Hvor skal jeg begynne

P4 er et åpent prosjekt, all relevant informasjon ligger på nettsiden P4.org

Repository link https://github.com/p4lang, hvor du kan få eksempler på kildekode og opplæringsprogrammer.

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

P4 programmeringsspråk

La oss se på hovedabstraksjonene til kjernen:

Definere overskrifter — med deres hjelp bestemmes protokolloverskrifter.

Overskriftsdefinisjonen spesifiserer:

  • beskrivelse av pakkeformater og overskriftsfeltnavn
  • faste og variable tillatte felt

For eksempel

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

Parsere — deres oppgave er å analysere overskriftene.

Følgende parsereksempel vil bestemme overgangen til den endelige tilstanden til maskinen fra en initialtilstand til en av to slutttilstander:

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

Tabeller — inneholder maskintilstander som kobler brukernøkler med handlinger. Aktivitet — en beskrivelse av hvordan pakken skal manipuleres.

Tabellene inneholder tilstander (definert på administrasjonsnivå) for pakkevideresending, beskriver Match-Action-enheten

Pakker matches av:

  • Nøyaktig treff
  • Lengste prefiksmatch (LPM)
  • Trippelmatching (maskering)

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

Alle mulige handlinger må være definert i tabeller på forhånd.

Handlinger består av kode og data. Dataene kommer fra ledelsesnivået (f.eks. IP-adresser/portnumre). Visse, sløyfefrie primitiver kan spesifiseres direkte i handlingen, men antallet instruksjoner må være forutsigbart. Derfor kan ikke handlinger inneholde løkker eller betingede utsagn.

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 — handlinger for å lage en søkenøkkel, søke i en tabell, utføre handlinger.

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

P4 programmeringsspråk

Kontroller flyten — indikerer rekkefølgen Match-Action-moduler brukes i. Dette er et imperativt program som definerer logikken på høyt nivå og Match-Action-sekvensen. Kontrollflyten kobler sammen alle objekter ved å definere kontrollnivået.

Eksterne objekter er spesifikke objekter med en klart definert arkitektur og API-grensesnitt. For eksempel kontrollsumberegning, registre, tellere, tellere 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 knyttet til hver pakke.

Det er 2 typer metadata:

  Egendefinerte metadata (tom struktur for alle pakker)
    Du kan legge hva du vil her
    Tilgjengelig i hele rørledningen
    praktisk å bruke til dine egne formål, for eksempel for å lagre en pakkehash

  Interne metadata – levert av arkitekturen
    Inngangsport, utgangsport er definert her
    Tidsstempel når pakken ble satt i kø, kødybde
    multicast-hash / multicast-kø
    Pakkeprioritet, pakkeviktighet
    Utgangsportspesifikasjon (f.eks. utgangskø)

P4 kompilator

P4-kompilatoren (P4C) genererer:

  1. Datafly kjøretid
  2. API for å administrere maskintilstand i dataplanet

P4 programmeringsspråk

Eksempel på programvarebryter i P4-språk

Kildekoder kan lastes ned fra depotet.

p4lang/p4c-bm: oppretter JSON-konfigurasjon for bmv2
p4lang/bmv2: en programvaresvitsj som forstår bmv2-versjon JSON-konfigurasjoner

Figuren viser prosjektsammenstillingsdiagrammet:

P4 programmeringsspråk

Manipulasjoner med tabeller, leseregistre, tellere:

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


Kildekoden inneholder simple_switch_CLI-programmet for praktisk bruk av programvarebryterens API.

Du kan laste ned dette og andre eksempler fra depotet.

P4 programmeringsspråk

PS Tidlig i sommer signerte Intel en avtale om å kjøpe Barefoot Networks i et forsøk på å raskt møte behovene til Hyperscale Cloud-brukere. Som Navin Shenoy (konserndirektør og daglig leder for Data Center Group hos Intel Corporation) sa, vil dette tillate Intel å gi større arbeidsmengder og flere muligheter for datasenterkunder.

Etter min personlige mening bør vi ikke glemme at Intel er ledende innen produksjon av FPGA-brikker og den har et utmerket Quartus-miljø. Dette betyr at vi kan forvente at med ankomsten av Intel vil Barefoot ikke bare utvide sin produktlinje, men også Quartus og P4 Studio vil motta seriøse oppdateringer og tillegg til Toffino- og Toffino 2-linjen.

Offisielt medlem av P4-fellesskapet - selskap Faktorgruppe.

Kilde: www.habr.com

Legg til en kommentar