لغة البرمجة P4

لغة البرمجة P4
P4 هي لغة برمجة مصممة لبرمجة قواعد توجيه الحزم. على عكس اللغات ذات الأغراض العامة مثل C أو Python، فإن P4 هي لغة خاصة بالمجال مع عدد من التصميمات المحسنة لتوجيه الشبكة.

P4 هي لغة مفتوحة المصدر مرخصة وتديرها منظمة غير ربحية تسمى P4 Language Consortium. كما أنها مدعومة من قبل مؤسسة Open Networking Foundation (ONF) وLinux Foundation (LF)، وهما من أكبر المنظمات الجامعة لمشاريع الشبكات مفتوحة المصدر.
تمت صياغة اللغة في الأصل في عام 2013 وتم وصفها في ورقة SIGCOMM CCR لعام 2014 بعنوان "بروتوكول مستقل، برمجة معالج توجيه الحزمة".

منذ إنشائها، نمت P4 وتطورت بشكل كبير، وسرعان ما أصبحت معيارًا لوصف نقل الحزم بواسطة أجهزة الشبكة، بما في ذلك محولات الشبكة والمحولات وأجهزة التوجيه.

قال جورو بارولكار، المدير التنفيذي لمؤسسة Open Networking Foundation: "لقد أحدثت SDN تحولًا في صناعة الشبكات، وP4 ينقل SDN إلى المستوى التالي من خلال جلب قابلية البرمجة إلى التوجيه".

تم إنشاء لغة P4 في الأصل من قبل مجموعة من المهندسين والباحثين من Google وIntel وMicrosoft Research وBarefoot وPrinston وStanford. كان الهدف بسيطًا: إنشاء لغة سهلة الاستخدام يمكن لمطور البرامج تعلمها في يوم واحد واستخدامها لوصف كيفية إرسال الحزم عبر الشبكات بدقة.

منذ البداية، تم تصميم P4 ليكون هدفًا مستقلاً (أي يمكن تجميع البرنامج المكتوب بلغة P4 دون تغيير للتشغيل على مجموعة متنوعة من الأهداف مثل ASICs وFPGAs وCPUs وNPUs وGPUs).

اللغة أيضًا مستقلة عن البروتوكول (أي يمكن لبرنامج P4 أن يصف البروتوكولات القياسية الموجودة أو يمكن استخدامه لتحديد أوضاع معالجة مخصصة جديدة).

في الصناعة، يتم استخدام P4 لبرمجة الأجهزة. ربما ستتضمن معايير Internet-RFC وIEEE في المستقبل أيضًا مواصفات P4.

يمكن استخدام P4 لكل من الأجهزة ذات الوظائف الثابتة والقابلة للبرمجة. على سبيل المثال، يتم استخدامه لتسجيل سلوك خط أنابيب التبديل بدقة في واجهات برمجة تطبيقات واجهة تجريد التبديل (SAI) التي يستخدمها نظام التشغيل SONiC مفتوح المصدر. يتم استخدام 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، وكورنيل، وهارفارد، ومعهد ماساتشوستس للتكنولوجيا، وNCTU، وبرينستون، وستانفورد، والتخنيون، وتسينغهوا، وUMass، وUSI؛ والمشاريع مفتوحة المصدر بما في ذلك CORD وFD.io وOpenDaylight وONOS وOvS وSAI وStratur تسلط الضوء على حقيقة أن P4 هو مشروع مجتمعي مستقل.

الجيل النموذجي لوحدات التحكم للغة P4:

لغة البرمجة P4

احتمالات التطبيق

لغة البرمجة P4
وبما أن اللغة مخصصة لتطبيقات التوجيه، فإن قائمة المتطلبات وخيارات التصميم تختلف مقارنة بلغات البرمجة ذات الأغراض العامة. الملامح الرئيسية للغة هي:

  1. الاستقلال عن تنفيذ الهدف؛
  2. استقلالية البروتوكول (البروتوكولات) المستخدمة؛
  3. إعادة تشكيل المجال.

الاستقلال عن تنفيذ الهدف

تم تصميم برامج P4 لتكون مستقلة عن التنفيذ، مما يعني أنه يمكن تجميعها للعديد من الأنواع المختلفة من محركات التنفيذ، مثل المعالجات ذات الأغراض العامة، وFPGAs، والنظام على الرقائق، ومعالجات الشبكة، وASICs. تُعرف هذه الأنواع المختلفة من الأجهزة بأهداف P4، ويتطلب كل هدف مترجمًا لتحويل كود مصدر P4 إلى نموذج تبديل مستهدف. يمكن دمج المترجم في الجهاز المستهدف أو برنامج خارجي أو حتى خدمة سحابية. نظرًا لأن العديد من الأهداف الأصلية لبرامج P4 كانت مخصصة لتبديل الحزم البسيط، فمن الشائع جدًا سماع مصطلح "تبديل P4" على الرغم من أن "هدف P4" أكثر دقة.

