bahasa pengaturcaraan P4

bahasa pengaturcaraan P4
P4 ialah bahasa pengaturcaraan yang direka untuk memprogramkan peraturan penghalaan paket. Tidak seperti bahasa tujuan umum seperti C atau Python, P4 ialah bahasa khusus domain dengan beberapa reka bentuk yang dioptimumkan untuk penghalaan rangkaian.

P4 ialah bahasa sumber terbuka yang dilesenkan dan diselenggara oleh organisasi bukan untung yang dipanggil Konsortium Bahasa P4. Ia juga disokong oleh Yayasan Rangkaian Terbuka (ONF) dan Yayasan Linux (LF), dua daripada organisasi payung terbesar untuk projek rangkaian sumber terbuka.
Bahasa ini pada asalnya dicipta pada tahun 2013 dan diterangkan dalam kertas SIGCOMM CCR 2014 bertajuk "Protocol Independent, Packet Routing Processor Programming."

Sejak penubuhannya, P4 telah berkembang dan berkembang secara eksponen, dengan cepat menjadi standard untuk menerangkan penghantaran paket oleh peranti rangkaian, termasuk penyesuai rangkaian, suis dan penghala.

β€œSDN telah mengubah industri rangkaian, dan P4 membawa SDN ke peringkat seterusnya dengan membawa kebolehprograman kepada penghalaan,” kata Guru Parulkar, pengarah eksekutif Yayasan Rangkaian Terbuka.

Bahasa P4 pada asalnya dicipta oleh sekumpulan jurutera dan penyelidik dari Google, Intel, Microsoft Research, Barefoot, Princeton dan Stanford. Matlamatnya adalah mudah: mencipta bahasa yang mudah digunakan yang boleh dipelajari oleh pembangun perisian dalam sehari dan digunakan untuk menerangkan dengan tepat cara paket dihantar merentasi rangkaian.

Sejak awal lagi, P4 direka bentuk untuk bebas sasaran (iaitu program yang ditulis dalam P4 boleh disusun tidak berubah untuk dijalankan pada pelbagai sasaran seperti ASIC, FPGA, CPU, NPU dan GPU).

Bahasa ini juga bebas protokol (iaitu, program P4 boleh menerangkan protokol standard sedia ada atau digunakan untuk menentukan mod pengalamatan tersuai baharu).

Dalam industri, P4 digunakan untuk pengaturcaraan peranti. Mungkin pada masa hadapan piawaian Internet-RFC dan IEEE juga akan merangkumi spesifikasi P4.

P4 boleh digunakan untuk kedua-dua peranti fungsi boleh atur cara dan tetap. Contohnya, ia digunakan untuk merekodkan gelagat saluran paip suis dengan tepat dalam API Antara Muka Abstraksi Suis (SAI) yang digunakan oleh OS suis SONiC sumber terbuka. P4 juga digunakan dalam projek ONF Stratum untuk menerangkan tingkah laku penukaran merentas pelbagai peranti tetap dan boleh atur cara.

Buat pertama kalinya, menerangkan kelakuan suis dan penyesuai rangkaian membolehkan anda mencipta model boleh laku yang tepat bagi keseluruhan rangkaian sebelum penggunaan. Pembekal awan yang besar boleh menguji dan menyahpepijat rangkaian sepenuhnya menggunakan perisian, dengan ketara mengurangkan masa dan kos ujian kebolehoperasian dalam makmal tanpa memerlukan perkakasan yang mahal.

Dengan menggunakan P4, vendor peralatan rangkaian boleh menjangkakan gelagat penghalaan asas biasa merentas semua produk, membenarkan penggunaan semula infrastruktur ujian, memudahkan pembangunan perisian pengurusan dan akhirnya memastikan kesalingoperasian.

Sudah tentu, P4 boleh digunakan untuk menulis program yang menerangkan cara penghalaan yang benar-benar baharu. Sebagai contoh, P4 digunakan secara meluas untuk telemetri dan pengukuran dalam pusat data, perusahaan dan rangkaian pembekal perkhidmatan.

Komuniti penyelidikan juga telah meningkat. Beberapa kumpulan penyelidikan rangkaian akademik terkemuka telah menerbitkan aplikasi baharu yang menarik berdasarkan program P4, termasuk pengimbangan beban, protokol konsensus dan caching nilai utama. Paradigma pengaturcaraan baharu sedang dicipta, inovasi bergerak dari perkakasan ke perisian, membolehkan banyak idea yang tidak dijangka, baharu dan bijak muncul.

