P4 programming language

P4 programming language
Ang P4 ay isang programming language na idinisenyo upang magprogram ng mga panuntunan sa pagruruta ng packet. Hindi tulad ng isang pangkalahatang layunin na wika tulad ng C o Python, ang P4 ay isang wikang tukoy sa domain na may ilang mga disenyo na na-optimize para sa pagruruta ng network.

Ang P4 ay isang open source na wika na lisensyado at pinapanatili ng isang non-profit na organisasyon na tinatawag na P4 Language Consortium. Sinusuportahan din ito ng Open Networking Foundation (ONF) at ng Linux Foundation (LF), dalawa sa pinakamalaking payong organisasyon para sa open source networking projects.
Ang wika ay orihinal na nilikha noong 2013 at inilarawan sa isang 2014 SIGCOMM CCR na papel na pinamagatang "Protocol Independent, Packet Routing Processor Programming."

Mula nang magsimula ito, ang P4 ay lumago at umunlad nang husto, mabilis na naging pamantayan para sa paglalarawan ng pagpapadala ng mga packet sa pamamagitan ng mga network device, kabilang ang mga network adapter, switch, at router.

"Binago ng SDN ang industriya ng networking, at dinadala ng P4 ang SDN sa susunod na antas sa pamamagitan ng pagdadala ng programmability sa pagruruta," sabi ni Guru Parulkar, executive director ng Open Networking Foundation.

Ang wikang P4 ay orihinal na nilikha ng isang pangkat ng mga inhinyero at mananaliksik mula sa Google, Intel, Microsoft Research, Barefoot, Princeton at Stanford. Ang layunin ay simple: lumikha ng isang madaling gamitin na wika na maaaring matutunan ng isang developer ng software sa isang araw at gamitin upang tumpak na ilarawan kung paano ipinapadala ang mga packet sa mga network.

