P4 proqramlaşdırma dili

P4 proqramlaşdırma dili
P4 paket marşrutlaşdırma qaydalarını proqramlaşdırmaq üçün nəzərdə tutulmuş proqramlaşdırma dilidir. C və ya Python kimi ümumi təyinatlı dildən fərqli olaraq, P4 şəbəkə marşrutlaşdırması üçün optimallaşdırılmış bir sıra dizaynları olan domenə xas dildir.

P4, P4 Language Consortium adlı qeyri-kommersiya təşkilatı tərəfindən lisenziyalaşdırılmış və saxlanılan açıq mənbə dilidir. O, həmçinin açıq mənbə şəbəkə layihələri üçün ən böyük çətir təşkilatlarından ikisi olan Open Networking Foundation (ONF) və Linux Foundation (LF) tərəfindən dəstəklənir.
Dil ilk olaraq 2013-cü ildə yaradılmış və 2014-cü ildə SIGCOMM CCR sənədində təsvir edilmiş “Protokoldan Müstəqil, Paket Yönləndirmə Prosessorunun Proqramlaşdırılması” adlı sənəddə təsvir edilmişdir.

Yarandığı gündən bəri, P4 eksponent olaraq böyüdü və inkişaf etdi, paketlərin şəbəkə cihazları, o cümlədən şəbəkə adapterləri, açarları və marşrutlaşdırıcıları ilə ötürülməsini təsvir etmək üçün tez bir standarta çevrildi.

Açıq Şəbəkə Fondunun icraçı direktoru Guru Parulkar, "SDN şəbəkə sənayesini dəyişdirdi və P4 marşrutlaşdırmada proqramlaşdırma imkanını təmin etməklə SDN-ni növbəti səviyyəyə qaldırdı" dedi.

P4 dili əvvəlcə Google, Intel, Microsoft Research, Barefoot, Princeton və Stanforddan olan bir qrup mühəndis və tədqiqatçı tərəfindən yaradılmışdır. Məqsəd sadə idi: proqram tərtibatçısı bir gün ərzində öyrənə biləcəyi və paketlərin şəbəkələr arasında necə göndərildiyini dəqiq təsvir etmək üçün istifadə edə biləcəyi asan istifadə olunan bir dil yaratmaq.

Əvvəldən P4 hədəfdən müstəqil olmaq üçün nəzərdə tutulmuşdu (yəni, P4-də yazılmış proqram ASIC, FPGA, CPU, NPU və GPU kimi müxtəlif hədəflərdə işləmək üçün dəyişmədən tərtib edilə bilər).

Dil həmçinin protokoldan müstəqildir (yəni, P4 proqramı mövcud standart protokolları təsvir edə bilər və ya yeni xüsusi ünvanlama rejimlərini təyin etmək üçün istifadə edilə bilər).

Sənayedə P4 cihazı proqramlaşdırma üçün istifadə olunur. Ola bilsin ki, gələcəkdə İnternet-RFC və IEEE standartlarına P4 spesifikasiyası da daxil olacaq.

P4 həm proqramlaşdırıla bilən, həm də sabit funksiyalı cihazlar üçün istifadə edilə bilər. Məsələn, o, açıq mənbəli SONiC keçid ƏS-nin istifadə etdiyi Switch Abstraction Interface (SAI) API-lərində keçid boru kəmərinin davranışını dəqiq qeyd etmək üçün istifadə olunur. P4 həmçinin ONF Stratum layihəsində müxtəlif sabit və proqramlaşdırıla bilən cihazlarda keçid davranışını təsvir etmək üçün istifadə olunur.

İlk dəfə olaraq, keçid və şəbəkə adapterlərinin davranışını təsvir etmək, yerləşdirmədən əvvəl bütün şəbəkənin dəqiq icra olunan modelini yaratmağa imkan verir. Böyük bulud provayderləri şəbəkəni tamamilə proqram təminatından istifadə edərək sınaqdan keçirə və sazlaya bilər ki, bu da bahalı avadanlıq tələb etmədən laboratoriyada qarşılıqlı fəaliyyət testinin vaxtını və dəyərini əhəmiyyətli dərəcədə azaldır.