Komuniti pembangun telah memberikan sumbangan besar kepada pembangunan kod, termasuk penyusun, saluran paip, model tingkah laku, API, rangka kerja ujian, aplikasi dan banyak lagi. Syarikat seperti Alibaba, AT&T, Barefoot, Cisco, Fox Networks, Google, Intel, IXIA, Juniper Networks, Mellanox, Microsoft, Netcope, Netronome, VMware, Xilinx dan ZTE mempunyai pembangun khusus; daripada universiti termasuk BUPT, Cornell, Harvard, MIT, NCTU, Princeton, Stanford, Technion, Tsinghua, UMass, dan USI; dan projek sumber terbuka termasuk CORD, FD.io, OpenDaylight, ONOS, OvS, SAI dan Stratum menyerlahkan fakta bahawa P4 ialah projek komuniti bebas.

Penjanaan pengawal biasa untuk bahasa P4:

bahasa pengaturcaraan P4

Prospek permohonan

bahasa pengaturcaraan P4
Memandangkan bahasa itu bertujuan untuk aplikasi penghalaan, senarai keperluan dan pilihan reka bentuk adalah berbeza berbanding dengan bahasa pengaturcaraan tujuan umum. Ciri-ciri utama bahasa ialah:

  1. Kebebasan daripada pelaksanaan sasaran;
  2. Kebebasan protokol yang digunakan;
  3. Kebolehkonfigurasian semula medan.

Kebebasan daripada pelaksanaan sasaran

Program P4 direka bentuk untuk bebas pelaksanaan, bermakna ia boleh disusun untuk pelbagai jenis enjin pelaksanaan, seperti pemproses tujuan am, FPGA, sistem pada cip, pemproses rangkaian dan ASIC. Jenis mesin yang berbeza ini dikenali sebagai sasaran P4, dan setiap sasaran memerlukan pengkompil untuk menukar kod sumber P4 kepada model suis sasaran. Pengkompil boleh dibina ke dalam peranti sasaran, perisian luaran, atau bahkan perkhidmatan awan. Oleh kerana kebanyakan sasaran asal untuk program P4 adalah untuk penukaran paket yang mudah, adalah perkara biasa untuk mendengar istilah "suis P4" walaupun "sasaran P4" adalah lebih tepat.

Kebebasan protokol yang digunakan

P4 adalah bebas protokol. Ini bermakna bahasa tersebut tidak mempunyai sokongan asli untuk protokol biasa seperti IP, Ethernet, TCP, VxLAN atau MPLS. Sebaliknya, pengaturcara P4 menerangkan format pengepala dan nama medan bagi protokol yang diperlukan dalam program, yang seterusnya ditafsir dan diproses oleh program yang disusun dan peranti sasaran.

Kebolehkonfigurasian semula medan

Kebebasan protokol dan model bahasa abstrak membolehkan kebolehkonfigurasian semulaβ€”sasaran P4 seharusnya boleh menukar pemprosesan paket selepas sistem digunakan. Keupayaan ini secara tradisinya dikaitkan dengan penghalaan melalui pemproses tujuan umum atau pemproses rangkaian dan bukannya litar bersepadu fungsi tetap.

Walaupun tiada apa-apa dalam bahasa yang akan menghalang pengoptimuman prestasi set protokol tertentu, pengoptimuman ini tidak dapat dilihat oleh pengarang bahasa dan akhirnya boleh mengurangkan fleksibiliti sistem dan matlamat serta kebolehkonfigurasiannya.

Ciri-ciri bahasa ini pada mulanya ditetapkan oleh penciptanya dengan memberi tumpuan kepada penggunaan meluas dalam infrastruktur rangkaian.

Bahasa ini sudah digunakan di banyak syarikat:

1) Pusat data skala besar;

Syarikat China Tencent ialah syarikat pelaburan terbesar di dunia dan salah satu firma modal teroka terbesar. Anak-anak syarikat Tencent, di China dan di negara lain di seluruh dunia, mengkhusus dalam pelbagai bidang perniagaan berteknologi tinggi, termasuk pelbagai perkhidmatan Internet, perkembangan dalam bidang kecerdasan buatan dan hiburan elektronik.

