P4-programmeertaal

P4-programmeertaal
P4 is een programmeertaal die is ontworpen om pakketrouteringsregels te programmeren. In tegenstelling tot een algemene taal zoals C of Python, is P4 een domeinspecifieke taal met een aantal ontwerpen die zijn geoptimaliseerd voor netwerkroutering.

P4 is een open source-taal die wordt gelicentieerd en onderhouden door een non-profitorganisatie genaamd het P4 Language Consortium. Het wordt ook ondersteund door de Open Networking Foundation (ONF) en de Linux Foundation (LF), twee van de grootste koepelorganisaties voor open source netwerkprojecten.
De taal werd oorspronkelijk bedacht in 2013 en beschreven in een SIGCOMM CCR-paper uit 2014 getiteld “Protocol Independent, Packet Routing Processor Programming.”

Sinds de oprichting is P4 exponentieel gegroeid en geëvolueerd, waardoor het snel een standaard is geworden voor het beschrijven van de overdracht van pakketten door netwerkapparaten, waaronder netwerkadapters, switches en routers.

“SDN heeft de netwerkindustrie getransformeerd en P4 tilt SDN naar een hoger niveau door programmeerbaarheid in routering te brengen”, zegt Guru Parulkar, uitvoerend directeur van de Open Networking Foundation.

De P4-taal is oorspronkelijk gemaakt door een groep ingenieurs en onderzoekers van Google, Intel, Microsoft Research, Barefoot, Princeton en Stanford. Het doel was simpel: een gebruiksvriendelijke taal creëren die een softwareontwikkelaar binnen een dag zou kunnen leren en die hij zou kunnen gebruiken om nauwkeurig te beschrijven hoe pakketten over netwerken worden verzonden.

