P4 programmeringssprog

P4 programmeringssprog
P4 er et programmeringssprog designet til at programmere regler for pakkerouting. I modsætning til et almindeligt sprog som C eller Python, er P4 et domænespecifikt sprog med en række designs optimeret til netværksrouting.

P4 er et open source-sprog, der er licenseret og vedligeholdt af en non-profit organisation kaldet P4 Language Consortium. Det er også støttet af Open Networking Foundation (ONF) og Linux Foundation (LF), to af de største paraplyorganisationer for open source-netværksprojekter.
Sproget blev oprindeligt opfundet i 2013 og beskrevet i et 2014 SIGCOMM CCR-papir med titlen "Protocol Independent, Packet Routing Processor Programming."

Siden starten er P4 vokset og udviklet sig eksponentielt og er hurtigt blevet en standard til at beskrive transmission af pakker af netværksenheder, herunder netværksadaptere, switches og routere.

"SDN har transformeret netværksindustrien, og P4 tager SDN til næste niveau ved at bringe programmerbarhed til 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: skabe et brugervenligt sprog, som en softwareudvikler kunne lære på en dag og bruge til præcist at beskrive, hvordan pakker sendes på tværs af netværk.

Helt fra begyndelsen var P4 designet til at være måluafhængig (dvs. et program skrevet i P4 kunne kompileres uændret til at køre på en række forskellige mål såsom ASIC'er, FPGA'er, CPU'er, NPU'er og GPU'er).

Sproget er også protokoluafhængig (dvs. et P4-program kan beskrive eksisterende standardprotokoller eller bruges til at specificere nye brugerdefinerede adresseringstilstande).

I industrien bruges P4 til enhedsprogrammering. Måske vil Internet-RFC og IEEE standarder i fremtiden også omfatte P4-specifikationen.

P4 kan bruges til både programmerbare og faste funktionsenheder. For eksempel bruges det til nøjagtigt at registrere switch-pipeline-adfærd i Switch Abstraction Interface (SAI) API'er, der bruges af open source SONiC switch OS. P4 bruges også i ONF Stratum-projektet til at beskrive koblingsadfærd på tværs af en række faste og programmerbare enheder.

For første gang giver beskrivelsen af ​​switchens og netværksadapternes adfærd dig mulighed for at oprette en nøjagtig eksekverbar model af hele netværket før implementering. Store cloud-udbydere kan teste og debugge netværket udelukkende ved hjælp af software, hvilket reducerer tiden og omkostningerne ved interoperabilitetstest i laboratoriet betydeligt uden at kræve dyr hardware.

Ved at bruge P4 kan leverandører af netværksudstyr forvente fælles underliggende routingadfærd på tværs af alle produkter, hvilket muliggør genbrug af testinfrastruktur, forenkler udvikling af administrationssoftware og i sidste ende sikrer interoperabilitet.

P4 kan selvfølgelig bruges til at skrive programmer, der beskriver helt nye måder at dirigere på. For eksempel er P4 meget brugt til telemetri og målinger i datacentre, virksomheds- og tjenesteudbydernetværk.

Forskermiljøet er også gået op. Adskillige førende akademiske netværksforskningsgrupper har udgivet spændende nye applikationer baseret på P4-programmer, herunder belastningsbalancering, konsensusprotokoller og nøgleværdicaching. Et nyt programmeringsparadigme er ved at blive skabt, innovation bevæger sig fra hardware til software, hvilket tillader mange uventede, nye og geniale ideer at dukke op.

Udviklerfællesskabet har ydet betydelige bidrag til kodeudvikling, herunder compilere, pipelines, adfærdsmodeller, API'er, testrammer, applikationer og mere. Virksomheder som Alibaba, AT&T, Barefoot, Cisco, Fox Networks, Google, Intel, IXIA, Juniper Networks, Mellanox, Microsoft, Netcope, Netronome, VMware, Xilinx og ZTE har dedikerede udviklere; fra universiteter, herunder BUPT, Cornell, Harvard, MIT, NCTU, Princeton, Stanford, Technion, Tsinghua, UMass og USI; og open source-projekter, herunder CORD, FD.io, OpenDaylight, ONOS, OvS, SAI og Stratum fremhæver det faktum, at P4 er et uafhængigt samfundsprojekt.

Typisk generation af controllere til P4-sproget:

P4 programmeringssprog

Ansøgningsmuligheder

P4 programmeringssprog
Da sproget er beregnet til routing af applikationer, er listen over krav og designmuligheder anderledes sammenlignet med generelle programmeringssprog. Sprogets hovedtræk er:

  1. Uafhængighed af målimplementering;
  2. Uafhængighed af den eller de anvendte protokoller;
  3. Felt rekonfigurerbarhed.

Uafhængighed af målimplementering

P4-programmer er designet til at være implementeringsuafhængige, hvilket betyder, at de kan kompileres til mange forskellige typer af eksekveringsmotorer, såsom processorer til generelle formål, FPGA'er, system-on-chips, netværksprocessorer og ASIC'er. Disse forskellige typer maskiner er kendt som P4-mål, og hvert mål kræver en compiler for at konvertere P4-kildekoden til en målswitchmodel. Compileren kan indbygges i målenheden, ekstern software eller endda en skytjeneste. Fordi mange af de oprindelige mål for P4-programmer var til simpel pakkeskift, er det meget almindeligt at høre udtrykket "P4-switch", selvom "P4-mål" er mere præcist.

Uafhængighed af den eller de anvendte protokoller

P4 er protokoluafhængig. Det betyder, at sproget ikke har indbygget understøttelse af almindelige protokoller som IP, Ethernet, TCP, VxLAN eller MPLS. I stedet beskriver P4-programmøren header-formaterne og feltnavnene på de nødvendige protokoller i programmet, som igen fortolkes og behandles af det kompilerede program og målenheden.

Felt rekonfigurerbarhed

Protokoluafhængigheden og den abstrakte sprogmodel giver mulighed for rekonfigurerbarhed - P4-mål bør kunne ændre pakkebehandling, efter at systemet er implementeret. Denne evne har traditionelt været forbundet med routing gennem processorer til generelle formål eller netværksprocessorer i stedet for integrerede kredsløb med fast funktion.

Selvom der ikke er noget i sproget, der ville forhindre optimering af ydeevnen af ​​et bestemt sæt af protokoller, er disse optimeringer usynlige for sprogforfatteren og kan i sidste ende reducere fleksibiliteten af ​​systemet og målene og deres rekonfigurerbarhed.

Disse karakteristika ved sproget blev oprindeligt fastlagt af dets skabere med fokus på dets udbredte brug i netværksinfrastruktur.

Sproget bruges allerede i mange virksomheder:

1) Hyperskala datacentre;

