P4 programlama dili

P4 programlama dili
P4, paket yönlendirme kurallarını programlamak için tasarlanmış bir programlama dilidir. C veya Python gibi genel amaçlı dillerden farklı olarak P4, ağ yönlendirme için optimize edilmiş bir dizi tasarıma sahip, alana özgü bir dildir.

P4, P4 Dil Konsorsiyumu adı verilen kar amacı gütmeyen bir kuruluş tarafından lisanslanan ve sürdürülen açık kaynaklı bir dildir. Aynı zamanda açık kaynaklı ağ projeleri için en büyük şemsiye kuruluşlardan ikisi olan Open Networking Foundation (ONF) ve Linux Foundation (LF) tarafından da desteklenmektedir.
Dil ilk olarak 2013 yılında icat edildi ve "Protokolden Bağımsız, Paket Yönlendirme İşlemci Programlaması" başlıklı 2014 SIGCOMM CCR makalesinde açıklandı.

P4, başlangıcından bu yana katlanarak büyüyüp gelişti ve hızla ağ bağdaştırıcıları, anahtarlar ve yönlendiriciler de dahil olmak üzere ağ cihazları tarafından paketlerin iletimini tanımlamak için bir standart haline geldi.

Open Networking Foundation'ın genel müdürü Guru Parulkar, "SDN ağ endüstrisini dönüştürdü ve P4, yönlendirmeye programlanabilirlik getirerek SDN'yi bir sonraki seviyeye taşıyor" dedi.

P4 dili ilk olarak Google, Intel, Microsoft Research, Barefoot, Princeton ve Stanford'dan bir grup mühendis ve araştırmacı tarafından oluşturuldu. Amaç basitti: Bir yazılım geliştiricisinin bir günde öğrenebileceği ve paketlerin ağlar arasında nasıl gönderildiğini doğru bir şekilde açıklamak için kullanabileceği, kullanımı kolay bir dil oluşturmak.

En başından beri, P4 hedeften bağımsız olacak şekilde tasarlandı (yani P4'te yazılan bir program, ASIC'ler, FPGA'ler, CPU'lar, NPU'lar ve GPU'lar gibi çeşitli hedefler üzerinde çalışacak şekilde değiştirilmeden derlenebilir).

Dil aynı zamanda protokolden bağımsızdır (yani bir P4 programı mevcut standart protokolleri tanımlayabilir veya yeni özel adresleme modlarını belirlemek için kullanılabilir).

Endüstride P4, cihaz programlama için kullanılır. Belki gelecekte Internet-RFC ve IEEE standartları da P4 spesifikasyonunu içerecektir.

P4 hem programlanabilir hem de sabit fonksiyonlu cihazlar için kullanılabilir. Örneğin, açık kaynaklı SONiC anahtar işletim sistemi tarafından kullanılan Anahtar Soyutlama Arayüzü (SAI) API'lerindeki anahtar işlem hattı davranışını doğru bir şekilde kaydetmek için kullanılır. P4 ayrıca ONF Stratum projesinde çeşitli sabit ve programlanabilir cihazlar arasındaki anahtarlama davranışını tanımlamak için kullanılır.

İlk kez, anahtarın ve ağ bağdaştırıcılarının davranışını açıklamak, dağıtımdan önce tüm ağın doğru bir yürütülebilir modelini oluşturmanıza olanak tanır. Büyük bulut sağlayıcıları, ağı tamamen yazılım kullanarak test edebilir ve hata ayıklayabilir, böylece pahalı donanım gerektirmeden laboratuvardaki birlikte çalışabilirlik testinin süresini ve maliyetini önemli ölçüde azaltır.

Ağ ekipmanı satıcıları, P4'ü kullanarak tüm ürünlerde ortak temel yönlendirme davranışı bekleyebilir, bu da test altyapısının yeniden kullanılmasına olanak tanır, yönetim yazılımı geliştirmeyi basitleştirir ve sonuçta birlikte çalışabilirliği sağlar.

Elbette P4, tamamen yeni yönlendirme yollarını açıklayan programlar yazmak için kullanılabilir. Örneğin P4, veri merkezlerinde, kurumsal ve servis sağlayıcı ağlarında telemetri ve ölçümler için yaygın olarak kullanılmaktadır.

Araştırma topluluğu da harekete geçti. Önde gelen birçok akademik ağ araştırma grubu, yük dengeleme, fikir birliği protokolleri ve anahtar değer önbelleğe alma dahil olmak üzere P4 programlarını temel alan heyecan verici yeni uygulamalar yayınladı. Yeni bir programlama paradigması yaratılıyor, inovasyon donanımdan yazılıma taşınıyor ve pek çok beklenmedik, yeni ve dahice fikrin ortaya çıkmasına olanak sağlıyor.