P4-dən istifadə etməklə, şəbəkə avadanlığı təchizatçıları bütün məhsullar üzrə ümumi əsas marşrutlaşdırma davranışını gözləyə bilər ki, bu da sınaq infrastrukturunun təkrar istifadəsinə imkan verir, idarəetmə proqram təminatının işlənməsini sadələşdirir və nəticədə qarşılıqlı fəaliyyətin təmin olunmasını təmin edir.

Əlbəttə ki, P4 marşrutlaşdırmanın tamamilə yeni yollarını təsvir edən proqramları yazmaq üçün istifadə edilə bilər. Məsələn, P4 məlumat mərkəzlərində, müəssisə və xidmət provayder şəbəkələrində telemetriya və ölçmələr üçün geniş istifadə olunur.

Tədqiqat cəmiyyəti də güclənib. Bir neçə aparıcı akademik şəbəkə araşdırma qrupları yük balansı, konsensus protokolları və əsas dəyər keşləməsi daxil olmaqla, P4 proqramlarına əsaslanan maraqlı yeni proqramlar nəşr etdi. Yeni proqramlaşdırma paradiqması yaradılır, innovasiyalar aparatdan proqram təminatına keçir və çoxlu gözlənilməz, yeni və dahiyanə ideyaların yaranmasına şərait yaradır.

Tərtibatçı icması tərtibçilər, boru kəmərləri, davranış modelləri, API-lər, test çərçivələri, tətbiqlər və s. daxil olmaqla, kodun inkişafına mühüm töhfələr verib. Alibaba, AT&T, Barefoot, Cisco, Fox Networks, Google, Intel, IXIA, Juniper Networks, Mellanox, Microsoft, Netcope, Netronome, VMware, Xilinx və ZTE kimi şirkətlərin xüsusi tərtibatçıları var; BUPT, Cornell, Harvard, MIT, NCTU, Princeton, Stanford, Technion, Tsinghua, UMass və USI daxil olmaqla universitetlərdən; və CORD, FD.io, OpenDaylight, ONOS, OvS, SAI və Stratum daxil olmaqla açıq mənbə layihələri P4-ün müstəqil icma layihəsi olduğunu vurğulayır.

P4 dili üçün tipik nəzarətçi nəsil:

P4 proqramlaşdırma dili

Tətbiq perspektivləri

P4 proqramlaşdırma dili
Dil marşrutlaşdırma proqramları üçün nəzərdə tutulduğundan, tələblərin siyahısı və dizayn variantları ümumi təyinatlı proqramlaşdırma dilləri ilə müqayisədə fərqlidir. Dilin əsas xüsusiyyətləri bunlardır:

  1. Hədəfin həyata keçirilməsindən müstəqillik;
  2. İstifadə olunan protokol(lər)in müstəqilliyi;
  3. Sahənin yenidən konfiqurasiyası.

Hədəfin həyata keçirilməsindən müstəqillik

P4 proqramları icradan müstəqil olmaq üçün nəzərdə tutulmuşdur, yəni onlar ümumi təyinatlı prosessorlar, FPGA-lar, sistem-on-çiplər, şəbəkə prosessorları və ASIC-lər kimi bir çox müxtəlif növ icra mühərrikləri üçün tərtib edilə bilər. Bu müxtəlif növ maşınlar P4 hədəfləri kimi tanınır və hər bir hədəf P4 mənbə kodunu hədəf keçid modelinə çevirmək üçün tərtibçi tələb edir. Kompilyator hədəf cihazda, xarici proqramda və ya hətta bulud xidmətində quraşdırıla bilər. P4 proqramları üçün orijinal hədəflərin çoxu sadə paket kommutasiyası üçün olduğundan, "P4 hədəfi" daha dəqiq olsa da, "P4 keçidi" ifadəsini eşitmək çox yaygındır.

İstifadə olunan protokol(lər)in müstəqilliyi