Vanaf het allereerste begin was P4 ontworpen om doelonafhankelijk te zijn (dat wil zeggen dat een programma geschreven in P4 ongewijzigd kon worden gecompileerd om op een verscheidenheid aan doelen te draaien, zoals ASIC's, FPGA's, CPU's, NPU's en GPU's).

De taal is ook protocolonafhankelijk (dat wil zeggen, een P4-programma kan bestaande standaardprotocollen beschrijven of worden gebruikt om nieuwe aangepaste adresseringsmodi te specificeren).

In de industrie wordt P4 gebruikt voor het programmeren van apparaten. Misschien zullen Internet-RFC- en IEEE-standaarden in de toekomst ook de P4-specificatie omvatten.

P4 kan worden gebruikt voor zowel programmeerbare als vaste functionele apparaten. Het wordt bijvoorbeeld gebruikt om het gedrag van de switchpijplijn nauwkeurig vast te leggen in de Switch Abstraction Interface (SAI) API's die worden gebruikt door het open source SONiC switch-besturingssysteem. P4 wordt ook gebruikt in het ONF Stratum-project om schakelgedrag over een verscheidenheid aan vaste en programmeerbare apparaten te beschrijven.

Door het gedrag van de switch en netwerkadapters te beschrijven, kunt u voor het eerst een nauwkeurig uitvoerbaar model van het gehele netwerk maken voordat u het in gebruik neemt. Grote cloudproviders kunnen het netwerk volledig met behulp van software testen en debuggen, waardoor de tijd en kosten van interoperabiliteitstests in het laboratorium aanzienlijk worden verminderd zonder dat daarvoor dure hardware nodig is.

Door P4 te gebruiken kunnen leveranciers van netwerkapparatuur een gemeenschappelijk onderliggend routeringsgedrag voor alle producten verwachten, waardoor hergebruik van de testinfrastructuur mogelijk wordt, de ontwikkeling van beheersoftware wordt vereenvoudigd en uiteindelijk de interoperabiliteit wordt gegarandeerd.

Natuurlijk kan P4 worden gebruikt om programma's te schrijven die geheel nieuwe manieren van routeren beschrijven. P4 wordt bijvoorbeeld veel gebruikt voor telemetrie en metingen in datacenters, bedrijfs- en serviceprovidernetwerken.

Ook de onderzoeksgemeenschap heeft zich ontwikkeld. Verschillende toonaangevende academische netwerkonderzoeksgroepen hebben opwindende nieuwe toepassingen gepubliceerd op basis van P4-programma's, waaronder taakverdeling, consensusprotocollen en caching van sleutelwaarden. Er wordt een nieuw programmeerparadigma gecreëerd, innovatie verplaatst zich van hardware naar software, waardoor veel onverwachte, nieuwe en ingenieuze ideeën kunnen ontstaan.

De ontwikkelaarsgemeenschap heeft aanzienlijke bijdragen geleverd aan de ontwikkeling van code, waaronder compilers, pijplijnen, gedragsmodellen, API's, testframeworks, applicaties en meer. Bedrijven zoals Alibaba, AT&T, Barefoot, Cisco, Fox Networks, Google, Intel, IXIA, Juniper Networks, Mellanox, Microsoft, Netcope, Netronome, VMware, Xilinx en ZTE hebben toegewijde ontwikkelaars; van universiteiten, waaronder BUPT, Cornell, Harvard, MIT, NCTU, Princeton, Stanford, Technion, Tsinghua, UMass en USI; en open source-projecten, waaronder CORD, FD.io, OpenDaylight, ONOS, OvS, SAI en Stratum benadrukken het feit dat P4 een onafhankelijk gemeenschapsproject is.

Typische generatie controllers voor de P4-taal:

P4-programmeertaal

Toepassingsvooruitzichten

P4-programmeertaal
Omdat de taal bedoeld is voor routeringstoepassingen, is de lijst met vereisten en ontwerpopties anders dan die van programmeertalen voor algemene doeleinden. De belangrijkste kenmerken van de taal zijn:

  1. Onafhankelijkheid van doelimplementatie;
  2. Onafhankelijkheid van de gebruikte protocol(len);
  3. Herconfigureerbaarheid van velden.

Onafhankelijkheid van doelimplementatie

P4-programma's zijn ontworpen om implementatie-onafhankelijk te zijn, wat betekent dat ze kunnen worden gecompileerd voor veel verschillende soorten uitvoeringsengines, zoals processors voor algemene doeleinden, FPGA's, systeem-op-chips, netwerkprocessors en ASIC's. Deze verschillende soorten machines staan ​​bekend als P4-doelen, en voor elk doel is een compiler nodig om de P4-broncode om te zetten in een doelschakelaarmodel. De compiler kan worden ingebouwd in het doelapparaat, externe software of zelfs in een cloudservice. Omdat veel van de oorspronkelijke doelen voor P4-programma's bedoeld waren voor eenvoudige pakketschakeling, is het heel gebruikelijk om de term "P4-switch" te horen, ook al is "P4-doel" nauwkeuriger.

Onafhankelijkheid van de gebruikte protocol(len).

P4 is protocolonafhankelijk. Dit betekent dat de taal geen native ondersteuning biedt voor veelgebruikte protocollen zoals IP, Ethernet, TCP, VxLAN of MPLS. In plaats daarvan beschrijft de P4-programmeur de headerformaten en veldnamen van de vereiste protocollen in het programma, die op hun beurt worden geïnterpreteerd en verwerkt door het gecompileerde programma en het doelapparaat.

Herconfigureerbaarheid van velden

De protocolonafhankelijkheid en het abstracte taalmodel maken herconfiguratie mogelijk: P4-doelen moeten de pakketverwerking kunnen wijzigen nadat het systeem is geïmplementeerd. Deze mogelijkheid wordt traditioneel geassocieerd met routering via processors voor algemene doeleinden of netwerkprocessors in plaats van geïntegreerde schakelingen met vaste functies.

Hoewel er niets in de taal is dat optimalisatie van de prestaties van een bepaalde set protocollen in de weg staat, zijn deze optimalisaties onzichtbaar voor de auteur van de taal en kunnen ze uiteindelijk de flexibiliteit van het systeem en de doelen en hun herconfigureerbaarheid verminderen.

Deze kenmerken van de taal werden aanvankelijk vastgelegd door de makers ervan, met de nadruk op het wijdverbreide gebruik ervan in netwerkinfrastructuur.

De taal wordt al in veel bedrijven gebruikt:

1) Grootschalige datacenters;