Geliştirici topluluğu, derleyiciler, işlem hatları, davranış modelleri, API'ler, test çerçeveleri, uygulamalar ve daha fazlası dahil olmak üzere kod geliştirmeye önemli katkılarda bulunmuştur. Alibaba, AT&T, Barefoot, Cisco, Fox Networks, Google, Intel, IXIA, Juniper Networks, Mellanox, Microsoft, Netcope, Netronome, VMware, Xilinx ve ZTE gibi şirketlerin özel geliştiricileri vardır; BUPT, Cornell, Harvard, MIT, NCTU, Princeton, Stanford, Technion, Tsinghua, UMass ve USI gibi üniversitelerden; ve CORD, FD.io, OpenDaylight, ONOS, OvS, SAI ve Stratum gibi açık kaynak projeleri, P4'ün bağımsız bir topluluk projesi olduğu gerçeğini vurguluyor.

P4 dili için tipik denetleyici nesli:

P4 programlama dili

Uygulama umutları

P4 programlama dili
Dil, yönlendirme uygulamalarına yönelik olduğundan gereksinim listesi ve tasarım seçenekleri, genel amaçlı programlama dillerine göre farklıdır. Dilin temel özellikleri şunlardır:

  1. Hedefin uygulanmasından bağımsızlık;
  2. Kullanılan protokol(ler)in bağımsızlığı;
  3. Alanın yeniden yapılandırılabilirliği.

Hedefin uygulanmasından bağımsızlık

P4 programları uygulamadan bağımsız olacak şekilde tasarlanmıştır; bu, genel amaçlı işlemciler, FPGA'ler, çip üzerinde sistem, ağ işlemcileri ve ASIC'ler gibi birçok farklı yürütme motoru türü için derlenebilecekleri anlamına gelir. Bu farklı makine türleri P4 hedefleri olarak bilinir ve her hedef, P4 kaynak kodunu bir hedef anahtar modeline dönüştürmek için bir derleyici gerektirir. Derleyici hedef cihaza, harici yazılıma ve hatta bir bulut hizmetine yerleştirilebilir. P4 programlarının orijinal hedeflerinin çoğu basit paket anahtarlamaya yönelik olduğundan, "P4 hedefi" daha doğru olsa da "P4 anahtarı" terimini duymak çok yaygındır.

Kullanılan protokol(ler)in bağımsızlığı

P4 protokolden bağımsızdır. Bu, dilin IP, Ethernet, TCP, VxLAN veya MPLS gibi ortak protokoller için yerel desteğe sahip olmadığı anlamına gelir. Bunun yerine P4 programcısı, programdaki gerekli protokollerin başlık formatlarını ve alan adlarını açıklar; bunlar da derlenen program ve hedef cihaz tarafından yorumlanır ve işlenir.

Sahada yeniden yapılandırılabilirlik

Protokol bağımsızlığı ve soyut dil modeli yeniden yapılandırılabilirliğe izin verir; P4 hedefleri, sistem konuşlandırıldıktan sonra paket işlemeyi değiştirebilmelidir. Bu yetenek geleneksel olarak sabit fonksiyonlu entegre devreler yerine genel amaçlı işlemciler veya ağ işlemcileri aracılığıyla yönlendirme ile ilişkilendirilmiştir.

Dilde belirli bir protokol kümesinin performansının optimizasyonunu engelleyecek hiçbir şey olmamasına rağmen, bu optimizasyonlar dil yazarı tarafından görülemez ve sonuçta sistemin esnekliğini, hedefleri ve bunların yeniden yapılandırılabilirliğini azaltabilir.

Dilin bu özellikleri başlangıçta yaratıcıları tarafından ağ altyapısında yaygın kullanımına odaklanılarak ortaya konmuştur.

Dil zaten birçok şirkette kullanılıyor:

1) Hiper ölçekli veri merkezleri;

Çinli Tencent şirketi dünyanın en büyük yatırım şirketi ve en büyük risk sermayesi şirketlerinden biridir. Tencent'in hem Çin'deki hem de dünyadaki diğer ülkelerdeki yan kuruluşları, çeşitli İnternet hizmetleri, yapay zeka ve elektronik eğlence alanındaki gelişmeler de dahil olmak üzere yüksek teknoloji işinin çeşitli alanlarında uzmanlaşmıştır.