P4 protokoldan müstəqildir. Bu o deməkdir ki, dilin IP, Ethernet, TCP, VxLAN və ya MPLS kimi ümumi protokollar üçün yerli dəstəyi yoxdur. Bunun əvəzinə, P4 proqramçısı proqramda tələb olunan protokolların başlıq formatlarını və sahə adlarını təsvir edir ki, bu da öz növbəsində tərtib edilmiş proqram və hədəf cihaz tərəfindən şərh edilir və işlənir.

Sahənin yenidən konfiqurasiyası

Protokol müstəqilliyi və abstrakt dil modeli yenidən konfiqurasiyaya imkan verir - P4 hədəfləri sistem yerləşdirildikdən sonra paket emalını dəyişdirə bilməlidir. Bu qabiliyyət ənənəvi olaraq sabit funksiyalı inteqral sxemlərdən daha çox ümumi təyinatlı prosessorlar və ya şəbəkə prosessorları vasitəsilə marşrutlaşdırma ilə əlaqələndirilir.

Dildə müəyyən protokollar dəstinin performansının optimallaşdırılmasına mane olacaq heç nə olmasa da, bu optimallaşdırmalar dil müəllifi üçün görünməzdir və nəticədə sistemin və məqsədlərin çevikliyini və onların yenidən konfiqurasiyasını azalda bilər.

Dilin bu xüsusiyyətləri əvvəlcə onun yaradıcıları tərəfindən şəbəkə infrastrukturunda geniş istifadəsinə diqqət yetirməklə müəyyən edilmişdir.

Dil artıq bir çox şirkətlərdə istifadə olunur:

1) Hipermiqyaslı məlumat mərkəzləri;

Çin şirkəti Tencent dünyanın ən böyük investisiya şirkəti və ən böyük vençur kapitalı firmalarından biridir. Tencent-in həm Çində, həm də dünyanın digər ölkələrində törəmə şirkətləri yüksək texnologiyalı biznesin müxtəlif sahələrində, o cümlədən müxtəlif internet xidmətləri, süni intellekt və elektron əyləncə sahəsindəki inkişaflar üzrə ixtisaslaşmışdır.

P4 və proqramlaşdırıla bilən marşrutlaşdırma şirkətin şəbəkə arxitekturasında istifadə olunan qabaqcıl texnologiyalardır.

Yaradıcılardan biri kimi Google P4-ün şəbəkə sənayesində və xüsusən də məlumat mərkəzinin memarlıq dizaynında sürətlə mənimsənilməsini fəxrlə qeyd edir.

2) Kommersiya şirkətləri;

Goldman Sachs şəbəkə infrastrukturunu yeniləşdirmək və müştərilər üçün daha yaxşı həllər təqdim etmək üçün açıq mənbə icması ilə işləmək və ümumi standartlar və həllər hazırlamaqdan faydalanır.

3) İstehsal;

Bütün şəbəkə sənayesi yönləndirmə davranışını unikal şəkildə müəyyən edən P4 kimi bir dildən faydalanacaq. Cisco həmçinin bu dildən istifadə etmək üçün məhsul xətlərini köçürməyə inanır.

Juniper Networks bir sıra məhsullara P4 və P4 Runtime-ı daxil edib və Juniper daxil edilmiş prosessoruna və onun proqram koduna proqramlı girişi təmin edir.

Ruijie Networks P4-ün və onun şəbəkələrə gətirdiyi faydaların güclü tərəfdarıdır. P4 ilə şirkət geniş müştərilərə öz sinfində ən yaxşı həllər yarada və təqdim edə bilər.

4) Telekommunikasiya provayderləri;

AT&T, şəbəkələrində görmək istədiyi davranışı müəyyən etmək üçün P4-dən istifadə edən və öz şəbəkəsində P4 proqramlaşdırıla bilən ötürmə cihazlarından istifadə edən ilklərdən biri olan P4-ün erkən tətbiqçisi idi.

Deutsche Telekom-da bu dil Access 4.0 proqramının bir hissəsi kimi əsas şəbəkə funksiyalarının prototipi üçün istifadə olunur.