Het Chinese bedrijf Tencent is de grootste investeringsmaatschappij ter wereld en een van de grootste durfkapitaalbedrijven. De dochterondernemingen van Tencent, zowel in China als in andere landen over de hele wereld, zijn gespecialiseerd in verschillende gebieden van hightech zaken, waaronder diverse internetdiensten, ontwikkelingen op het gebied van kunstmatige intelligentie en elektronisch entertainment.

P4 en programmeerbare routing zijn geavanceerde technologieën die worden gebruikt in de netwerkarchitectuur van het bedrijf.

Als een van de grondleggers is Google trots op de snelle adoptie van P4 in de netwerkindustrie en in het bijzonder in het architectonisch ontwerp van datacenters.

2) Commerciële bedrijven;

Goldman Sachs profiteert van de samenwerking met de open source-gemeenschap en het ontwikkelen van gemeenschappelijke standaarden en oplossingen om de netwerkinfrastructuur te innoveren en betere oplossingen voor klanten te bieden.

3) Productie;

De hele netwerkindustrie zou profiteren van een taal als P4 die het doorstuurgedrag op unieke wijze definieert. Cisco gelooft ook in het overbrengen van zijn productlijnen om deze taal te gebruiken.

Juniper Networks heeft P4 en P4 Runtime in een aantal producten opgenomen en biedt programmatische toegang tot de embedded processor van Juniper en de bijbehorende softwarecode.

Ruijie Networks is een groot voorstander van P4 en de voordelen die het voor netwerken met zich meebrengt. Met P4 kan het bedrijf de beste oplossingen creëren en leveren aan een breed scala aan klanten.

4) Telecommunicatieproviders;

AT&T was een early adopter van P4, een van de eersten die P4 gebruikte om het gedrag te definiëren dat het in zijn netwerken wilde zien, en om programmeerbare P4-doorstuurapparaten op zijn netwerk te gebruiken.

Bij Deutsche Telekom wordt de taal gebruikt om prototypes van belangrijke netwerkfuncties te maken als onderdeel van het Access 4.0-programma.

5) Halfgeleiderindustrie;

De taal stelde Barefoot in staat een nieuw paradigma te implementeren voor het leveren van softwaremogelijkheden op het netwerkrouteringsvlak.

Xilinx was een van de oprichters van P4.org en was actief betrokken bij de ontwikkeling van de P4-taal en implementeerde deze in FPGA-gebaseerde programmeerbare platforms voor SmartNIC- en NFV-hardware, waarbij hij een van de eerste P416-compilers uitbracht als onderdeel van het SDNet-ontwerp.

6) Software.

VMware gelooft dat P4 enorme energie, innovatie en gemeenschap creëert die betekenisvolle en noodzakelijke transformatie in het netwerk aanstuurt. VMware maakt sinds het begin deel uit van deze branchebeweging, omdat een nieuwe golf van innovatie wordt aangedreven door op software gebaseerde benaderingen die de infrastructuurmogelijkheden uitbreiden en implementeren in de nieuwste producten.

P4 is dus een doelonafhankelijke en protocolonafhankelijke programmeertaal die door de industrie en de academische wereld wordt gebruikt om pakketrouteringsgedrag op unieke wijze te definiëren als een programma, dat op zijn beurt voor meerdere doelen kan worden gecompileerd. Tegenwoordig omvatten de doelstellingen hardware- en softwareschakelaars, hypervisorschakelaars, NPU's, GPU's, FPGA's, SmartNIC's en ASIC's.

De belangrijkste kenmerken van de taal breiden de reikwijdte van de toepassing aanzienlijk uit en zorgen voor een snelle implementatie in netwerkarchitecturen.

Aan de slag

P4 is een open project, alle relevante informatie staat op de website P4.org

Repository-link https://github.com/p4lang, waar u voorbeeldbroncode en tutorials kunt krijgen.

Inpluggen voor Eclipse met P4-ondersteuning, maar we kunnen het aanbevelen P4 Studio van blote voeten.

P4-programmeertaal

Laten we eens kijken naar de belangrijkste abstracties van de kernel:

Kopteksten definiëren — met hun hulp worden protocolheaders bepaald.

De headerdefinitie specificeert:

  • beschrijving van pakketformaten en headerveldnamen
  • vaste en variabele toegestane velden

Bij voorbeeld

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 – hun taak is om de krantenkoppen te ontleden.

