Programmeringssprog P4

Programmeringssprog P4
P4 er et programmeringssprog designet til at programmere regler for pakkerouting. I modsætning til generelle formål sprog som C eller Python, er P4 et emneorienteret sprog med en række konstruktioner, der er optimeret til netværksrouting.

P4 er et open source-sprog, der licenseres og støttes af en non-profit organisation kaldet P4 Language Consortium. Det understøttes også af Open Networking Foundation (ONF) og Linux Foundation (LF) — to af de største paraplyorganisationer inden for open source-projekter i netværksteknologi.
Sproget blev oprindeligt opfundet i 2013 og beskrevet i 2014 i et SIGCOMM CCR-dokument med titlen "Protokol-uafhængig programmering af pakkerouting-processorer".

Siden sin oprettelse er P4 vokset eksponentielt og udviklet sig, hurtigt blevet en standard for beskrivelse af pakkeoverførsel i netværksenheder, herunder netværksadaptere, switche og rutere.

"SDN har transformeret netværksindustrien, og P4 bringer SDN til et nyt niveau ved at muliggøre programmérbarhed inden for routing," sagde Guru Parulkar, administrerende direktør for Open Networking Foundation.

P4-sproget blev oprindeligt skabt af en gruppe ingeniører og forskere fra Google, Intel, Microsoft Research, Barefoot, Princeton og Stanford. Målet var enkelt: at skabe et brugervenligt sprog, som en softwareudvikler kunne lære på en dag og bruge til præcist at beskrive, hvordan pakker videresendes i netværket.

Fra starten blev P4 udviklet som en mål-uafhængig løsning (dvs. et program skrevet i P4 kunne kompileres uændret til at køre på forskellige mål som ASIC, FPGA, CPU, NPU og GPU).

Sproget er også protokol-uafhængigt (dvs. et P4-program kan beskrive eksisterende standardprotokoller eller bruges til at angive nye, tilpassede adresseringsmetoder).

I industrien anvendes P4 til programmering af enheder. Det er muligt, at fremtidige Internet-RFC'er og IEEE-standarder også vil inkludere P4-specifikationen.

P4 kan bruges både til programmerbare enheder og enheder med faste funktioner. For eksempel bruges det til at optage opførslen af en switch-pipeline i API-interface til switch abstraction interface (SAI), der anvendes af open-source switch-operativsystemet SONiC. P4 anvendes også i ONF Stratum-projektet til at beskrive switch-adfærd gennem en række faste og programmerbare enheder.

Beskrivelsen af switch- og netværksadapteradfærd gør det muligt for første gang at skabe en præcis eksekverbar model af hele netværket inden implementeringen. Store cloud-udbydere kan fuldt ud teste og fejlfinde netværket ved hjælp af software, hvilket markant reducerer tiden og omkostningerne ved at teste interaktioner i laboratoriet uden at kræve dyrt udstyr.

Ved at bruge P4 kan leverandører af netværksudstyr forvente ensartet grundlæggende routingadfærd på tværs af alle produkter, hvilket muliggør genbrug af testinfrastruktur, forenkler softwareudviklingen til administration og i sidste ende sikrer kompatibilitet.

Selvfølgelig kan P4 bruges til at skrive programmer, der beskriver helt nye måder at rute på. For eksempel bruges P4 i vid udstrækning til telemetri og målinger i datacentre, virksomhedsnetsværk og serviceudbydere.

Forskningssamfundet er også blevet mere aktivt. Flere førende akademiske forskningsgrupper inden for netværksteknologier har offentliggjort interessante nye anvendelser baseret på P4-programmer, herunder belastningsbalancering, koordinerede protokoller og nøgle-værdi caching. En ny programmeringsparadigme skabes, innovationer flyttes fra hardware til software, hvilket giver anledning til mange uventede, nye og geniale ideer.