P4 ve programlanabilir yönlendirme, şirketin ağ mimarisinde kullanılan ileri teknolojilerdir.

Yaratıcılardan biri olarak Google, P4'ün ağ endüstrisinde ve özellikle veri merkezi mimari tasarımında hızla benimsendiğini görmekten gurur duyuyor.

2) Ticari şirketler;

Goldman Sachs, ağ altyapısını yenilemek ve müşterilere daha iyi çözümler sunmak için açık kaynak topluluğuyla çalışmanın ve ortak standartlar ve çözümler geliştirmenin avantajlarından yararlanıyor.

3) Üretim;

Tüm ağ endüstrisi, yönlendirme davranışını benzersiz şekilde tanımlayan P4 gibi bir dilden faydalanacaktır. Cisco ayrıca ürün gruplarını bu dili kullanacak şekilde aktarmanın önemine inanıyor.

Juniper Networks, P4 ve P4 Runtime'ı bir dizi ürüne dahil etmiştir ve Juniper yerleşik işlemcisine ve onun yazılım koduna programlı erişim sağlar.

Ruijie Networks, P4'ün ve ağlara getirdiği faydaların güçlü bir destekçisidir. P4 ile şirket, geniş bir müşteri yelpazesine sınıfının en iyisi çözümleri yaratıp sunabiliyor.

4) Telekomünikasyon sağlayıcıları;

AT&T, P4'ü ilk benimseyenlerden biriydi; ağlarında görmek istediği davranışı tanımlamak için P4'ü kullanan ve ağında P4 programlanabilir yönlendirme cihazlarını ilk kullananlardan biriydi.

Deutsche Telekom'da dil, Access 4.0 programının bir parçası olarak temel ağ işlevlerinin prototipini oluşturmak için kullanılıyor.

5) Yarı iletken endüstrisi;

Dil, Barefoot'un ağ yönlendirme düzlemine yazılım yetenekleri sunmak için yeni bir paradigma uygulamasını sağladı.

Xilinx, P4.org'un kurucularından biriydi ve P4 dilinin geliştirilmesinde aktif olarak yer aldı ve onu SmartNIC ve NFV donanımı için FPGA tabanlı programlanabilir platformlara uyguladı ve SDNet tasarımının bir parçası olarak ilk P416 derleyicilerinden birini piyasaya sürdü.

6) Yazılım.

VMware, P4'ün ağda anlamlı ve gerekli dönüşümü sağlayan muazzam bir enerji, yenilik ve topluluk yarattığına inanıyor. VMware, altyapı yeteneklerini genişleten ve bunu en son ürünlere uygulayan yazılım tabanlı yaklaşımlar tarafından yönlendirilen yeni bir inovasyon dalgası nedeniyle, başından beri bu endüstri hareketinin bir parçası olmuştur.

Dolayısıyla P4, endüstri ve akademi tarafından paket yönlendirme davranışını bir program olarak benzersiz bir şekilde tanımlamak için kullanılan ve daha sonra birden fazla hedef için derlenebilen, hedeften bağımsız ve protokolden bağımsız bir programlama dilidir. Günümüzde hedefler arasında donanım ve yazılım anahtarları, hipervizör anahtarları, NPU'lar, GPU'lar, FPGA'ler, SmartNIC'ler ve ASIC'ler yer alıyor.

Dilin temel özellikleri, uygulama kapsamını önemli ölçüde genişletir ve ağ mimarilerinde hızlı bir şekilde uygulanmasını sağlar.

Nerede başlar

P4 açık bir projedir, ilgili tüm bilgiler web sitesinde bulunmaktadır P4.org

Depo bağlantısı https://github.com/p4langÖrnek kaynak kodunu ve eğitimleri alabileceğiniz yer.

Eklenti P4 destekli Eclipse için, ancak önerebiliriz P4 Stüdyo Yalınayak'tan.

P4 programlama dili

Çekirdeğin ana soyutlamalarına bakalım:

Başlıkları Tanımlama — onların yardımıyla protokol başlıkları belirlenir.

Başlık tanımı şunları belirtir:

  • paket formatlarının ve başlık alanı adlarının açıklaması
  • sabit ve değişken izin verilen alanlar

Örneğin

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

Ayrıştırıcılar — onların görevi manşetleri ayrıştırmaktır.

Aşağıdaki ayrıştırıcı örneği, makinenin son durumunun bir başlangıç ​​durumundan iki son durumdan birine geçişini belirleyecektir:

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