Sa simula pa lang, ang P4 ay idinisenyo upang maging independiyenteng target (ibig sabihin, ang isang program na nakasulat sa P4 ay maaaring i-compile nang hindi nagbabago upang tumakbo sa iba't ibang mga target tulad ng mga ASIC, FPGA, CPU, NPU, at GPU).

Ang wika ay independiyente rin sa protocol (ibig sabihin, maaaring ilarawan ng isang P4 program ang mga umiiral nang standard na protocol o magamit upang tukuyin ang mga bagong custom na mode ng pagtugon).

Sa industriya, ginagamit ang P4 para sa programming ng device. Marahil sa hinaharap, kasama rin sa mga pamantayan ng Internet-RFC at IEEE ang pagtutukoy ng P4.

Maaaring gamitin ang P4 para sa parehong mga programmable at fixed function na device. Halimbawa, ginagamit ito upang tumpak na i-record ang pagkilos ng switch pipeline sa mga Switch Abstraction Interface (SAI) API na ginagamit ng open source na SONiC switch OS. Ginagamit din ang P4 sa proyekto ng ONF Stratum upang ilarawan ang paglipat ng gawi sa iba't ibang mga fixed at programmable na device.

Sa unang pagkakataon, ang paglalarawan sa gawi ng switch at mga network adapter ay nagbibigay-daan sa iyong lumikha ng tumpak na modelo ng buong network bago i-deploy. Maaaring subukan at i-debug ng malalaking cloud provider ang network nang buo gamit ang software, na makabuluhang binabawasan ang oras at gastos ng interoperability testing sa lab nang hindi nangangailangan ng mamahaling hardware.

Sa pamamagitan ng paggamit ng P4, maaasahan ng mga vendor ng network equipment ang karaniwang pinagbabatayan na gawi sa pagruruta sa lahat ng produkto, na nagpapahintulot sa muling paggamit ng imprastraktura ng pagsubok, pagpapasimple ng pagbuo ng software ng pamamahala, at sa huli ay tinitiyak ang interoperability.

Siyempre, maaaring gamitin ang P4 upang magsulat ng mga programa na naglalarawan ng ganap na mga bagong paraan ng pagruruta. Halimbawa, malawakang ginagamit ang P4 para sa telemetry at mga sukat sa mga data center, enterprise at mga network ng service provider.

Umangat din ang komunidad ng pananaliksik. Ilang nangungunang pangkat ng pananaliksik sa akademikong networking ang naglathala ng mga kapana-panabik na bagong aplikasyon batay sa mga programang P4, kabilang ang pagbalanse ng load, mga protocol ng pinagkasunduan, at key value caching. Isang bagong programming paradigm ang nililikha, ang inobasyon ay lumilipat mula sa hardware patungo sa software, na nagpapahintulot sa maraming hindi inaasahang, bago at mapanlikhang ideya na lumabas.

Ang komunidad ng developer ay gumawa ng malalaking kontribusyon sa pagbuo ng code, kabilang ang mga compiler, pipeline, mga modelo ng pag-uugali, mga API, mga balangkas ng pagsubok, mga application, at higit pa. Ang mga kumpanyang gaya ng Alibaba, AT&T, Barefoot, Cisco, Fox Networks, Google, Intel, IXIA, Juniper Networks, Mellanox, Microsoft, Netcope, Netronome, VMware, Xilinx, at ZTE ay may dedikadong mga developer; mula sa mga unibersidad kabilang ang BUPT, Cornell, Harvard, MIT, NCTU, Princeton, Stanford, Technion, Tsinghua, UMass, at USI; at mga open source na proyekto kabilang ang CORD, FD.io, OpenDaylight, ONOS, OvS, SAI at Stratum ay binibigyang-diin ang katotohanan na ang P4 ay isang independiyenteng proyekto ng komunidad.

Karaniwang henerasyon ng mga controller para sa wikang P4:

P4 programming language

Mga prospect ng aplikasyon

P4 programming language
Dahil ang wika ay inilaan para sa pagruruta ng mga application, ang listahan ng mga kinakailangan at mga pagpipilian sa disenyo ay iba kumpara sa mga pangkalahatang layunin na programming language. Ang mga pangunahing katangian ng wika ay:

  1. Kalayaan mula sa target na pagpapatupad;
  2. Kalayaan ng (mga) protocol na ginamit;
  3. Re-configure ng field.

Kalayaan mula sa target na pagpapatupad

Ang mga P4 program ay idinisenyo upang maging independyente sa pagpapatupad, ibig sabihin, maaari silang i-compile para sa maraming iba't ibang uri ng execution engine, tulad ng mga general purpose processor, FPGA, SoC, network processor, at ASIC. Ang iba't ibang uri ng makina na ito ay kilala bilang mga P4 na target, at ang bawat target ay nangangailangan ng isang compiler upang i-convert ang P4 source code sa isang modelo ng target switch. Ang compiler ay maaaring itayo sa target na aparato, panlabas na software, o kahit isang serbisyo sa ulap. Dahil marami sa mga orihinal na target para sa mga programang P4 ay para sa simpleng packet switching, karaniwan nang marinig ang terminong "P4 switch" kahit na ang "P4 target" ay mas tumpak.

Kalayaan ng (mga) protocol na ginamit

Ang P4 ay independiyenteng protocol. Nangangahulugan ito na ang wika ay walang katutubong suporta para sa mga karaniwang protocol gaya ng IP, Ethernet, TCP, VxLAN o MPLS. Sa halip, inilalarawan ng P4 programmer ang mga format ng header at mga pangalan ng field ng mga kinakailangang protocol sa programa, na binibigyang-kahulugan at pinoproseso ng pinagsama-samang programa at ng target na device.

Re-configure ng field

Ang pagsasarili ng protocol at abstract na modelo ng wika ay nagbibigay-daan para sa muling pagsasaayosβ€”dapat na mabago ng mga target na P4 ang pagpoproseso ng packet pagkatapos mai-deploy ang system. Ang kakayahang ito ay tradisyonal na nauugnay sa pagruruta sa pamamagitan ng mga pangkalahatang layunin na processor o network processor kaysa sa fixed-function integrated circuit.

Bagama't walang anuman sa wika na makakapigil sa pag-optimize ng pagganap ng isang partikular na hanay ng mga protocol, ang mga pag-optimize na ito ay hindi nakikita ng may-akda ng wika at sa huli ay maaaring mabawasan ang flexibility ng system at mga layunin at ang kanilang muling pagsasaayos.

Ang mga katangiang ito ng wika ay unang inilatag ng mga tagalikha nito na may pagtuon sa malawakang paggamit nito sa imprastraktura ng network.

Ginagamit na ang wika sa maraming kumpanya:

1) Hyperscale data center;

Ang kumpanyang Tsino na Tencent ay ang pinakamalaking kumpanya ng pamumuhunan sa mundo at isa sa pinakamalaking kumpanya ng venture capital. Ang mga subsidiary ng Tencent, kapwa sa China at sa ibang mga bansa sa buong mundo, ay dalubhasa sa iba't ibang larangan ng high-tech na negosyo, kabilang ang iba't ibang serbisyo sa Internet, mga pag-unlad sa larangan ng artificial intelligence at electronic entertainment.

Ang P4 at programmable routing ay mga advanced na teknolohiya na ginagamit sa arkitektura ng network ng kumpanya.

