كيف يمكن قراءة البيانات الواردة بسرعة عبر بطاقة NIC بسرعة 10 جيجابت؟

StackOverflow https://stackoverflow.com/questions/2254814

  •  20-09-2019
  •  | 
  •  

سؤال

لدي صندوقي ديبيان متصلين بواسطة كابل CX4 بين بطاقتي 10 جيجابت.سيقوم أحدهما بتوليد البيانات بسرعة كبيرة (بين 4 جيجابت/ثانية و16 جيجابت/ثانية)، والآخر يحتاج إلى أن يكون قادرًا على التقاط كل ذلك وتخزينه في ذاكرة الوصول العشوائي (RAM) لتحليله لاحقًا.أنا جديد على هذا النوع من الترميز منخفض المستوى، وسأقبل بكل سرور أي أفكار حول المنهج الواسع الذي يجب استخدامه (هل أحتاج إلى DMA؟RDMA؟)، أو النصائح والحيل التي قد تنطبق.شكرًا!

هل كانت مفيدة؟

المحلول

إذا كنت تريد معالجة 1 غيغابايت من حركة المرور في الثانية باستمرار، فأنت بحاجة إلى ناقل واسع جدًا ومعدل معالجة سريع جدًا، وتجربتي تأتي من NIDS.أنت بحاجة إلى أجهزة متخصصة لإجراء معالجة NIDS بشكل متسق لـ 100 ميجابايت (1 جيجا إيثرنت) من البيانات (10 جيجا بايت هو عالم آخر).الرام لن يساعدك لأنه يمكنك ملء الجيجابايت خلال 5-10 ثواني و1 جيجا تحمل الكثير من الطلبات.

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

ملاحظة: يجب أن أوضح أن NIDS هي حركة مرور تتم معالجتها بنسبة 1:1 على الجهاز الذي يرى حركة المرور - أي، في أسوأ السيناريوهات، تقوم بمعالجة كل بايت على نفس الجهاز؛بينما معالجة الأعمال/الويب هي 1: كثير:العديد من الأجهزة وأمر من حيث الحجم العديد من البايتات للمعالجة.

-- يحرر --

الآن بعد أن ذكرت أن هناك فجوة بين تسليم البيانات (لا توجد بطاقة واجهة مستخدم قياسية بسعة 10 جيجا بايت يمكنها مواكبة 10 جيجا بايت على أي حال)، نحتاج إلى معرفة محتوى المعالجة قبل أن نتمكن من تقديم الاقتراح.

-- تعديل 2 --

تتصرف Berkeley DB (قاعدة بيانات ذات نموذج بيانات بسيط) مثل قاعدة بيانات المؤسسة (من حيث معدل المعاملات) عند استخدام مؤشرات ترابط متعددة.إذا كنت تريد الكتابة على القرص بمعدلات عالية، فمن المحتمل أن تستكشف هذا الحل.ربما تريد إعداد غارة لتعزيز الإنتاجية - تعتبر Raid 0+1 هي الأفضل من حيث إنتاجية الإدخال والإخراج والحماية.

نصائح أخرى

ووالآخذة الوحيدة سمعت متاحة لأجهزة الكمبيوتر العادية التي سوف التعامل مع سحب 10GBE المشبعة تصل إلى مساحة المستخدم لأي نوع من مرحلة ما بعد المعالجة هي تلك المصنعة من قبل Napatech - سيكون لديك لاستخدام API عادتهم <. / P>

ويمكنك وضع أفضل هذه البطاقة نمت جدا حتى الملقم مع السباكة حافلة لدعم هذا النوع من السرعة (أنا بالتأكيد الابتعاد عن أي نوع من رقائق نفيديا مثل مربع).

وقبل أن تخطط لأي برمجة خاصة، يجب عليك القيام ببعض اختبار لمعرفة مدى يمكنك معالجة مع نظام الفانيليا. إعداد وهمية ملف بيانات وارسال عملية على الجهاز منتج والقابل بسيط / محلل على الجهاز المستهلك وبه حفنة من التنميط - إلى أين أنت ذاهب إلى واجهت مشاكل البيانات؟ يمكنك رمي أفضل الأجهزة في ذلك، أو يمكنك قرص معالجة الخاص بك لتكون أسرع؟

وتأكد أنك بدأت مع منصة HW التي يمكن أن تدعم معدلات البيانات كنت تتوقع؟ إذا كنت تعمل مع شيء من هذا القبيل 82598EB NIC إنتل، تأكد من أنك قد حصلت عليه توصيله في فتحة بكيي 2.0، ويفضل في فتحة بسرعة x16، من أجل الحصول على عرض النطاق الترددي الكامل من NIC إلى شرائح.

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

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

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

حسنا، وأنت تسير لحاجة المال. طريقة واحدة قد يكون لشراء مفتاح تقاسم العبء لتقسيم البيانات الواردة في جهازي كمبيوتر وبعد عملية لهم في قاعدة بيانات واحدة.

ولأن لديك بعض الجوانب التي تبسط الوضع (نقطة ثابتة إلى نقطة بين الجهازين فقط، أي معالجة) وأود أن يحاول في الواقع أن طريقة تافهة أو واضحة للتيار TCP واحد بين النظم وكتابة البيانات باستخدام write() إلى القرص . ثم قياس الأداء، والشخصية لتحديد أين هي أي اختناقات.

لنقطة البداية، وقراءة عن href="http://www.kegel.com/c10k.html" rel="nofollow noreferrer"> C10K (10000 الاتصالات المتزامنة) مشكلة

وأعتقد أن نواة لينكس الأخيرة دعمت حزمة 10GB من nic-> النواة ولكن أشك في أن هناك طريقة effiecent لنسخ البيانات إلى الفضاء المستخدم حتى اللعب مع I7 / زيون 5500 منصة

ما يبدو أن أنسى: إذا كان الآخذة هي 10GB وكنت تقلق بشأن المستقبل، يمكنك بقية (نسبيا) سهلة: حتى لو كان المصدر هو قادرة على توليد البيانات في تلك السرعة، سيكون لها نفس المشاكل تزداد أن البيانات على خط 10GB كما المتلقي والحصول عليه من خط إلى RAM.

وإذا كان الآخذة هي 10GB فهذا يعني وسجلت البتات في هذا المعدل، ولكن يقال شيئا عن الوقت بين الحزم واحدة، ونحن لا نتحدث بعد عن البروتوكولات حتى الان.

واعتقد ان هذا السؤال هو في الوقت نفسه عفا عليها الزمن لOP، ولكن إذا كان لديك مثل هذه المهمة، وتبدأ مع حل مبرمجة بشكل منتظم من أجل أن تكون قادرة على الحكم على ما زيادة سرعة سيكون ضروريا للقضية الخاصة (قضيتك هي دائما خاص؛ -)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top