Tablitsy — kullanıcı anahtarlarını eylemlere bağlayan makine durumlarını içerir. Etkinlik — paketin nasıl işlenmesi gerektiğine ilişkin bir açıklama.

Tablolar, paket iletmeye yönelik durumları (yönetim düzeyinde tanımlanmış) içerir ve Eşleştirme Eylemi birimini tanımlar

Paketler şu şekilde eşleştirilir:

  • Tam eşleşme
  • En Uzun Önek Eşleşmesi (LPM)
  • Üçlü eşleştirme (maskeleme)

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

Olası tüm eylemler önceden tablolarda tanımlanmalıdır.

Eylemler kod ve verilerden oluşur. Veriler yönetim seviyesinden gelir (örn. IP adresleri/bağlantı noktası numaraları). Belirli, döngüsüz temel öğeler doğrudan eylemde belirtilebilir, ancak talimatların sayısı tahmin edilebilir olmalıdır. Bu nedenle eylemler herhangi bir döngü veya koşullu ifade içeremez.

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 modülleri — arama anahtarı oluşturma, tabloda arama yapma, eylemler gerçekleştirme eylemleri.

Tipik bir modül örneği şekilde gösterilmiştir:

P4 programlama dili

Kontrol akışı — Match-Action modüllerinin kullanılma sırasını belirtir. Bu, üst düzey mantığı ve Eşleştirme-Eylem sırasını tanımlayan zorunlu bir programdır. Kontrol akışı, kontrol düzeyini tanımlayarak tüm nesneleri birbirine bağlar.

Dış nesneler açıkça tanımlanmış bir mimariye ve API arayüzlerine sahip belirli nesnelerdir. Örneğin, sağlama toplamı hesaplaması, kayıtlar, sayaçlar, sayaçlar vb.

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
}

Meta veriler — her paketle ilişkili veri yapıları.

2 tür meta veri vardır:

  Özel meta veriler (tüm paketler için boş yapı)
    Buraya istediğini koyabilirsin
    Boru hattı boyunca mevcut
    örneğin bir paket karmasını saklamak için kendi amaçlarınız için kullanıma uygun

  Dahili meta veriler - mimari tarafından sağlanır
    Giriş portu, çıkış portu burada tanımlanır
    Paketin kuyruğa alındığı zaman damgası, kuyruk derinliği
    çok noktaya yayın karma / çok noktaya yayın kuyruğu
    Paket önceliği, paketin önemi
    Çıkış bağlantı noktası spesifikasyonu (örn. çıkış kuyruğu)

P4 derleyicisi

P4 derleyicisi (P4C) şunları üretir:

  1. Veri düzlemi çalışma zamanı
  2. Veri düzleminde makine durumunu yönetmek için API

P4 programlama dili

P4 dilinde yazılım anahtarı örneği

Kaynak kodları depodan indirilebilir.

p4lang/p4c-bm: bmv2 için JSON yapılandırmasını oluşturur
p4lang/bmv2: bmv2 sürümü JSON yapılandırmalarını anlayan bir yazılım anahtarı

Şekilde proje derleme şeması gösterilmektedir:

P4 programlama dili

Tablolarla manipülasyonlar, okuma kayıtları, sayaçlar:

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


Kaynak kodu, yazılım anahtarı API'sinin rahat kullanımı için simple_switch_CLI programını içerir.

Bunu ve diğer örnekleri depodan indirebilirsiniz.

P4 programlama dili

PS Bu yazın başlarında Intel, Hiper Ölçekli Bulut kullanıcılarının ihtiyaçlarını hızla karşılamak amacıyla Barefoot Networks'ü satın almak için bir anlaşma imzaladı. Navin Shenoy'un (Intel Corporation Veri Merkezi Grubunun başkan yardımcısı ve genel müdürü) söylediği gibi, bu, Intel'in veri merkezi müşterileri için daha büyük iş yükleri ve daha fazla fırsat sunmasına olanak tanıyacak.

Kişisel fikrime göre Intel'in FPGA çip üretiminde lider olduğunu ve mükemmel bir Quartus ortamına sahip olduğunu unutmamalıyız. Bu, Intel'in gelişiyle Barefoot'un yalnızca ürün yelpazesini genişletmekle kalmayıp aynı zamanda Quartus ve P4 Studio'nun Toffino ve Toffino 2 serisine ciddi güncellemeler ve eklemeler almasını bekleyebileceğimiz anlamına geliyor.

P4 topluluğunun resmi üyesi - şirket Faktör grubu.

Kaynak: habr.com

Yorum ekle