Det kinesiske selskab Tencent er det største investeringsselskab i verden og et af de største venturekapitalfirmaer. Tencents datterselskaber, både i Kina og i andre lande rundt om i verden, har specialiseret sig i forskellige områder af højteknologisk virksomhed, herunder forskellige internettjenester, udvikling inden for kunstig intelligens og elektronisk underholdning.

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

Som en af ​​ophavsmændene er Google stolte af at bemærke den hurtige indførelse af P4 i netværksindustrien og i særdeleshed inden for datacenterarkitektonisk design.

2) Kommercielle virksomheder;

Goldman Sachs drager fordel af at arbejde med open source-fællesskabet og udvikle fælles standarder og løsninger til at innovere netværksinfrastruktur og levere bedre løsninger til kunder.

3) Produktion;

Hele netværksindustrien ville have gavn af et sprog som P4, der entydigt definerer videresendelsesadfærd. Cisco tror også på at overføre sine produktlinjer til at bruge dette sprog.

Juniper Networks har inkluderet P4 og P4 Runtime i en række produkter og giver programmatisk adgang til Juniper embedded processor og dens softwarekode.

Ruijie Networks er en stærk tilhænger af P4 og de fordele, det giver netværk. Med P4 kan virksomheden skabe og levere klassens bedste løsninger til en bred vifte af kunder.

4) Telekommunikationsudbydere;

AT&T var en tidlig adopter af P4, en af ​​de første til at bruge P4 til at definere den adfærd, den ønskede at se i sine netværk, og til at bruge P4 programmerbare videresendelsesenheder på sit netværk.

Hos Deutsche Telekom bruges sproget til at prototypesætte vigtige netværksfunktioner som en del af Access 4.0-programmet.

5) Halvlederindustrien;

Sproget gjorde det muligt for Barefoot at implementere et nyt paradigme til levering af softwarefunktioner til netværksroutingplanet.

Xilinx var en af ​​grundlæggerne af P4.org og var aktivt involveret i udviklingen af ​​P4-sproget og implementerede det i FPGA-baserede programmerbare platforme til SmartNIC- og NFV-hardware, og udgav en af ​​de første P416-kompilere som en del af SDNet-designet.

6) Software.

VMware mener, at P4 skaber enorm energi, innovation og fællesskab, der driver meningsfuld og nødvendig transformation i netværket. VMware har været en del af denne industribevægelse siden begyndelsen, da en ny bølge af innovation er drevet af softwarebaserede tilgange, der udvider infrastrukturkapaciteten og implementerer den i de nyeste produkter.