P4 dan penghalaan boleh atur cara ialah teknologi canggih yang digunakan dalam seni bina rangkaian syarikat.

Sebagai salah satu pemula, Google berbesar hati untuk mengambil kira penggunaan pesat P4 dalam industri rangkaian dan dalam reka bentuk seni bina pusat data khususnya.

2) Syarikat komersial;

Goldman Sachs mengambil kesempatan bekerja dengan komuniti sumber terbuka dan membangunkan piawaian dan penyelesaian biasa untuk menginovasi infrastruktur rangkaian dan menyediakan penyelesaian yang lebih baik untuk pelanggan.

3) Pengeluaran;

Seluruh industri rangkaian akan mendapat manfaat daripada bahasa seperti P4 yang secara unik mentakrifkan tingkah laku pemajuan. Cisco juga percaya dalam memindahkan barisan produknya untuk menggunakan bahasa ini.

Juniper Networks telah memasukkan P4 dan P4 Runtime dalam beberapa produk, dan menyediakan akses program kepada pemproses terbenam Juniper dan kod perisiannya.

Ruijie Networks ialah penyokong kuat P4 dan faedah yang dibawanya kepada rangkaian. Dengan P4, syarikat boleh mencipta dan menyampaikan penyelesaian terbaik dalam kelasnya kepada pelbagai pelanggan.

4) Pembekal telekomunikasi;

AT&T ialah pengguna awal P4, salah satu yang pertama menggunakan P4 untuk menentukan tingkah laku yang ingin dilihat dalam rangkaiannya, dan menggunakan peranti pemajuan boleh atur cara P4 pada rangkaiannya.

Di Deutsche Telekom, bahasa ini digunakan untuk memprototaip fungsi rangkaian utama sebagai sebahagian daripada program Access 4.0.

5) Industri semikonduktor;

Bahasa ini membolehkan Barefoot melaksanakan paradigma baharu untuk menyampaikan keupayaan perisian kepada satah penghalaan rangkaian.

Xilinx ialah salah seorang pengasas P4.org dan terlibat secara aktif dalam pembangunan bahasa P4 dan melaksanakannya ke dalam platform boleh atur cara berasaskan FPGA untuk perkakasan SmartNIC dan NFV, mengeluarkan salah satu penyusun P416 pertama sebagai sebahagian daripada reka bentuk SDNet.

6) Perisian.

VMware percaya bahawa P4 mencipta tenaga, inovasi dan komuniti yang hebat yang memacu transformasi yang bermakna dan perlu dalam rangkaian. VMware telah menjadi sebahagian daripada pergerakan industri ini sejak awal, kerana gelombang inovasi baharu dipacu oleh pendekatan berasaskan perisian yang meluaskan keupayaan infrastruktur dan melaksanakannya dalam produk terkini.

Oleh itu, P4 ialah bahasa pengaturcaraan bebas sasaran dan bebas protokol yang digunakan oleh industri dan akademia untuk mentakrifkan gelagat penghalaan paket secara unik sebagai program, yang seterusnya boleh disusun untuk berbilang sasaran. Hari ini, sasaran termasuk suis perkakasan dan perisian, suis hipervisor, NPU, GPU, FPGA, SmartNIC dan ASIC.

Ciri-ciri utama bahasa meluaskan skop aplikasinya dengan ketara dan memastikan pelaksanaan pantas dalam seni bina rangkaian.

Bermula

P4 adalah projek terbuka, semua maklumat berkaitan ada di laman web P4.org

Pautan repositori https://github.com/p4lang, di mana anda boleh mendapatkan contoh kod sumber dan tutorial.

Плагин untuk Eclipse dengan sokongan P4, tetapi kami boleh mengesyorkan Studio P4 dari Barefoot.

bahasa pengaturcaraan P4

Mari kita lihat abstraksi utama kernel:

Menentukan Tajuk β€” dengan bantuan mereka, pengepala protokol ditentukan.

Takrif pengepala menentukan:

  • perihalan format paket dan nama medan pengepala
  • medan tetap dan boleh ubah dibenarkan

Sebagai contoh

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

Penghurai β€” tugas mereka adalah untuk menghuraikan tajuk utama.

Contoh penghurai berikut akan menentukan peralihan keadaan akhir mesin daripada satu keadaan awal kepada satu daripada dua keadaan akhir:

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