Bilang isa sa mga nagmula, ipinagmamalaki ng Google na tandaan ang mabilis na paggamit ng P4 sa industriya ng networking at sa partikular na disenyo ng arkitektura ng data center.

2) Mga komersyal na kumpanya;

Sinasamantala ng Goldman Sachs ang pakikipagtulungan sa open source na komunidad at pagbuo ng mga karaniwang pamantayan at solusyon para magpabago ng imprastraktura ng network at magbigay ng mas mahuhusay na solusyon para sa mga kliyente.

3) Produksyon;

Ang buong industriya ng networking ay makikinabang mula sa isang wika tulad ng P4 na natatanging tumutukoy sa pag-uugali ng pagpapasa. Naniniwala rin ang Cisco sa paglilipat ng mga linya ng produkto nito upang magamit ang wikang ito.

Ang Juniper Networks ay may kasamang P4 at P4 Runtime sa ilang produkto, at nagbibigay ng programmatic na access sa Juniper na naka-embed na processor at ang software code nito.

Ang Ruijie Networks ay isang malakas na tagasuporta ng P4 at ang mga benepisyong dulot nito sa mga network. Sa P4, ang kumpanya ay maaaring lumikha at maghatid ng pinakamahusay na mga solusyon sa klase sa isang malawak na hanay ng mga customer.

4) Mga tagapagbigay ng telekomunikasyon;

Ang AT&T ay isang maagang nag-adopt ng P4, isa sa mga unang gumamit ng P4 para tukuyin ang gawi na gusto nitong makita sa mga network nito, at gumamit ng mga P4 na programmable forwarding device sa network nito.

Sa Deutsche Telekom, ang wika ay ginagamit upang prototype ang mga pangunahing function ng network bilang bahagi ng Access 4.0 program.

5) Industriya ng semiconductor;

Ang wika ay nagbigay-daan sa Barefoot na magpatupad ng bagong paradigm para sa paghahatid ng mga kakayahan ng software sa network routing plane.

Si Xilinx ay isa sa mga nagtatag ng P4.org at aktibong kasangkot sa pagbuo ng wikang P4 at ipinatupad ito sa mga FPGA-based na programmable platform para sa SmartNIC at NFV hardware, na naglabas ng isa sa mga unang P416 compiler bilang bahagi ng disenyo ng SDNet.

6) Software.

Naniniwala ang VMware na ang P4 ay lumilikha ng napakalaking enerhiya, inobasyon at komunidad na nagtutulak ng makabuluhan at kinakailangang pagbabago sa network. Ang VMware ay bahagi na ng kilusang industriyang ito mula pa noong simula, dahil ang isang bagong alon ng inobasyon ay hinihimok ng mga diskarte na nakabatay sa software na nagpapalawak ng mga kakayahan sa imprastraktura at nagpapatupad nito sa mga pinakabagong produkto.

Kaya, ang P4 ay isang target-independent at protocol-independent na programming language na ginagamit ng industriya at akademya upang natatanging tukuyin ang pag-uugali ng pagruruta ng packet bilang isang programa, na maaaring i-compile para sa maraming target. Sa ngayon, kasama sa mga target ang mga switch ng hardware at software, mga switch ng hypervisor, mga NPU, GPU, FPGA, SmartNIC at ASIC.

Ang mga pangunahing tampok ng wika ay makabuluhang pinalawak ang saklaw ng aplikasyon nito at tinitiyak ang mabilis na pagpapatupad nito sa mga arkitektura ng network.

Pagsisimula

Ang P4 ay isang bukas na proyekto, lahat ng nauugnay na impormasyon ay nasa website P4.org

Link ng repository https://github.com/p4lang, kung saan makakakuha ka ng halimbawa ng source code at mga tutorial.

Плагин para sa Eclipse na may suportang P4, ngunit maaari naming irekomenda P4 Studio mula sa Barefoot.

P4 programming language

Tingnan natin ang mga pangunahing abstraction ng kernel:

Pagtukoy sa mga Header β€” sa kanilang tulong, tinutukoy ang mga header ng protocol.

Tinutukoy ng kahulugan ng header ang:

  • paglalarawan ng mga format ng packet at mga pangalan ng field ng header
  • fixed at variable na pinapayagang mga field

Halimbawa

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

Mga parser β€” ang kanilang gawain ay i-parse ang mga headline.

Ang sumusunod na halimbawa ng parser ay tutukuyin ang paglipat ng panghuling estado ng makina mula sa isang paunang estado patungo sa isa sa dalawang huling estado:

P4 programming language

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

Mga Tabla β€” naglalaman ng mga estado ng makina na nag-uugnay sa mga key ng user sa mga aksyon. Aktibidad β€” isang paglalarawan kung paano dapat manipulahin ang pakete.