Fællesskabet af udviklere har ydet et betydeligt bidrag til udviklingen af koden, herunder compilere, pipeline-programmer, adfærdsmønstre, API-grænseflader, testmiljøer, applikationer og meget mere. Dedikerede udviklere findes i virksomheder som Alibaba, AT&T, Barefoot, Cisco, Fox Networks, Google, Intel, IXIA, Juniper Networks, Mellanox, Microsoft, Netcope, Netronome, VMware, Xilinx og ZTE; fra universiteter inklusive BUPT, Cornell, Harvard, MIT, NCTU, Princeton, Stanford, Technion, Tsinghua, UMass, og USI; og projekter med åben kildekode, herunder CORD, FD.io, OpenDaylight, ONOS, OvS, SAI og Stratum, understreger det faktum, at P4 er et uafhængigt offentligt projekt.

Typisk controller-generation for P4-sproget:

Programmeringssprog P4

Anvendelsesmuligheder

Programmeringssprog P4
Da sproget er designet til routing-applikationer, er listen over krav og designmuligheder anderledes sammenlignet med generelle programmeringssprog. De vigtigste træk ved sproget inkluderer:

  1. Uafhængighed af den målrettede implementering;
  2. Uafhængighed af de anvendte protokoller;
  3. Konfigurerbarhed af felter.

Uafhængighed af den målrettede implementering

P4-programmer er designet således, at de ikke afhænger af implementeringen, hvilket betyder, at de kan kompilieres til mange forskellige typer udførelsesmaskiner som generelle processorere, FPGA'er, systemer på en chip, netværksprocessorer og ASIC'er. Disse forskellige typer maskiner kaldes P4-mål, og for hvert mål kræves der en compiler til at konvertere P4-kildekoden til modellen for den målsatte switch. Compileren kan være indbygget i målenheden, ekstern software eller endda en cloud-tjeneste. Da mange af de oprindelige mål for P4-programmer blev brugt til simpel pakke-svitsjning, hører man ofte termen 'P4-switch', selvom brugen af 'P4-mål' er mere korrekt.

Uafhængighed af de anvendte protokoller

P4 er uafhængig af protokoller. Dette betyder, at sproget ikke har indbygget støtte til almindelige protokoller såsom IP, Ethernet, TCP, VxLAN eller MPLS. I stedet beskriver P4-programmøren formater for overskrifter og navne for felterne af de krævede protokoller i programmet, som i sin tur fortolkes og behandles af den kompilere program og mål-enheden.

Konfigurerbarhed af felter

Uafhængighed af protokoller og modellen for et abstrakt sprog muliggør rekonfigurerbarhed — P4-mål skal have mulighed for at ændre pakkehåndtering efter systemets implementering. Denne mulighed har traditionelt været forbundet med routing via generelle processorer eller netværksprocessorer, snarere end integrerede kredsløb med faste funktioner.

Selvom sproget ikke indeholder noget, der kunne forhindre optimering af en bestemt sæt protokoller, er disse optimeringer usynlige for sprogets forfattere og kan i sidste ende reducere systemets fleksibilitet samt måls og deres rekonfigurerbarhed.

Disse karakteristika blev oprindeligt indarbejdet af sprogets skabere med henblik på udbredt anvendelse i netværksinfrastrukturen.

Sproget anvendes allerede nu i mange virksomheder:

1) Hyperskalerede datacentre;

Det kinesiske selskab Tencent er verdens største investeringsselskab og en af de største venturekapitalfirmaer. Tencent's datterselskaber, både i Kina og i andre lande, specialiserer sig i forskellige områder af den højteknologiske industri, herunder forskellige internetservices, udvikling inden for kunstig intelligens og elektroniske underholdninger.

P4 og programmerbar routing er avancerede teknologier, der anvendes i virksomhedens netværksarkitektur.

Som en af skaberne er Google stolt over den hurtige implementering af P4 i netværksindustrien, især inden for arkitektonisk design af datacentre.

2) Kommercielle virksomheder;

Goldman Sachs anvender fordelene ved samarbejde med open source-fællesskabet og udvikling af fælles standarder og løsninger til at bringe innovation til netværksinfrastrukturen og levere de bedste løsninger til kunderne.

3) Produktion;