استقلالية البروتوكول (البروتوكولات) المستخدمة

P4 مستقل عن البروتوكول. وهذا يعني أن اللغة لا تتمتع بدعم أصلي للبروتوكولات الشائعة مثل IP أو Ethernet أو TCP أو VxLAN أو MPLS. بدلاً من ذلك، يصف مبرمج P4 تنسيقات الرأس وأسماء الحقول للبروتوكولات المطلوبة في البرنامج، والتي بدورها يتم تفسيرها ومعالجتها بواسطة البرنامج المترجم والجهاز المستهدف.

إعادة تشكيل المجال

يسمح استقلال البروتوكول ونموذج اللغة المجردة بإعادة التكوين - يجب أن تكون أهداف P4 قادرة على تغيير معالجة الحزم بعد نشر النظام. لقد ارتبطت هذه الإمكانية تقليديًا بالتوجيه من خلال معالجات للأغراض العامة أو معالجات الشبكة بدلاً من الدوائر المتكاملة ذات الوظيفة الثابتة.

على الرغم من أنه لا يوجد شيء في اللغة من شأنه أن يمنع تحسين أداء مجموعة معينة من البروتوكولات، إلا أن هذه التحسينات غير مرئية لمؤلف اللغة ويمكن أن تقلل في النهاية من مرونة النظام والأهداف وقابلية إعادة تشكيلها.

تم وضع خصائص اللغة هذه في البداية من قبل منشئيها مع التركيز على استخدامها على نطاق واسع في البنية التحتية للشبكة.

اللغة مستخدمة بالفعل في العديد من الشركات:

1) مراكز البيانات واسعة النطاق؛

تعد شركة Tencent الصينية أكبر شركة استثمارية في العالم وواحدة من أكبر شركات رأس المال الاستثماري. تتخصص الشركات التابعة لشركة Tencent، سواء في الصين أو في بلدان أخرى حول العالم، في مجالات مختلفة من أعمال التكنولوجيا الفائقة، بما في ذلك خدمات الإنترنت المختلفة، والتطورات في مجال الذكاء الاصطناعي والترفيه الإلكتروني.

تعد P4 والتوجيه القابل للبرمجة من التقنيات المتقدمة المستخدمة في بنية شبكة الشركة.

وباعتبارها أحد المنشئين، تفتخر Google بملاحظة الاعتماد السريع لـ P4 في صناعة الشبكات وفي التصميم المعماري لمراكز البيانات على وجه الخصوص.

2) الشركات التجارية.

يستفيد Goldman Sachs من العمل مع مجتمع المصادر المفتوحة وتطوير معايير وحلول مشتركة لابتكار البنية التحتية للشبكة وتقديم حلول أفضل للعملاء.

3) الإنتاج.

ستستفيد صناعة الشبكات بأكملها من لغة مثل P4 التي تحدد سلوك إعادة التوجيه بشكل فريد. تؤمن شركة Cisco أيضًا بنقل خطوط إنتاجها لاستخدام هذه اللغة.

قامت Juniper Networks بتضمين P4 وP4 Runtime في عدد من المنتجات، وتوفر وصولاً برمجيًا إلى معالج 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، وأصدر أحد أوائل مترجمي P416 كجزء من تصميم SDNet.

6) البرمجيات.

تعتقد VMware أن P4 تخلق طاقة هائلة وابتكارًا ومجتمعًا يقود التحول الهادف والضروري في الشبكة. لقد كان VMware جزءًا من هذه الحركة الصناعية منذ البداية، حيث أن موجة جديدة من الابتكار مدفوعة بأساليب قائمة على البرمجيات تعمل على توسيع قدرات البنية التحتية وتنفيذها في أحدث المنتجات.

وبالتالي، P4 هي لغة برمجة مستقلة عن الهدف ومستقلة عن البروتوكول يتم استخدامها من قبل الصناعة والأوساط الأكاديمية لتحديد سلوك توجيه الحزم بشكل فريد كبرنامج، والذي بدوره يمكن تجميعه لأهداف متعددة. تشمل الأهداف اليوم محولات الأجهزة والبرامج، ومفاتيح برنامج Hypervisor، ووحدات NPU، ووحدات معالجة الرسومات، وFPGAs، وSmartNICs، وASICs.