Således er P4 et mål-uafhængigt og protokol-uafhængigt programmeringssprog, der bruges af industrien og den akademiske verden til unikt at definere packet routing-adfærd som et program, som igen kan kompileres til flere mål. I dag omfatter målene hardware- og softwareswitche, hypervisor-switche, NPU'er, GPU'er, FPGA'er, SmartNIC'er og ASIC'er.

Sprogets hovedtræk udvider omfanget af dets anvendelse betydeligt og sikrer dets hurtige implementering i netværksarkitekturer.

Kom godt i gang

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

Repository link https://github.com/p4lang, hvor du kan få eksempel på kildekode og tutorials.

plugin til Eclipse med P4-understøttelse, men vi kan anbefale P4 Studio fra Barefoot.

P4 programmeringssprog

Lad os se på kernens vigtigste abstraktioner:

Definition af overskrifter — med deres hjælp bestemmes protokoloverskrifter.

Headerdefinitionen specificerer:

  • beskrivelse af pakkeformater og overskriftsfeltnavne
  • faste og variable tilladte felter

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 opgave er at analysere overskrifterne.

Følgende parsereksempel bestemmer overgangen af ​​maskinens endelige tilstand fra en starttilstand til en af ​​to sluttilstande:

P4 programmeringssprog

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

Таблицы — indeholder maskintilstande, der forbinder brugernøgler med handlinger. Aktivitet — en beskrivelse af, hvordan pakken skal manipuleres.

Tabellerne indeholder tilstande (defineret på ledelsesniveau) for pakkevideresendelse, beskriver Match-Action-enheden

Pakker matches af:

  • Præcis match
  • Længste præfiksmatch (LPM)
  • Triple matching (maskering)

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

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

Handlinger består af kode og data. Dataene kommer fra ledelsesniveauet (f.eks. IP-adresser/portnumre). Visse, sløjfefri primitiver kan specificeres direkte i handlingen, men antallet af instruktioner skal være forudsigelige. Derfor kan handlinger ikke indeholde nogen loops eller betingede sætninger.

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 oprette en søgenøgle, søge i en tabel, udføre handlinger.

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

P4 programmeringssprog

Styr flow — angiver rækkefølgen, som Match-Action-moduler bruges i. Dette er et bydende program, der definerer logikken på højt niveau og Match-Action-sekvensen. Kontrolflowet forbinder alle objekter ved at definere kontrolniveauet.

Eksterne objekter er specifikke objekter med en klart defineret arkitektur og API-grænseflader. Eksempelvis checksumberegning, registre, tællere, tællere mv.

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.

Der er 2 typer metadata:

  Brugerdefinerede metadata (tom struktur for alle pakker)
    Du kan lægge hvad du vil her
    Tilgængelig i hele pipelinen
    praktisk at bruge til dine egne formål, for eksempel til opbevaring af en pakke-hash

  Interne metadata - leveret af arkitekturen
    Input-port, output-port er defineret her
    Tidsstempel, hvornår pakken var i kø, kødybde
    multicast hash / multicast kø
    Pakkeprioritet, Pakkens betydning
    Outputportspecifikation (f.eks. outputkø)

P4 compiler

P4-kompileren (P4C) genererer:

  1. Dataplanets køretid
  2. API til styring af maskintilstand i dataplanet

P4 programmeringssprog

Eksempel på en software switch i P4 sprog

Kildekoder kan downloades fra lageret.

p4lang/p4c-bm: opretter JSON-konfiguration til bmv2
p4lang/bmv2: en softwareswitch, der forstår bmv2 version JSON-konfigurationer

Figuren viser projektkompileringsdiagrammet:

P4 programmeringssprog

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

  • 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 indeholder simple_switch_CLI programmet til bekvem brug af software switch API.

Du kan downloade dette og andre eksempler fra depotet.

P4 programmeringssprog

PS Tidligt på sommeren underskrev Intel en aftale om at erhverve Barefoot Networks i et forsøg på hurtigt at imødekomme behovene hos Hyperscale Cloud-brugere. Som Navin Shenoy (executive vice president og general manager for Data Center Group hos Intel Corporation) sagde, vil dette give Intel mulighed for at levere større arbejdsbelastninger og flere muligheder for datacenterkunder.

Efter min personlige mening bør vi ikke glemme, at Intel er førende inden for produktion af FPGA-chips, og det har et fremragende Quartus-miljø. Det betyder, at vi kan forvente, at med Intels ankomst vil Barefoot ikke kun udvide sin produktlinje, men også Quartus og P4 Studio vil modtage store opdateringer og tilføjelser til Toffino- og Toffino 2-linjen.

Officielt medlem af P4-fællesskabet - virksomhed Faktor gruppe.

Kilde: www.habr.com

Tilføj en kommentar