Hele netværksindustrien vil drage fordel af et sprog som P4, der entydigt definerer opførslen af videresendelse. Dette er også Cisco's opfattelse, der flytter deres produktlinjer til brug af dette sprog.

Juniper Networks har inkluderet P4 og P4 Runtime i en række produkter og giver programmatisk adgang til Junipers indbyggede processorer og deres softwarekode.

Ruijie Networks er en aktiv fortalere for P4 og de fordele, det bringer til netværk. Med P4 kan virksomheden udvikle og levere topklasse løsninger til en bred vifte af kunder.

4) Telekommunikationsudbydere;

AT&T var en af de første fortalere for P4, og den første til at bruge P4 til at definere den adfærd, de ønskede at se i netværk, samt anvende P4-programmerbare omdirigeringsenheder i sit netværk.

I Deutsche Telekom bruges sproget til at prototypere nøglenetværksfunktioner i forbindelse med programmet Access 4.0.

5) Halvlederindustrien;

Sproget har gjort det muligt at implementere en ny paradigme for softwarekapaciteter i routingområdet af virksomheden Barefoot.

Xilinx var en af grundlæggerne af P4.org og har aktivt deltaget i udviklingen af P4-sproget og har implementeret det i programmerbare FPGA-baserede platforme for SmartNIC og NFV-udstyr, idet de lancerede en af de første P416-kompilatorer som en del af designet SDNet.

6) Software.

I VMware mener man, at P4 skaber enorm energi, innovation og et fællesskab, hvilket fører til betydningsfulde og nødvendige transformationer i netværket. VMware var oprindeligt en del af denne branchebevægelse, da den nye bølge af innovationer er drevet af softwaretilgange, der udvider kapabiliteterne i infrastrukturen og implementerer det i de nyeste produkter.

Således er P4 et mål- og protokol-uafhængigt programmeringssprog, der anvendes af industri og akademisk samfund til entydigt at definere netværkspakkers routingadfærd som et program, der igen kan kompileres til flere mål. I dag inkluderer målene hardware- og software-switches, hypervisor-switches, NPU'er, GPU'er, FPGA'er, SmartNIC'er og ASIC'er.

De vigtigste funktioner i sproget udvider betydeligt dets anvendelsesområder og muliggør en hurtig implementering i netværksarkitekturer.

Hvor skal man starte

P4 er et åbent projekt, al relevant information findes på hjemmesiden P4.org

Link til repository https://github.com/p4lang, hvor du kan få kildekoder til eksempler og undervisningsmaterialer.

Plugin for Eclipse med P4-understøttelse, men vi kan anbefale P4 Studio fra Bearfoot.

Programmeringssprog P4

Lad os se på de grundlæggende kernafstraktioner:

Definition af overskrifter — de bestemmer protokoloverskrifter.

I definitionen af overskrifter angives:

  • beskrivelse af pakkeformater og overskriftsfelternes navne
  • faste og variable tilladte felter

For eksempel

overskrift Ethernet_h{
    bitdstAddr;
    bitsrcAddr;
    bitetherType;
}

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

Parserne — deres opgave er at analysere overskrifterne.

Følgende eksempel på en parser vil bestemme overgangen fra en tilstand i maskinen fra en initial tilstand til en af to endelige tilstande:

Programmeringssprog P4

parser MinParser(){
 tilstand start{overgang parse_ethernet;}
 tilstand parse_ethernet{
    pakke.extract(hdr.ethernet);
    overgang vælg(hdr.ethernet.etherType){
        TYPE_IPV4: parse_ipv4;
        standard: accepter;
        }
    }…
}

Tabellerne — indeholder maskinens tilstande, der forbinder brugerens nøgler med handlinger. Handlinger — beskrivelse af, hvordan man skal manipulere med pakken.

Tabellerne indeholder tilstande (defineret på ledelsesniveau) for videresendelse af pakker, beskriver en Match-Action handling.

Pakkerne matches efter:

  • Præcist match
  • Det længste præfiks-match (LPM)
  • Triplet match (maskering)