Jadual β€” mengandungi keadaan mesin yang memautkan kunci pengguna dengan tindakan. Aktiviti β€” penerangan tentang cara pakej harus dimanipulasi.

Jadual mengandungi keadaan (ditakrifkan pada peringkat pengurusan) untuk pemajuan paket, terangkan unit Match-Action

Paket dipadankan oleh:

  • Padanan tepat
  • Padanan Awalan Terpanjang (LPM)
  • Padanan tiga kali ganda (penutup)

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

Semua tindakan yang mungkin mesti ditakrifkan dalam jadual terlebih dahulu.

Tindakan terdiri daripada kod dan data. Data datang daripada peringkat pengurusan (cth alamat IP/nombor port). Primitif bebas gelung tertentu boleh ditentukan secara langsung dalam tindakan, tetapi bilangan arahan mesti boleh diramal. Oleh itu, tindakan tidak boleh mengandungi sebarang gelung atau pernyataan bersyarat.

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

Modul Perlawanan-Tindakan β€” tindakan untuk mencipta kunci carian, mencari dalam jadual, melakukan tindakan.

Contoh biasa modul ditunjukkan dalam rajah:

bahasa pengaturcaraan P4

Kawalan aliran β€” menunjukkan susunan modul Match-Action digunakan. Ini ialah program penting yang mentakrifkan logik tahap tinggi dan jujukan Padanan-Tindakan. Aliran kawalan menghubungkan semua objek dengan menentukan tahap kawalan.

Objek luar ialah objek khusus dengan seni bina yang jelas dan antara muka API. Contohnya, pengiraan checksum, daftar, pembilang, pembilang, dsb.

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 β€” struktur data yang dikaitkan dengan setiap pakej.

Terdapat 2 jenis metadata:

  Metadata tersuai (struktur kosong untuk semua pakej)
    Anda boleh meletakkan apa sahaja yang anda mahu di sini
    Tersedia sepanjang saluran paip
    mudah digunakan untuk tujuan anda sendiri, contohnya, untuk menyimpan cincang pakej

  Metadata dalaman - disediakan oleh seni bina
    Port input, port output ditakrifkan di sini
    Cap masa apabila paket itu dibariskan, kedalaman baris gilir
    cincang berbilang hantaran / baris gilir berbilang hantaran
    Keutamaan pakej, kepentingan pakej
    Spesifikasi port output (cth. baris gilir keluaran)

Penyusun P4

Pengkompil P4 (P4C) menjana:

  1. Masa jalan satah data
  2. API untuk mengurus keadaan mesin dalam satah data

bahasa pengaturcaraan P4

Contoh suis perisian dalam bahasa P4

Kod sumber boleh dimuat turun dari repositori.

p4lang/p4c-bm: mencipta konfigurasi JSON untuk bmv2
p4lang/bmv2: suis perisian yang memahami konfigurasi JSON versi bmv2

Rajah menunjukkan rajah kompilasi projek:

bahasa pengaturcaraan P4

Manipulasi dengan jadual, daftar bacaan, pembilang:

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


Kod sumber mengandungi program simple_switch_CLI untuk penggunaan mudah API suis perisian.

Anda boleh memuat turun ini dan contoh lain dari repositori.

bahasa pengaturcaraan P4

PS Pada awal musim panas ini, Intel menandatangani perjanjian untuk memperoleh Barefoot Networks dalam usaha untuk memenuhi keperluan pengguna Cloud Hyperscale dengan cepat. Seperti yang dikatakan Navin Shenoy (naib presiden eksekutif dan pengurus besar Kumpulan Pusat Data di Intel Corporation), ini akan membolehkan Intel menyediakan beban kerja yang lebih besar dan lebih banyak peluang untuk pelanggan pusat data.

Pada pendapat peribadi saya, kita tidak sepatutnya lupa bahawa Intel adalah peneraju dalam pengeluaran cip FPGA dan ia mempunyai persekitaran Quartus yang sangat baik. Ini bermakna bahawa kita boleh menjangkakan bahawa dengan ketibaan Intel, Barefoot bukan sahaja akan mengembangkan barisan produknya, malah Quartus dan P4 Studio akan menerima kemas kini dan penambahan yang serius pada barisan Toffino dan Toffino 2.

Ahli rasmi komuniti P4 - syarikat Kumpulan faktor.

Sumber: www.habr.com

Tambah komen