تعمل الميزات الرئيسية للغة على توسيع نطاق تطبيقها بشكل كبير وتضمن تنفيذها السريع في بنيات الشبكات.

الشروع في العمل

P4 هو مشروع مفتوح، وجميع المعلومات ذات الصلة موجودة على الموقع P4.org

رابط المستودع https://github.com/p4lang، حيث يمكنك الحصول على أمثلة للتعليمات البرمجية المصدرية والبرامج التعليمية.

المساعد لـ Eclipse بدعم P4، لكن يمكننا أن نوصي به استوديو بي 4 من حافي القدمين.

لغة البرمجة P4

دعونا نلقي نظرة على التجريدات الرئيسية للنواة:

تحديد الرؤوس — بمساعدتهم، يتم تحديد رؤوس البروتوكول.

يحدد تعريف الرأس:

  • وصف تنسيقات الحزم وأسماء حقول الرأس
  • الحقول المسموح بها الثابتة والمتغيرة

مثلا

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

المحللون - مهمتهم هي تحليل العناوين الرئيسية.

سيحدد مثال المحلل التالي انتقال الحالة النهائية للجهاز من حالة أولية واحدة إلى إحدى الحالتين النهائيتين:

لغة البرمجة 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;
        }
    }…
}

الجداول - تحتوي على حالات الآلة التي تربط مفاتيح المستخدم بالإجراءات. نشاط - وصف لكيفية التعامل مع الحزمة.

تحتوي الجداول على حالات (محددة على مستوى الإدارة) لإعادة توجيه الحزم، وتصف وحدة Match-Action

تتم مطابقة الحزم بواسطة:

  • تطابق تام
  • أطول تطابق للبادئة (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;
}

وحدات مطابقة العمل — إجراءات لإنشاء مفتاح بحث، والبحث في جدول، وتنفيذ الإجراءات.

يظهر مثال نموذجي للوحدة في الشكل:

لغة البرمجة P4

التحكم في التدفق - يشير إلى الترتيب الذي يتم به استخدام وحدات Match-Action. هذا برنامج ضروري يحدد المنطق عالي المستوى وتسلسل إجراءات المطابقة. يربط تدفق التحكم جميع الكائنات عن طريق تحديد مستوى التحكم.

كائنات خارجية هي كائنات محددة ذات بنية محددة بوضوح وواجهات API. على سبيل المثال، حساب المجموع الاختباري، والسجلات، والعدادات، والعدادات، وما إلى ذلك.

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) بإنشاء:

  1. وقت تشغيل مستوى البيانات
  2. API لإدارة حالة الجهاز في مستوى البيانات

لغة البرمجة P4

مثال على تبديل البرنامج بلغة P4

يمكن تنزيل أكواد المصدر من المستودع.

p4lang/p4c-bm: إنشاء تكوين JSON لـ bmv2
p4lang/bmv2: محول برمجي يفهم تكوينات JSON لإصدار bmv2

يوضح الشكل مخطط تجميع المشروع:

لغة البرمجة P4

التعامل مع الجداول وسجلات القراءة والعدادات:

  • 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 للاستخدام المريح لواجهة برمجة تطبيقات تبديل البرنامج.

يمكنك تنزيل هذا وأمثلة أخرى من المستودع.

لغة البرمجة P4

PS في وقت مبكر من هذا الصيف، وقعت إنتل اتفاقية للاستحواذ على Barefoot Networks في محاولة لتلبية احتياجات مستخدمي Hyperscale Cloud بسرعة. وكما قال نافين شينوي (نائب الرئيس التنفيذي والمدير العام لمجموعة مراكز البيانات في شركة إنتل)، فإن هذا سيسمح لشركة إنتل بتوفير أعباء عمل أكبر والمزيد من الفرص لعملاء مراكز البيانات.

في رأيي الشخصي، لا ينبغي أن ننسى أن شركة Intel هي الشركة الرائدة في إنتاج شرائح FPGA وتتمتع ببيئة كوارتوس ممتازة. هذا يعني أنه يمكننا أن نتوقع أنه مع وصول Intel، لن تقوم Barefoot بتوسيع خط إنتاجها فحسب، بل ستتلقى أيضًا Quartus وP4 Studio تحديثات وإضافات جادة إلى خط Toffino وToffino 2.

عضو رسمي في مجتمع P4 - الشركة مجموعة العوامل.

المصدر: www.habr.com

إضافة تعليق