table ipv4_lpm{
    læser{
        ipv4.dstAddr: lpm;
    } handlinger {
        videresend();
    }
}

Alle mulige handlinger skal defineres i tabellerne på forhånd.

Handlinger består af kode og data. Dataene kommer fra ledelsesniveauet (f.eks. IP-adresser / portnumre). Bestemte, ikke-cirkulære primitive kan angives direkte i handlingen, men antallet af kommandoer skal være forudsigeligt. Derfor kan handlinger ikke indeholde nogen løkker 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;
}

Match-Action moduler — handlinger for at skabe en søgenøgle, søge i tabellen, udføre handlinger.

Et typisk eksempel på et modul er vist på billedet:

Programmeringssprog P4

Kontrolflow — angiver rækkefølgen af anvendelsen af Match-Action modulerne. Dette er et imperativt program, der definerer høj-niveau logik og rækkefølgen af Match-Action. Kontrolflowet forbinder alle objekter og angiver kontrolniveauet.

Eksterne objekter — disse er specifikke objekter med klart defineret arkitektur og API-grænseflader. For eksempel beregning af checksums, registre, tællere, osv.

ekstern registrer{
    registrer(bit størrelse);
    void læs(ud T resultat, ind bit indeks);
    void skriv(ind bit indeks, ind T værdi);
}

ekstern Checksum16{
  Checksum16();    //konstruktør
  void clear();    //forbered enhed til beregning
  void update(in T data);    //tilføj data til checksum
  void remove(in T data);  //fjern data fra eksisterende checksum
  bitget(); //hent checksum for de data, der er tilføjet siden sidste clear
}

Metadata — datakonstruktioner, der er knyttet til hver pakke.

Der er 2 typer metadata:

  Brugerdefinerede metadata (tom struktur for alle pakker)
    Du kan lægge alt her, du ønsker
    Findes gennem hele pipeline
    praktisk til brug for egne formål, f.eks. til opbevaring af pakkehash

  Interne metadata — sikres af arkitekturen
    Indgangsport, udgangsport fastlægges her
    Tidsstempel, når pakken blev sat i kø, dybde af kø
    multicast hash / multicast queue
    Pakkeprioritet, pakkevigt
    Specifikation af udgangsport (f.eks. output queue)

P4-kompilator

R4-kompilator (P4C) genererer:

  1. Data plane runtime
  2. API til at styre maskinens tilstand i data plane

Programmeringssprog P4

Eksempel på en software-switch skrevet i P4

Kildekoderne kan downloades fra repository.

p4lang/p4c-bm: genererer JSON-konfiguration til bmv2
p4lang/bmv2: software-switch, der forstår JSON-konfigurationer af version bmv2

Diagrammet viser kompilering af projektet:

Programmeringssprog P4

Manipulationer med tabeller, læseregistre, tællere:

  • tabel_indstil_standard <table name> <action name> <action parameters>
  • tilføj tabel <table name> <action name> <match fields> => &lt;handlem
    parameters> [priority]
  • slet tabel <table name> <entry handle>


I kildeteksterne findes programmet simple_switch_CLI for nem brug af software-switchens API.

Dette og andre eksempler kan du downloade fra repository.

Programmeringssprog P4

P.S. I begyndelsen af sommeren underskrev Intel en aftale om at erhverve Barefoot Networks for hurtigt at imødekomme behovene fra Hyperscale Cloud-brugere. Som Navin Shenoy (executive vice president and general manager of the Data Center Group at Intel Corporation) har sagt — det vil give Intel mulighed for at levere større arbejdsbyrder og flere muligheder for datacenterkunder.

Efter min mening er det vigtigt at huske, at Intel er en førende producent af FPGA-chips og har et fantastisk miljø som Quartus. Det betyder, at med Barefoots indtræden i Intel kan man forvente, at produktlinjen ikke kun vil blive udvidet, men også at Quartus og P4 Studio venter betydelige opdateringer samt en ny serie af Toffino og Toffino 2.

Officiel deltager i P4-fællesskabet — firmaet Faktor grup.

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster