programovací jazyk P4

programovací jazyk P4
P4 je programovací jazyk určený k programování pravidel směrování paketů. Na rozdíl od univerzálního jazyka, jako je C nebo Python, je P4 doménově specifický jazyk s řadou návrhů optimalizovaných pro síťové směrování.

P4 je open source jazyk licencovaný a spravovaný neziskovou organizací s názvem P4 Language Consortium. Podporují jej také Open Networking Foundation (ONF) a Linux Foundation (LF), dvě největší zastřešující organizace pro open source síťové projekty.
Jazyk byl původně vytvořen v roce 2013 a popsán v dokumentu SIGCOMM CCR z roku 2014 s názvem „Protocol Independent, Packet Routing Processor Programming“.

Od svého vzniku P4 exponenciálně rostl a vyvíjel se a rychle se stal standardem pro popis přenosu paketů síťovými zařízeními, včetně síťových adaptérů, přepínačů a směrovačů.

„SDN transformovalo síťový průmysl a P4 posouvá SDN na další úroveň tím, že přináší programovatelnost do směrování,“ řekl Guru Parulkar, výkonný ředitel Open Networking Foundation.

Jazyk P4 byl původně vytvořen skupinou inženýrů a výzkumníků ze společností Google, Intel, Microsoft Research, Barefoot, Princeton a Stanford. Cíl byl jednoduchý: vytvořit snadno použitelný jazyk, který by se vývojář softwaru mohl naučit za den a použít jej k přesnému popisu toho, jak jsou pakety odesílány přes sítě.

Od samého začátku byl P4 navržen tak, aby byl nezávislý na cíli (tj. program napsaný v P4 mohl být zkompilován beze změny, aby běžel na různých cílech, jako jsou ASIC, FPGA, CPU, NPU a GPU).

Jazyk je také nezávislý na protokolu (tj. program P4 může popisovat stávající standardní protokoly nebo může být použit ke specifikaci nových uživatelských režimů adresování).

V průmyslu se P4 používá pro programování zařízení. Možná v budoucnu budou standardy Internet-RFC a IEEE zahrnovat také specifikaci P4.

P4 lze použít pro programovatelná i pevná funkční zařízení. Používá se například k přesnému zaznamenávání chování přepínacího potrubí v rozhraní API SAI (Switch Abstraction Interface) používaném operačním systémem přepínačů SONiC s otevřeným zdrojovým kódem. P4 se také používá v projektu ONF Stratum k popisu spínacího chování napříč řadou pevných a programovatelných zařízení.

Popis chování přepínače a síťových adaptérů vám poprvé umožňuje vytvořit přesný spustitelný model celé sítě před nasazením. Velcí poskytovatelé cloudu mohou testovat a ladit síť výhradně pomocí softwaru, což výrazně snižuje čas a náklady na testování interoperability v laboratoři bez nutnosti drahého hardwaru.

Díky použití P4 mohou dodavatelé síťových zařízení očekávat společné základní směrovací chování napříč všemi produkty, což umožní opětovné použití testovací infrastruktury, zjednoduší vývoj softwaru pro správu a v konečném důsledku zajistí interoperabilitu.

P4 lze samozřejmě použít k psaní programů, které popisují zcela nové způsoby směrování. Například P4 je široce používán pro telemetrii a měření v datových centrech, podnikových sítích a sítích poskytovatelů služeb.

Posílila se i výzkumná komunita. Několik předních akademických síťových výzkumných skupin publikovalo vzrušující nové aplikace založené na programech P4, včetně vyvažování zátěže, protokolů konsensu a ukládání klíčových hodnot do mezipaměti. Vytváří se nové programovací paradigma, inovace se přesouvají od hardwaru k softwaru, což umožňuje vznik mnoha nečekaných, nových a důmyslných nápadů.

Vývojářská komunita významně přispěla k vývoji kódu, včetně kompilátorů, kanálů, behaviorálních modelů, API, testovacích rámců, aplikací a dalších. Společnosti jako Alibaba, AT&T, Barefoot, Cisco, Fox Networks, Google, Intel, IXIA, Juniper Networks, Mellanox, Microsoft, Netcope, Netronome, VMware, Xilinx a ZTE mají specializované vývojáře; z univerzit včetně BUPT, Cornell, Harvard, MIT, NCTU, Princeton, Stanford, Technion, Tsinghua, UMass a USI; a open source projekty včetně CORD, FD.io, OpenDaylight, ONOS, OvS, SAI a Stratum zdůrazňují skutečnost, že P4 je nezávislý komunitní projekt.

Typická generace ovladačů pro jazyk P4:

programovací jazyk P4

Vyhlídky na uplatnění

programovací jazyk P4
Vzhledem k tomu, že jazyk je určen pro směrovací aplikace, je seznam požadavků a možností návrhu odlišný ve srovnání s univerzálními programovacími jazyky. Hlavní rysy jazyka jsou:

  1. Nezávislost na realizaci cíle;
  2. Nezávislost použitého protokolu (protokolů);
  3. Překonfigurovatelnost pole.

Nezávislost na realizaci cíle

Programy P4 jsou navrženy tak, aby byly nezávislé na implementaci, což znamená, že je lze zkompilovat pro mnoho různých typů prováděcích motorů, jako jsou univerzální procesory, FPGA, systémy na čipech, síťové procesory a ASIC. Tyto různé typy strojů jsou známé jako cíle P4 a každý cíl vyžaduje kompilátor, který převede zdrojový kód P4 na model cílového přepínače. Kompilátor může být zabudován do cílového zařízení, externího softwaru nebo dokonce do cloudové služby. Protože mnoho z původních cílů pro programy P4 bylo pro jednoduché přepínání paketů, je velmi běžné slyšet termín „přepínač P4“, i když „cíl P4“ je přesnější.

Nezávislost na použitých protokolech

P4 je protokolově nezávislý. To znamená, že jazyk nemá nativní podporu pro běžné protokoly jako IP, Ethernet, TCP, VxLAN nebo MPLS. Místo toho programátor P4 popisuje formáty záhlaví a názvy polí požadovaných protokolů v programu, které jsou zase interpretovány a zpracovávány zkompilovaným programem a cílovým zařízením.

Překonfigurovatelnost pole

Protokolová nezávislost a abstraktní jazykový model umožňují rekonfigurovatelnost – cíle P4 by měly být schopny změnit zpracování paketů po nasazení systému. Tato schopnost byla tradičně spojována se směrováním přes univerzální procesory nebo síťové procesory spíše než integrované obvody s pevnou funkcí.

Přestože v jazyce není nic, co by bránilo optimalizaci výkonu konkrétní sady protokolů, tyto optimalizace jsou pro autora jazyka neviditelné a v konečném důsledku mohou snížit flexibilitu systému a cílů a jejich rekonfigurovatelnost.

Tyto vlastnosti jazyka byly původně stanoveny jeho tvůrci se zaměřením na jeho široké použití v síťové infrastruktuře.

Tento jazyk se již používá v mnoha společnostech:

1) datová centra Hyperscale;

Čínská společnost Tencent je největší investiční společností na světě a jednou z největších společností rizikového kapitálu. Dceřiné společnosti Tencent, jak v Číně, tak v dalších zemích po celém světě, se specializují na různé oblasti high-tech byznysu, včetně různých internetových služeb, vývoje v oblasti umělé inteligence a elektronické zábavy.

P4 a programovatelné směrování jsou pokročilé technologie, které se používají v síťové architektuře společnosti.

Google jako jeden z tvůrců s hrdostí zaznamenal rychlé přijetí P4 v síťovém průmyslu a zejména v architektonickém návrhu datových center.

2) Obchodní společnosti;

Goldman Sachs využívá výhod spolupráce s open source komunitou a vývoje společných standardů a řešení k inovaci síťové infrastruktury a poskytování lepších řešení pro klienty.

3) Výroba;

Celému síťovému odvětví by prospěl jazyk jako P4, který jedinečně definuje chování při přeposílání. Cisco také věří v převedení svých produktových řad na používání tohoto jazyka.

Juniper Networks zahrnul P4 a P4 Runtime do řady produktů a poskytuje programový přístup k vestavěnému procesoru Juniper a jeho softwarovému kódu.

Ruijie Networks je silným zastáncem P4 a výhod, které sítím přináší. S P4 může společnost vytvářet a dodávat nejlepší řešení ve své třídě širokému spektru zákazníků.

4) poskytovatelé telekomunikací;

AT&T byl prvním osvojitelem P4, jedním z prvních, kdo používal P4 k definování chování, které chtěl vidět ve svých sítích, a k použití P4 programovatelných předávacích zařízení ve své síti.

V Deutsche Telekom se tento jazyk používá k prototypování klíčových síťových funkcí v rámci programu Access 4.0.

5) Polovodičový průmysl;

Tento jazyk umožnil společnosti Barefoot implementovat nové paradigma pro poskytování softwarových funkcí do roviny síťového směrování.

Xilinx byl jedním ze zakladatelů P4.org a aktivně se podílel na vývoji jazyka P4 a implementoval jej do programovatelných platforem založených na FPGA pro hardware SmartNIC a NFV, čímž uvolnil jeden z prvních kompilátorů P416 jako součást návrhu SDNet.

6) Software.

VMware věří, že P4 vytváří obrovskou energii, inovace a komunitu, která je hnacím motorem smysluplné a nezbytné transformace v síti. VMware je součástí tohoto průmyslového hnutí od počátku, protože nová vlna inovací je poháněna softwarovými přístupy, které rozšiřují možnosti infrastruktury a implementují je do nejnovějších produktů.

P4 je tedy programovací jazyk nezávislý na cíli a protokolu, který je používán průmyslem a akademickou obcí k jedinečnému definování chování směrování paketů jako programu, který lze zase zkompilovat pro více cílů. Dnes mezi cíle patří hardwarové a softwarové přepínače, přepínače hypervisorů, NPU, GPU, FPGA, SmartNIC a ASIC.