Ang mga talahanayan ay naglalaman ng mga estado (tinukoy sa antas ng pamamahala) para sa pagpasa ng packet, ilarawan ang Match-Action unit

Ang mga packet ay tinutugma ng:

  • Eksaktong tugma
  • Pinakamahabang Prefix Match (LPM)
  • Triple matching (masking)

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

Ang lahat ng posibleng aksyon ay dapat na tukuyin sa mga talahanayan nang maaga.

Ang mga aksyon ay binubuo ng code at data. Ang data ay mula sa antas ng pamamahala (hal. IP address/port number). Ang ilang partikular, loop-free primitives ay maaaring direktang tukuyin sa aksyon, ngunit ang bilang ng mga tagubilin ay dapat na predictable. Samakatuwid, ang mga aksyon ay hindi maaaring maglaman ng anumang mga loop o kondisyon na pahayag.

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

Mga module ng Match-Action β€” mga aksyon upang lumikha ng isang search key, maghanap sa isang talahanayan, magsagawa ng mga aksyon.

Ang isang tipikal na halimbawa ng isang module ay ipinapakita sa figure:

P4 programming language

Pagkokontrol ng daloy β€” ay nagpapahiwatig ng pagkakasunud-sunod kung saan ginagamit ang mga module ng Match-Action. Ito ay isang kinakailangang programa na tumutukoy sa mataas na antas ng logic at Match-Action sequence. Ang daloy ng kontrol ay nag-uugnay sa lahat ng mga bagay sa pamamagitan ng pagtukoy sa antas ng kontrol.

Mga panlabas na bagay ay mga partikular na bagay na may malinaw na tinukoy na arkitektura at mga interface ng API. Halimbawa, pagkalkula ng checksum, mga rehistro, mga counter, mga counter, atbp.

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 β€” mga istruktura ng data na nauugnay sa bawat pakete.

Mayroong 2 uri ng metadata:

  Custom na metadata (walang laman na istraktura para sa lahat ng mga pakete)
    Maaari mong ilagay ang anumang gusto mo dito
    Magagamit sa buong pipeline
    maginhawa para sa paggamit para sa iyong sariling mga layunin, halimbawa, para sa pag-iimbak ng isang package hash

  Panloob na metadata - ibinigay ng arkitektura
    Input port, output port ay tinukoy dito
    Timestamp noong nakapila ang packet, lalim ng pila
    multicast hash / multicast queue
    Priyoridad ng package, kahalagahan ng package
    Detalye ng output port (hal. output queue)

P4 compiler

Ang P4 compiler (P4C) ay bumubuo ng:

  1. Runtime ng data plane
  2. API para sa pamamahala ng estado ng makina sa data plane

P4 programming language

Halimbawa ng software switch sa P4 na wika

Maaaring ma-download ang mga source code mula sa repositoryo.

p4lang/p4c-bm: lumilikha ng JSON configuration para sa bmv2
p4lang/bmv2: isang software switch na nakakaunawa sa mga configuration ng JSON na bersyon ng bmv2

Ipinapakita ng figure ang diagram ng compilation ng proyekto:

P4 programming language

Mga manipulasyon sa mga talahanayan, mga rehistro ng pagbabasa, mga counter:

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


Ang source code ay naglalaman ng simple_switch_CLI program para sa maginhawang paggamit ng software switch API.

Maaari mong i-download ito at iba pang mga halimbawa mula sa repositoryo.

P4 programming language

PS Maagang bahagi ng tag-init na ito, lumagda ang Intel ng isang kasunduan upang makuha ang Barefoot Networks sa pagsisikap na mabilis na matugunan ang mga pangangailangan ng mga gumagamit ng Hyperscale Cloud. Gaya ng sinabi ni Navin Shenoy (executive vice president at general manager ng Data Center Group sa Intel Corporation), magbibigay-daan ito sa Intel na magbigay ng mas malalaking workload at mas maraming pagkakataon para sa mga customer ng data center.

Sa aking personal na opinyon, hindi natin dapat kalimutan na ang Intel ay nangunguna sa paggawa ng FPGA chips at mayroon itong mahusay na kapaligiran ng Quartus. Nangangahulugan ito na maaari nating asahan na sa pagdating ng Intel, hindi lamang palalawakin ng Barefoot ang linya ng produkto nito, kundi pati na rin ang Quartus at P4 Studio ay makakatanggap ng mga seryosong update at mga karagdagan sa linya ng Toffino at Toffino 2.

Opisyal na miyembro ng P4 community - kumpanya Pangkat ng salik.

Pinagmulan: www.habr.com

Magdagdag ng komento