5) Yarımkeçiricilər sənayesi;

Dil Barefoot-a proqram imkanlarını şəbəkə marşrutlaşdırma müstəvisinə çatdırmaq üçün yeni paradiqmanı həyata keçirməyə imkan verdi.

Xilinx P4.org-un yaradıcılarından biri idi və P4 dilinin inkişafında fəal iştirak etdi və onu SDNet dizaynının bir hissəsi olaraq ilk P416 tərtibçilərindən birini buraxaraq SmartNIC və NFV aparatları üçün FPGA əsaslı proqramlaşdırıla bilən platformalarda tətbiq etdi.

6) Proqram təminatı.

VMware hesab edir ki, P4 şəbəkədə mənalı və zəruri transformasiyaya səbəb olan böyük enerji, innovasiya və icma yaradır. VMware əvvəldən bu sənaye hərəkatının bir hissəsidir, çünki yeni innovasiya dalğası infrastruktur imkanlarını genişləndirən və onu ən son məhsullarda tətbiq edən proqram əsaslı yanaşmalarla idarə olunur.

Beləliklə, P4, paket marşrutlaşdırma davranışını bir proqram kimi unikal şəkildə müəyyən etmək üçün sənaye və akademiya tərəfindən istifadə olunan hədəfdən və protokoldan müstəqil proqramlaşdırma dilidir və bu da öz növbəsində bir neçə hədəf üçün tərtib edilə bilər. Bu gün hədəflərə aparat və proqram təminatı açarları, hipervizor açarları, NPU-lar, GPU-lar, FPGA-lar, SmartNIC-lər və ASIC-lər daxildir.

Dilin əsas xüsusiyyətləri onun tətbiq dairəsini əhəmiyyətli dərəcədə genişləndirir və şəbəkə arxitekturalarında sürətli tətbiqini təmin edir.

Başlarken

P4 açıq layihədir, bütün müvafiq məlumatlar internet saytındadır P4.org

Repozitor keçidi https://github.com/p4lang, burada nümunə mənbə kodu və dərslikləri əldə edə bilərsiniz.

Plugin P4 dəstəyi ilə Eclipse üçün, lakin tövsiyə edə bilərik P4 Studio Ayaqyalından.

P4 proqramlaşdırma dili

Nüvənin əsas abstraksiyalarına baxaq:

Başlıqların müəyyənləşdirilməsi — onların köməyi ilə protokol başlıqları müəyyən edilir.

Başlıq tərifi müəyyən edir:

  • paket formatlarının təsviri və başlıq sahəsi adları
  • sabit və dəyişən icazə verilən sahələr

Məsələn

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

Parserlər — onların vəzifəsi başlıqları təhlil etməkdir.

Aşağıdakı təhlil nümunəsi maşının son vəziyyətinin bir başlanğıc vəziyyətindən iki son vəziyyətdən birinə keçidini müəyyən edəcək:

P4 proqramlaşdırma dili

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

Masalar — istifadəçi düymələrini hərəkətlərlə əlaqələndirən maşın vəziyyətlərini ehtiva edir. Aktivlik — paketin necə manipulyasiya edilməsinin təsviri.

Cədvəllərdə paketlərin ötürülməsi üçün vəziyyətlər (idarəetmə səviyyəsində müəyyən edilir), Uyğunluq-Fəaliyyət bölməsini təsvir edin

Paketlər uyğun gəlir:

  • Dəqiq uyğunluq
  • Ən Uzun Prefiks Uyğunluğu (LPM)
  • Üçlü uyğunluq (maskalama)

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

Bütün mümkün hərəkətlər əvvəlcədən cədvəllərdə müəyyən edilməlidir.

