P4 هي لغة برمجة مصممة لبرمجة قواعد توجيه الحزمة. بخلاف لغة الأغراض العامة مثل C أو Python ، فإن P4 هي لغة خاصة بالمجال مع عدد من التركيبات المحسنة لتوجيه الشبكة.
P4 هي لغة مفتوحة المصدر مرخصة ومدعومة من قبل منظمة غير ربحية تسمى P4 Language Consortium. يتم دعمها أيضًا من قِبل مؤسسة الشبكات المفتوحة (ONF) ومؤسسة Linux (LF) ، أكبر منظمتين جامعتين في مشاريع الشبكات مفتوحة المصدر.
تمت صياغة اللغة في الأصل في عام 2013 وتم وصفها في عام 2014 في مستند SIGCOMM CCR بعنوان "برمجة بروتوكول معالجة حزم البيانات المستقلة".
منذ نشأتها ، نمت P4 بشكل كبير وتطورت ، وأصبحت بسرعة المعيار لوصف إرسال الحزمة بواسطة أجهزة الشبكة ، بما في ذلك محولات الشبكة والمحولات وأجهزة التوجيه.
وقال جورو بارولكار ، المدير التنفيذي لمؤسسة Open Networking Foundation: "لقد حولت SDN صناعة الشبكات ، و P4 تنقل SDN إلى المستوى التالي ، مما يوفر قابلية للبرمجة في مجال التوجيه".
تم إنشاء لغة P4 في الأصل بواسطة مجموعة من المهندسين والباحثين من Google و Intel و Microsoft Research و Barefoot و Princeton و Stanford. كان الهدف بسيطًا: إنشاء لغة سهلة الاستخدام يمكن لمطور البرامج تعلمها في يوم واحد ، واستخدامها لوصف دقيق لكيفية إرسال الحزم عبر الشبكة.
منذ البداية ، تم تصميم P4 بحيث يكون مستقلاً عن الهدف (على سبيل المثال ، يمكن تجميع البرنامج المكتوب في P4 دون تغيير لأغراض مختلفة ، مثل ASIC و FPGA و CPU و NPU و GPU).
أيضًا ، تكون اللغة مستقلة عن البروتوكول (على سبيل المثال ، يمكن لبرنامج P4 وصف البروتوكولات القياسية الحالية أو يمكن استخدامها للإشارة إلى أوضاع عنونة مخصصة جديدة).
في الصناعة ، يتم استخدام P4 لأجهزة البرمجة. ربما في المستقبل ، ستشتمل معايير Internet-RFC و IEEE أيضًا على مواصفات P4.
يمكن استخدام P4 لكل من الأجهزة القابلة للبرمجة والأجهزة الثابتة. على سبيل المثال ، يتم استخدامه لتسجيل سلوك خط أنابيب التبديل بدقة في واجهات برمجة تطبيقات Switch Abstraction Interface (SAI) المستخدمة من قبل نظام التشغيل SONIC switch مفتوح المصدر. يستخدم P4 أيضًا في مشروع ONF Stratum لوصف سلوك التبديل عبر مجموعة متنوعة من الأجهزة الثابتة والقابلة للبرمجة.
يتيح لك وصف سلوك المحولات ومحولات الشبكة لأول مرة إنشاء نموذج قابل للتنفيذ دقيق للشبكة بالكامل قبل النشر. يمكن لموفري الخدمات السحابية الكبيرة اختبار الشبكة وتصحيحها بالكامل باستخدام البرنامج ، مما يقلل بشكل كبير من وقت وتكلفة اختبار التفاعلات المعملية دون الحاجة إلى معدات باهظة الثمن.
باستخدام P4 ، يمكن لبائعي معدات الشبكات الاعتماد على سلوك التوجيه الأساسي والشائع عبر جميع المنتجات ، مما يسمح بإعادة استخدام البنية التحتية للاختبار ، ويبسط تطوير برامج الإدارة ، ويضمن في النهاية إمكانية التشغيل البيني.
بالطبع ، يمكن استخدام P4 لكتابة البرامج التي تصف طرق التوجيه الجديدة تمامًا. على سبيل المثال ، يستخدم P4 على نطاق واسع للقياس عن بعد والقياسات في مراكز البيانات وشبكات المؤسسات ومقدمي الخدمات.
تكثيف مجتمع البحوث. نشرت العديد من مجموعات أبحاث تقنية الشبكات الأكاديمية الرائدة تطبيقات جديدة مثيرة للاهتمام تعتمد على برامج P4 ، بما في ذلك موازنة التحميل ، والبروتوكولات المتسقة ، والتخزين المؤقت للقيمة الرئيسية. يتم إنشاء نموذج برمجة جديد ، حيث تنتقل الابتكارات من أجهزة إلى أخرى ، مما يتيح ظهور العديد من الأفكار غير المتوقعة والجديدة والرائعة.
قدم مجتمع التطوير مساهمات كبيرة في تطوير الكود ، بما في ذلك المجمعين وخطوط الأنابيب والنماذج السلوكية وواجهات برمجة التطبيقات وبيئات الاختبار والتطبيقات والمزيد. يوجد مطورون متخصصون في شركات مثل Alibaba و AT&T و Barefoot و Cisco و Fox Networks و Google و Intel و IXIA و Juniper Networks و Mellanox و Microsoft و Netcope و Netronome و VMware و Xilinx و ZTE؛ من الجامعات ، بما في ذلك BUPT و Cornell و Harvard و MIT و NCTU و Princeton و Stanford و Technion و Tsinghua و UMass و USI ؛ والمشاريع مفتوحة المصدر ، بما في ذلك CORD و FD.io و OpenDaylight و ONOS و OvS و SAI و Stratum ، تبرز حقيقة أن P4 هو مشروع مجتمع مستقل.
جيل تحكم P4 نموذجي:
آفاق التطبيق
نظرًا لأن اللغة مخصصة لتطبيقات التوجيه ، فإن قائمة المتطلبات وخيارات التصميم مختلفة عن لغات البرمجة للأغراض العامة. الملامح الرئيسية للغة هي:
- الاستقلال عن التنفيذ المستهدف ؛
- استقلالية البروتوكول (البروتوكولات) المستخدمة ؛
- إعادة تشكيل المجال.
الاستقلال عن التنفيذ المستهدفتم تصميم برامج P4 لتكون مستقلة عن التنفيذ ، مما يعني أنه يمكن تجميعها للعديد من أنواع الأجهزة التنفيذية المختلفة ، مثل معالجات للأغراض العامة ، و FPGA ، والأنظمة على الرقاقة ، ومعالجات الشبكات ، و ASIC. تُعرف هذه الأنواع المختلفة من الأجهزة بأهداف P4 ، ومترجم مطلوب لكل هدف لتحويل شفرة مصدر P4 إلى نموذج التبديل الهدف. يمكن تضمين برنامج التحويل البرمجي في الجهاز المستهدف أو البرامج الخارجية أو حتى خدمة السحاب. نظرًا لاستخدام العديد من الأهداف الأصلية لبرامج P4 لتبديل الحزم البسيطة ، يمكنك غالبًا سماع مصطلح "P4 switch" ، حتى لو كان استخدام "الهدف P4" أكثر صحة.
استقلالية البروتوكول (البروتوكولات) المستخدمةP4 هو بروتوكول مستقل. هذا يعني أن اللغة لا تحتوي على دعم داخلي للبروتوكولات الشائعة مثل IP أو Ethernet أو TCP أو VxLAN أو MPLS. بدلاً من ذلك ، يصف مبرمج P4 تنسيقات الرأس وأسماء الحقول الخاصة بالبروتوكولات المطلوبة في البرنامج ، والتي بدورها يتم تفسيرها ومعالجتها بواسطة البرنامج المترجم والجهاز الهدف.
إعادة تشكيل المجاليسمح استقلال البروتوكول ونموذج اللغة المجردة بإعادة التكوين - يجب أن تكون أهداف P4 قادرة على تغيير معالجة الحزم بعد نشر النظام. ارتبطت هذه الميزة تقليديًا بالتوجيه عبر معالجات للأغراض العامة أو معالجات للشبكات ، بدلاً من الدوائر المتكاملة ذات الوظائف الثابتة.
على الرغم من عدم وجود لغة يمكن أن تمنع تحسين مجموعة معينة من البروتوكولات ، إلا أن هذه التحسينات تكون غير مرئية لمؤلف اللغة ويمكن أن تقلل في النهاية من مرونة النظام والغرض وإعادة تشكيلها.
وضعت هذه الخصائص للغة في الأصل من قبل المبدعين مع التوجه لاستخدامها على نطاق واسع في البنية التحتية للشبكة.
بالفعل ، يتم استخدام اللغة في العديد من الشركات:
1) مراكز بيانات Hyperscale ؛تعد شركة Tencent الصينية أكبر شركة استثمارية في العالم وواحدة من أكبر شركات رأس المال الاستثماري. تتخصص فروع Tencent ، في الصين وفي بلدان أخرى في العالم ، في مجالات مختلفة من الأعمال ذات التقنية العالية ، بما في ذلك خدمات الإنترنت المختلفة والتطورات في مجال الذكاء الاصطناعي والترفيه الإلكتروني.
تعد P4 والتوجيه القابل للبرمجة من التقنيات المتقدمة المستخدمة في بنية شبكة الشركة.
كواحد من المبدعين ، تفخر Google بملاحظة التقديم السريع لـ P4 في صناعة الشبكات ، وخاصة في مجال التصميم المعماري لمراكز البيانات.
2) الشركات التجارية.جولدمان ساكس ، الذي يستفيد من العمل مع مجتمع المصادر المفتوحة وتطوير معايير وحلول مشتركة ، يجلب بالفعل الابتكار إلى البنية التحتية للشبكة ويوفر أفضل الحلول للعملاء.
3) الإنتاج ؛ستستفيد صناعة الشبكة بالكامل من لغة مثل P4 ، والتي تحدد بشكل فريد سلوك تحويل المكالمات. ضع في اعتبارك أيضًا في Cisco نقل خطوط منتجاتها لاستخدام هذه اللغة.
قامت Juniper Networks بتضمين وقت التشغيل P4 و P4 في عدد من المنتجات ، وتوفر وصولاً برنامجيًا إلى المعالج المدمج في Juniper ورمز البرنامج الخاص به.
Ruijie Networks هي داعم نشط لـ P4 والفوائد التي يحققها على الشبكات. مع P4 ، يمكن للشركة إنشاء وتقديم أفضل الحلول في فئتها لمجموعة واسعة من العملاء.
4) مزودي الاتصالات ؛كان AT&T أحد أوائل الداعمين لـ P4 ، وكان أول من استخدم P4 لتحديد السلوك الذي أراد رؤيته على الشبكات ، واستخدام أجهزة إعادة التوجيه القابلة للبرمجة P4 على شبكته.
تستخدم Deutsche Telekom اللغة لتكوين وظائف شبكة المفاتيح الأولية كجزء من Access 4.0.
5) صناعة أشباه الموصلات.مكّنت اللغة من تنفيذ نموذج جديد لنقل إمكانيات البرنامج إلى مستوى توجيه الشبكة بواسطة Barefoot.
كانت Xilinx واحدة من مؤسسي P4.org وشاركت بنشاط في تطوير لغة P4 ونفذتها في المنصات القابلة للبرمجة القائمة على FPGA لمعدات SmartNIC و NFV ، حيث أصدرت واحدة من أوائل مجمعي P4
16 كجزء من تصميم SDNet.
6) البرمجيات.تعتقد VMware أن P4 يخلق طاقة هائلة وابتكارًا ومجتمعًا يؤدي إلى تحويل هادف وضروري في الشبكة. كانت VMware في الأصل جزءًا من هذه الحركة الصناعية ، حيث أن موجة جديدة من الابتكار مدفوعة بنُهُج البرمجيات التي تعمل على توسيع قدرات البنية التحتية وتنفيذها في أحدث المنتجات.
وبالتالي ، فإن P4 هي لغة برمجة مستقلة عن الأهداف ومستقلة عن البروتوكول تستخدمها الصناعة والمجتمع العلمي لتحديد سلوك توجيه الحزمة بشكل فريد كبرنامج ، والذي بدوره يمكن تجميعه لأغراض متعددة. تشمل أهداف اليوم مفاتيح الأجهزة والبرامج ، ومفاتيح برنامج Hypervisor ، و NPUs ، و GPUs ، و FPGA ، و SmartNIC ، و ASIC.
تعمل الميزات الرئيسية للغة على توسيع نطاق تطبيقها بشكل كبير وتوفير تنفيذها السريع في بنية الشبكة.
من أين تبدأ
P4 هو مشروع مفتوح المصدر ؛ جميع المعلومات الحالية موجودة على موقع
P4.orgرابط إلى مستودع
https://github.com/p4lang ، حيث يمكنك الحصول على الكود المصدري من الأمثلة ومواد التدريب.
البرنامج المساعد لـ Eclipse مع دعم P4 ، لكننا نوصي باستخدام
P4 Studio من Barefoot.
دعنا نحلل التجريدات الرئيسية للنواة:
تعريف الرؤوس - مع تحديد رؤوس المساعدة الخاصة بالبروتوكول.
تعريف مجموعات الرؤوس:
- وصف تنسيقات الحزمة وأسماء حقول الرأس
- الحقول الثابتة والمتغيرة المسموح بها
على سبيل المثال
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;
}
المحللون هم مهمتهم لتحليل الرؤوس.
سيحدد مثال المحلل اللغوي التالي انتقال الحالة النهائية لجهاز ما من حالة أولية واحدة إلى واحدة من حالتين أخيرتين:
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;
}
}…
}
الجداول - تحتوي على حالة الجهاز الذي يربط مفاتيح المستخدم بالإجراءات.
الإجراءات - وصف لكيفية التعامل مع الحزمة.
تحتوي الجداول على حالات (محددة على المستوى الإداري) لإعادة توجيه الحزم ، ووصف وحدة عمل المطابقة
تتم مطابقة الحزمة بواسطة:
- تطابق تام
- أطول تطابق مع بادئة (LPM)
- مطابقة ثلاثية (اخفاء)
table ipv4_lpm{
reads {
ipv4.dstAddr: lpm;
} actions {
forward();
}
}
يجب تحديد جميع الإجراءات الممكنة في الجداول مقدما.
تتكون الإجراءات من الكود والبيانات. تصل البيانات إلى مستوى الإدارة (مثل عناوين IP / أرقام المنافذ). يمكن تحديد بدائل معينة بدون حلقات مباشرة في العمل ، ولكن يجب أن يكون عدد الأوامر متوقعًا. لذلك ، لا يمكن أن تحتوي الإجراءات على أي حلقات أو عبارات شرطية.
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;
}
وحدات مطابقة الإجراء - إجراءات لإنشاء مفتاح بحث ، والبحث في جدول ، وتنفيذ إجراءات.
يظهر مثال على الوحدة النمطية في الشكل:
تدفق التحكم - يشير إلى ترتيب تطبيق وحدات مطابقة الإجراء. هذا برنامج ضروري يحدد المنطق عالي المستوى وتسلسل مطابقة العمل. يربط تدفق التحكم كل الكائنات ، مع تحديد مستوى التحكم.
الكائنات الخارجية هي
كائنات محددة لها بنية وواجهات برمجة تطبيقات محددة بوضوح. على سبيل المثال ، حساب المجموع الاختباري والسجلات والعدادات والعدادات ، إلخ.
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
}
بيانات التعريف هي بنية البيانات المرتبطة بكل حزمة.
هناك نوعان من البيانات الوصفية:
بيانات تعريف مخصصة (بنية فارغة لجميع الحزم)يمكنك وضع كل ما تريد هنا
متاح في جميع أنحاء خط الأنابيب
مناسب للاستخدام الخاص بك ، على سبيل المثال ، لتخزين تجزئة الحزمة
البيانات الوصفية الداخلية - المقدمة من الهندسة المعماريةمنفذ الإدخال ، يتم تعريف منفذ الإخراج هنا
الطابع الزمني عند وضع قائمة الانتظار في قائمة الانتظار ، عمق قائمة الانتظار
تجزئة الإرسال المتعدد / قائمة انتظار الإرسال المتعدد
حزمة الأولوية ، أهمية الحزمة
مواصفات منفذ الإخراج (مثل قائمة انتظار الإخراج)
مترجم P4
مترجم P4 (P4C) يولد:
- وقت تشغيل طائرة البيانات
- API للسيطرة على حالة الجهاز في طائرة البيانات
مثال على تبديل البرنامج في P4
يمكن تنزيل أكواد المصدر من المستودع.
p4lang / p4c-bm: ينشئ تكوين JSON لـ bmv2
p4lang / bmv2: رمز تبديل برنامج يفهم تكوينات JSON لإصدار bmv2
يوضح الشكل مخطط تجميع المشروع:
التلاعب مع الجداول ، وقراءة السجلات ، عداد:
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>
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>
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>
يحتوي الكود المصدري على برنامج simple_switch_CLI للاستخدام المريح لواجهة برمجة التطبيقات لمحول البرنامج.
يمكنك تنزيل هذا وأمثلة أخرى في المستودع.
PS في أوائل الصيف ، وقعت شركة Intel اتفاقية لشراء Barefoot Networks ، بهدف تلبية احتياجات مستخدمي Hyperscale Cloud بسرعة. وفقًا لـ Navin Shenoy (نائب الرئيس التنفيذي والمدير العام لمجموعة مركز البيانات في شركة Intel Corporation) - سيتيح هذا لشركة Intel توفير أعباء عمل أكبر وفرص أكبر لعملاء مركز البيانات.
في رأيي الشخصي ، لا تنس أن Intel رائدة في إنتاج رقائق FPGA ولديها بيئة Quartus ممتازة. لذلك يمكنك توقع أنه مع ظهور Intel ، لن تقوم Barefoot بتوسيع خط منتجاتها فحسب ، بل ستتلقى Quartus و P4 Studio أيضًا تحديثات وإضافات خطيرة على خط Toffino و Toffino 2.
العضو الرسمي في مجتمع P4 هو
Factor Group .