Het volgende parservoorbeeld bepaalt de overgang van de eindtoestand van de machine van de ene begintoestand naar een van de twee eindtoestanden:

P4-programmeertaal

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

Таблицы — bevatten machinestatussen die gebruikerssleutels koppelen aan acties. acties — een beschrijving van hoe het pakket moet worden gemanipuleerd.

De tabellen bevatten statussen (gedefinieerd op managementniveau) voor het doorsturen van pakketten, beschrijven de Match-Action-eenheid

Pakketten worden gematcht door:

  • Exacte overeenkomst
  • Langste voorvoegselovereenkomst (LPM)
  • Drievoudige matching (maskeren)

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

Alle mogelijke acties moeten vooraf in tabellen worden gedefinieerd.

Acties bestaan ​​uit code en data. De gegevens komen van het managementniveau (bijvoorbeeld IP-adressen/poortnummers). Bepaalde, lusvrije primitieven kunnen direct in de actie worden gespecificeerd, maar het aantal instructies moet voorspelbaar zijn. Daarom kunnen acties geen lussen of voorwaardelijke instructies bevatten.

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-modules — acties om een ​​zoeksleutel aan te maken, in een tabel te zoeken, acties uit te voeren.

Een typisch voorbeeld van een module wordt weergegeven in de figuur:

P4-programmeertaal

Controlestroom — geeft de volgorde aan waarin Match-Action-modules worden gebruikt. Dit is een imperatief programma dat de logica op hoog niveau en de Match-Action-reeks definieert. De controlestroom verbindt alle objecten door het controleniveau te definiëren.

Externe objecten zijn specifieke objecten met een duidelijk gedefinieerde architectuur en API-interfaces. Bijvoorbeeld controlesomberekening, registers, tellers, tellers, enz.

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 — datastructuren die bij elk pakket horen.

Er zijn 2 soorten metagegevens:

  Aangepaste metadata (lege structuur voor alle pakketten)
    Je kunt hier zetten wat je wilt
    Beschikbaar in de hele pijplijn
    handig voor gebruik voor eigen doeleinden, bijvoorbeeld voor het bewaren van een pakketje hasj

  Interne metadata - geleverd door de architectuur
    Invoerpoort en uitvoerpoort worden hier gedefinieerd
    Tijdstempel waarop het pakket in de wachtrij stond, wachtrijdiepte
    multicast-hash/multicast-wachtrij
    Pakketprioriteit, pakketbelang
    Specificatie van de uitgangspoort (bijv. uitvoerwachtrij)

P4-compiler

De P4-compiler (P4C) genereert:

  1. Runtime van gegevensvlak
  2. API voor het beheren van de machinestatus op het datavlak

P4-programmeertaal

Voorbeeld van een softwareswitch in P4-taal

Broncodes kunnen worden gedownload vanuit de repository.

p4lang/p4c-bm: creëert JSON-configuratie voor bmv2
p4lang/bmv2: een softwareswitch die JSON-configuraties van de bmv2-versie begrijpt

De afbeelding toont het projectcompilatiediagram:

P4-programmeertaal

Manipulaties met tabellen, uitleesregisters, tellers:

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


De broncode bevat het simple_switch_CLI programma voor handig gebruik van de software switch API.

U kunt deze en andere voorbeelden downloaden uit de repository.

P4-programmeertaal

PS Begin deze zomer tekende Intel een overeenkomst om Barefoot Networks over te nemen in een poging snel aan de behoeften van Hyperscale Cloud-gebruikers te voldoen. Zoals Navin Shenoy (executive vice president en general manager van de Data Center Group bij Intel Corporation) zei, zal Intel hierdoor grotere werklasten en meer mogelijkheden voor datacenterklanten kunnen bieden.

Naar mijn persoonlijke mening mogen we niet vergeten dat Intel toonaangevend is in de productie van FPGA-chips en over een uitstekende Quartus-omgeving beschikt. Dit betekent dat we mogen verwachten dat Barefoot met de komst van Intel niet alleen zijn productlijn zal uitbreiden, maar dat ook Quartus en P4 Studio serieuze updates en aanvullingen zullen krijgen op de Toffino- en Toffino 2-lijn.

Officieel lid van de P4-gemeenschap - bedrijf factor groep.

Bron: www.habr.com

Voeg een reactie