Hlavní vlastnosti jazyka výrazně rozšiřují rozsah jeho použití a zajišťují jeho rychlou implementaci v síťových architekturách.

Začínáme

P4 je otevřený projekt, všechny relevantní informace jsou na webu P4.org

Odkaz na úložiště https://github.com/p4lang, kde můžete získat ukázkový zdrojový kód a výukové programy.

Plugin pro Eclipse s podporou P4, ale můžeme doporučit Studio P4 od Barefoot.

programovací jazyk P4

Podívejme se na hlavní abstrakce jádra:

Definování záhlaví — s jejich pomocí se určují hlavičky protokolů.

Definice záhlaví specifikuje:

  • popis formátů paketů a názvy polí záhlaví
  • pevná a variabilní povolená pole

Například

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

Analyzátory — jejich úkolem je analyzovat titulky.

Následující příklad analyzátoru určí přechod konečného stavu stroje z jednoho počátečního stavu do jednoho ze dvou konečných stavů:

programovací jazyk 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;
        }
    }…
}

Tabulky — obsahují stavy stroje propojující uživatelské klíče s akcemi. Činnost — popis, jak by se mělo s balením manipulovat.

Tabulky obsahují stavy (definované na úrovni managementu) pro předávání paketů, popisují jednotku Match-Action

Paketům odpovídá:

  • Přesná shoda
  • Nejdelší shoda prefixu (LPM)
  • Trojitá shoda (maskování)

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

Všechny možné akce musí být předem definovány v tabulkách.

Akce se skládají z kódu a dat. Data pocházejí z úrovně správy (např. IP adresy/čísla portů). Určitá primitiva bez smyček lze zadat přímo v akci, ale počet instrukcí musí být předvídatelný. Akce proto nemohou obsahovat žádné smyčky nebo podmíněné příkazy.

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 moduly — akce k vytvoření vyhledávacího klíče, vyhledávání v tabulce, provádění akcí.

Typický příklad modulu je znázorněn na obrázku:

programovací jazyk P4

Řídit tok — označuje pořadí, ve kterém jsou moduly Match-Action použity. Toto je imperativní program, který definuje logiku na vysoké úrovni a sekvenci Match-Action. Řídicí tok propojuje všechny objekty definováním úrovně řízení.

Vnější objekty jsou specifické objekty s jasně definovanou architekturou a rozhraními API. Například výpočet kontrolního součtu, registry, čítače, čítače atd.

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 — datové struktury spojené s každým balíkem.

Existují 2 typy metadat:

  Vlastní metadata (prázdná struktura pro všechny balíčky)
    Můžete si sem dát, co chcete
    Dostupné v celém potrubí
    vhodné pro použití pro vaše vlastní účely, například pro uložení hash balíčku

  Interní metadata – poskytuje architektura
    Zde jsou definovány vstupní a výstupní porty
    Časové razítko, kdy byl paket zařazen do fronty, hloubka fronty
    multicast hash / multicast fronta
    Priorita balíčku, důležitost balíčku
    Specifikace výstupního portu (např. výstupní fronta)

Kompilátor P4

Kompilátor P4 (P4C) generuje:

  1. Runtime datové roviny
  2. API pro správu stavu stroje v datové rovině

programovací jazyk P4

Příklad softwarového přepínače v jazyce P4

Zdrojové kódy lze stáhnout z úložiště.

p4lang/p4c-bm: vytvoří konfiguraci JSON pro bmv2
p4lang/bmv2: softwarový přepínač, který rozumí konfiguracím JSON verze bmv2

Obrázek ukazuje schéma kompilace projektu:

programovací jazyk P4

Manipulace s tabulkami, čtecími registry, počítadly:

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


Zdrojový kód obsahuje program simple_switch_CLI pro pohodlné použití rozhraní API softwarového přepínače.

Tento a další příklady si můžete stáhnout z úložiště.

programovací jazyk P4

PS Začátkem letošního léta Intel podepsal dohodu o akvizici Barefoot Networks ve snaze rychle vyhovět potřebám uživatelů Hyperscale Cloud. Jak řekl Navin Shenoy (výkonný viceprezident a generální ředitel Data Center Group ve společnosti Intel Corporation), Intelu to umožní poskytovat větší pracovní zátěž a více příležitostí pro zákazníky datových center.

Podle mého osobního názoru bychom neměli zapomínat, že Intel je lídrem ve výrobě FPGA čipů a disponuje výborným prostředím Quartus. To znamená, že můžeme očekávat, že s příchodem Intelu Barefoot nejen rozšíří svou produktovou řadu, ale také Quartus a P4 Studio dostanou seriózní aktualizace a doplňky do řady Toffino a Toffino 2.

Oficiální člen komunity P4 - společnost Faktorová skupina.

Zdroj: www.habr.com

Přidat komentář