Fəaliyyətlər kod və verilənlərdən ibarətdir. Məlumat idarəetmə səviyyəsindən gəlir (məsələn, IP ünvanları/port nömrələri). Müəyyən, döngəsiz primitivlər birbaşa hərəkətdə göstərilə bilər, lakin təlimatların sayı proqnozlaşdırıla bilən olmalıdır. Buna görə də, hərəkətlərdə heç bir döngə və ya şərti ifadələr ola bilməz.

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 modulları — axtarış açarı yaratmaq, cədvəldə axtarış etmək, hərəkətləri yerinə yetirmək üçün hərəkətlər.

Tipik bir modul nümunəsi şəkildə göstərilmişdir:

P4 proqramlaşdırma dili

Nəzarət axını — Match-Action modullarının istifadə qaydasını göstərir. Bu, yüksək səviyyəli məntiqi və Uyğunluq-Fəaliyyət ardıcıllığını təyin edən imperativ proqramdır. İdarəetmə axını nəzarət səviyyəsini təyin etməklə bütün obyektləri əlaqələndirir.

Xarici obyektlər aydın müəyyən edilmiş arxitekturaya və API interfeyslərinə malik xüsusi obyektlərdir. Məsələn, yoxlama məbləğinin hesablanması, registrlər, sayğaclar, sayğaclar və s.

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 — hər bir paketlə əlaqəli məlumat strukturları.

2 növ metadata var:

  Fərdi metadata (bütün paketlər üçün boş struktur)
    İstədiyinizi bura qoya bilərsiniz
    Boru kəməri boyunca mövcuddur
    öz məqsədləriniz üçün istifadə etmək üçün əlverişlidir, məsələn, paket hashını saxlamaq üçün

  Daxili metadata - arxitektura tərəfindən təmin edilir
    Giriş portu, çıxış portu burada müəyyən edilir
    Paketin növbəyə qoyulduğu vaxt möhürü, növbənin dərinliyi
    multicast hash / multicast növbə
    Paket prioriteti, paket əhəmiyyəti
    Çıxış portunun spesifikasiyası (məsələn, çıxış növbəsi)

P4 kompilyatoru

P4 kompilyatoru (P4C) aşağıdakıları yaradır:

  1. Məlumat təyyarəsinin işləmə müddəti
  2. Məlumat müstəvisində maşın vəziyyətini idarə etmək üçün API

P4 proqramlaşdırma dili

P4 dilində proqram keçidinin nümunəsi

Mənbə kodları depodan endirilə bilər.

p4lang/p4c-bm: bmv2 üçün JSON konfiqurasiyasını yaradır
p4lang/bmv2: bmv2 versiyası JSON konfiqurasiyalarını anlayan proqram açarı

Şəkil layihənin tərtib diaqramını göstərir:

P4 proqramlaşdırma dili

Cədvəllər, oxu registrləri, sayğaclarla manipulyasiyalar:

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


Mənbə kodu proqram keçid API-nin rahat istifadəsi üçün simple_switch_CLI proqramını ehtiva edir.

Bu və digər nümunələri depodan yükləyə bilərsiniz.

P4 proqramlaşdırma dili

PS Bu yayın əvvəlində Intel Hyperscale Cloud istifadəçilərinin ehtiyaclarını tez bir zamanda qarşılamaq məqsədilə Barefoot Networks-i əldə etmək üçün müqavilə imzaladı. Navin Şenoyun (İcraçı vitse-prezident və İntel Korporasiyasının Məlumat Mərkəzi Qrupunun baş meneceri) dediyi kimi, bu, Intel-ə məlumat mərkəzi müştəriləri üçün daha böyük iş yükləri və daha çox imkanlar təqdim etməyə imkan verəcək.

Mənim şəxsi fikrimcə, unutmaq olmaz ki, Intel FPGA çiplərinin istehsalında liderdir və əla Quartus mühitinə malikdir. Bu o deməkdir ki, Intel-in gəlişi ilə Barefoot nəinki məhsul xəttini genişləndirəcək, həm də Quartus və P4 Studio-nun Toffino və Toffino 2 xəttinə ciddi yeniləmələr və əlavələr alacağını gözləmək olar.

P4 icmasının rəsmi üzvü - şirkət Faktor qrupu.

Mənbə: www.habr.com

Добавить комментарий