[ورقة] [فيديو]
UDPDK عبارة عن حزمة UDP صغيرة تعتمد على DPDK للاتصال السريع من نقطة إلى نقطة بين الخوادم.
إنه يعمل بالكامل في مساحة المستخدم، بحيث يمكنك نقل الحزم الخاصة بك بسرعة دون المرور عبر مكدس النواة المرهق.
علاوة على ذلك، وبفضل واجهة برمجة التطبيقات (API) المشابهة لـ POSIX، أصبح نقل التطبيقات الحالية إلى UDPDK أمرًا سهلاً للغاية! 1
ما هو UDPDK:
ما هو UDPDK ليس:
1 قد تكون بعض الميزات غير مدعومة حتى الآن.
لاستخدام UDPDK، يجب أن تكون أجهزتك مجهزة ببطاقات NIC التي تدعم DPDK؛ توجد هذه عادةً في الخوادم، وليس في أجهزة الكمبيوتر المحمولة وأجهزة سطح المكتب. قائمة الأجهزة المدعومة رسميًا من قبل DPDK متاحة هنا. على وجه التحديد، تم تطوير UDPDK واختباره على Intel X710-DA2 مع برامج تشغيل igb_uio و vfio ؛ يجب أن تعمل الأجهزة الأخرى طالما أن DPDK يدعمها.
يتطلب UDPDK ما يلي:
لقد تم تضمينها بالفعل في هذا المستودع كوحدات فرعية، لذا اسحبها:
git submodule init
git submodule update
دي بي دي كيه
DPDK هو العنصر المحوري في UDPDK. يدير NIC وينفذ Ethernet.
cd dpdk/usertools
./dpdk-setup.sh
من القائمة قم بما يلي:
x86_64-native-linuxapp-gcc
vfio
️ إذا كنت تستخدم برنامج تشغيل VFIO ، فيجب عليك تمكين IOMMU في نظامك.
لتمكينه، افتح/etc/default/grub
، وأضف العلامةintel_iommu=on
فيGRUB_CMDLINE_LINUX_DEFAULT
، ثمsudo update-grub
وأخيرًا أعد التشغيل.
inih
يتم استخدام inih لسهولة تحليل ملفات التكوين .ini
.
cd inih
meson build
cd build
ninja
يتم إنشاء UDPDK في مكتبة ثابتة، والتي تحتاج في النهاية إلى ربطها بالتطبيق النهائي.
cd udpdk
make
sudo make install
تشبه واجهة برمجة التطبيقات الخاصة بـ UDPDK إلى حد كبير واجهة مآخذ BSD القديمة الجيدة:
int udpdk_socket(int domain, int type, int protocol);
int udpdk_bind(int s, const struct sockaddr *addr, socklen_t addrlen);
int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen);
int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t *optlen);
ssize_t udpdk_sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen);
ssize_t udpdk_recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen);
int udpdk_close(int s);
بالإضافة إلى ذلك، تكون الطرق التالية مطلوبة للإعداد والتفكيك المناسبين لأجزاء DPDK الداخلية (الهياكل والعمليات):
int udpdk_init(int argc, char *argv[]);
void udpdk_interrupt(int signum);
void udpdk_cleanup(void);
ملاحظة: لم يتم تنفيذ التحديد () بعد
يحتوي المجلد apps/
على مثالين بسيطين: تطبيق ping-pong وتطبيق pkt-gen.
يتم تشغيل UDPDK في عمليتين منفصلتين: العملية الأساسية هي التي تحتوي على منطق التطبيق (أي حيث يتم استدعاء مكالمات النظام)، بينما تقوم العملية الثانوية ( المستقصي ) باستقصاء بطاقة NIC بشكل مستمر لإرسال البيانات واستقبالها. يتم تبادل الحزم بين التطبيق وأداة الاستقصاء من خلال الذاكرة المشتركة، وذلك باستخدام قوائم الانتظار الحلقية غير المؤمنة.
نقوم بمقارنة UDPDK بمقابس UDP القياسية من حيث الإنتاجية وزمن الوصول.
بيئة
يتم توصيل خادمين متطابقين من نقطة إلى نقطة على واجهة 10G. المواصفات الخاصة بهم هي:
وحدة المعالجة المركزية: إنتل زيون E5-2640 بسرعة 2.4 جيجا هرتز
ذاكرة الوصول العشوائي: 64 جيجابايت
نظام التشغيل: أوبونتو 18.04
النواة: 4.15.0
بطاقة واجهة الشبكة: إنتل X710 DA2 10 جيجابت
برنامج تشغيل NIC: VFIO (DPDK) أو i40e (المقابس العادية)
الإنتاجية
نحن نقيس الحد الأقصى من الإنتاجية التي تم تحقيقها مع اختلاف حجم الحزمة.
يتضمن الأخير رؤوس UDP وIP وMAC.
كما هو موضح في الصورة، فإن UDPDK أفضل بما يصل إلى 18 مرة من المقابس التقليدية.
تجدر الإشارة إلى أن UDPDK يشبع اتصال 10G، وهو للأسف كل ما لدينا: واجهة 40G ستجعله يلمع بالتأكيد!
كمون
نحن نقيس الكمون وارتعاشه.
مرة أخرى، أثبت UDPDK أنه أفضل بكثير من المقابس القياسية.
UDPDK | معيار | |
---|---|---|
يعني (ميكرو ثانية) | 13.92 | 116.57 |
القياسية (ميكروثانية) | 0.74 | 18.49 |
تم إصدار كود UDPDK بموجب ترخيص BSD 3-Clause.
تم تقديم هذا العمل في IEEE NFV-SDN 2021، مؤتمر IEEE السابع حول المحاكاة الافتراضية لوظائف الشبكة والشبكات المحددة بالبرمجيات. المؤلفون هم: L. Lai، G. Ara، T. Cucinotta، K. Kondepu، L. Valcarenghi.
لاي، ليوناردو، وآخرون. "خدمات NFV ذات الكمون المنخفض للغاية باستخدام DPDK" مؤتمر IEEE لعام 2021 حول المحاكاة الافتراضية لوظائف الشبكة والشبكات المحددة بالبرمجيات (NFV-SDN). معهد مهندسي الكهرباء والإلكترونيات، 2021.
نرحب بالجميع للمساهمة في UDPDK من خلال تنفيذ ميزات جديدة أو توسيع الميزات الموجودة أو ببساطة الإبلاغ عن الأخطاء/المشكلات.