TC(8)

الاسم
sfq - الاصطفاف العادل العشوائي

موجز
tc qdisc ... [ divisor حجم_جدول_التجزئة ] [ limit حزم ] [ perturb ثوانٍ ] [ quantum بايت ] [ flows عدد ] [ depth عدد ] [ headdrop ] [ redflowlimit بايت ] [ min بايت ] [ max بايت ] [ avpkt بايت ] [ burst حزم ] [ probability P ] [ ecn ] [ harddrop ]

الوصف
الاصطفاف العادل العشوائي هو نظام اصطفاف غير طبقي متاح للتحكم في حركة المرور باستخدام الأمر tc(8). لا يقوم SFQ بتشكيل حركة المرور بل يحدد مواعيد إرسال الحزم فقط، بناءً على 'التدفقات'. الهدف هو ضمان العدالة بحيث يتمكن كل تدفق من إرسال البيانات بدوره، مما يمنع أي تدفق واحد من طغيان البقية. قد يكون لهذا في الواقع بعض التأثير في تخفيف محاولة رفض الخدمة. SFQ يحافظ على العمل وبالتالي يسلم دائمًا حزمة إذا كانت متوفرة لديه.

خوارزمية
عند الإدراج في الطابور، تُخصص كل حزمة إلى دلو تجزئة، بناءً على قيمة تجزئة الحزمة. يتم الحصول على قيمة التجزئة هذه إما من مصنف تدفق خارجي (استخدم tc filter لتعيينها)، أو مصنف داخلي مبدئي إذا لم يتم تكوين مصنف خارجي. عند استخدام المصنف الداخلي، يستخدم sfq

(أ) عنوان المصدر

(ب) عنوان الوجهة

(iii)
    منفذ المصدر والوجهة

إذا كانت هذه متوفرة. SFQ يعرف ipv4 و ipv6 وأيضًا UDP و TCP و ESP. يتم تجزئة الحزم ذات البروتوكولات الأخرى بناءً على تمثيل 32 بت للوجهة والمصدر. يتوافق التدفق في الغالب مع اتصال TCP/IP. يجب أن يمثل كل من هذه الدلاء تدفقًا فريدًا. نظرًا لأن تدفقات متعددة قد تُجزأ إلى نفس الدلو، فقد يتم إزعاج خوارزمية التجزئة الداخلية لـ sfq على فترات قابلة للتكوين بحيث يستمر الظلم لفترة قصيرة فقط. قد يتسبب الإزعاج مع ذلك في حدوث بعض إعادة ترتيب الحزم غير المقصودة. بعد لينكس-3.3، لا توجد مشكلة إعادة ترتيب الحزم، ولكن قد يتم إسقاط الحزم إذا وصلت إعادة التجزئة إلى حد واحد (عدد التدفقات أو الحزم لكل تدفق) عند إزالة الحزم من الطابور، يتم الاستعلام عن كل دلو تجزئة يحتوي على بيانات بطريقة تناوبية. قبل لينكس-3.3، كان الحد الأقصى لطول SFQ في وقت الترجمة هو 128 حزمة، والتي يمكن توزيعها على 128 دلوًا على الأكثر من أصل 1024 متاحة. في حالة الفائض، يتم إسقاط الذيل على الدلو الأكثر امتلاءً، وبالتالي الحفاظ على العدالة. بعد لينكس-3.3، الحد الأقصى لطول SFQ هو 65535 حزمة، وحد المقسوم هو 65536. في حالة الفائض، يتم إسقاط الذيل على الدلو الأكثر امتلاءً، ما لم يتم طلب إسقاط الرأس.

المعاملات

divisor
    يمكن استخدامه لتعيين حجم مختلف لجدول التجزئة، متاح من النواة 2.6.39 فصاعدًا. يجب أن يكون المقسوم المحدد قوة للعدد اثنين ولا يمكن أن يكون أكبر من 65536. القيمة المبدئية: 1024.

limit
    الحد الأعلى لـ SFQ. يمكن استخدامه لتقليل الطول المبدئي البالغ 127 حزمة. بعد لينكس-3.3، يمكن رفعه.

depth
    حد الحزم لكل تدفق (بعد لينكس-3.3). المبدئي هو 127 ويمكن خفضه.

perturb
    الفاصل الزمني بالثواني لإزعاج خوارزمية الطابور. المبدئي هو 0، مما يعني عدم حدوث إزعاج. لا تضبطه منخفضًا جدًا لأن كل إزعاج قد يتسبب في بعض إعادة ترتيب الحزم أو فقدانها. القيمة الموصى بها: 60. هذه القيمة ليس لها تأثير عند استخدام تصنيف التدفق الخارجي. من الأفضل زيادة قيمة المقسوم لتقليل خطر تصادمات التجزئة.

quantum
    عدد البايتات المسموح لتدفق بإخراجها من قائمة الانتظار خلال جولة من عملية الدوران المتناوب. المبدئي هو MTU للواجهة، وهو أيضًا القيمة الموصى بها والحد الأدنى.

flows
    بعد لينكس-3.3، يمكن تغيير الحد المبدئي للتدفقات. القيمة المبدئية هي 127

headdrop
    السلوك المبدئي لـ SFQ هو إجراء إسقاط ذيل الحزم من تدفق. يمكنك طلب إسقاط رأس بدلاً من ذلك، حيث يُعرف هذا بتوفير تغذية راجعة أفضل لتدفقات TCP.

redflowlimit
    تكوين وحدة RED الاختيارية فوق كل تدفق SFQ. مبدأ الكشف العشوائي المبكر هو إجراء علامات أو إسقاطات للحزم بطريقة احتمالية. (راجع man tc-red للتفاصيل حول RED)
    يُكوّن redflowlimit الحد الصارم على حجم قائمة الانتظار الحقيقي (وليس المتوسط) لكل تدفق SFQ بالبايت.

min متوسط حجم الطابور الذي يصبح عنده التعليم ممكناً. القيمة المبدئية هي max /3

max عند هذا الحجم المتوسط لقائمة الانتظار، يكون احتمال العلامة أقصى. المبدئي هو redflowlimit /4

probability
    الاحتمال الأقصى للعلامة، محدد كرقم عائم من 0.0 إلى 1.0. القيمة المبدئية هي 0.02

avpkt
    محدد بالبايت. يُستخدم مع الاندفاع لتحديد ثابت الزمن لحسابات حجم قائمة الانتظار المتوسط. القيمة المبدئية هي 1000

burst
    يُستخدم لتحديد مدى سرعة تأثر حجم قائمة الانتظار المتوسط بحجم قائمة الانتظار الحقيقي.
    القيمة المبدئية هي :
    (2 * min + max) / (3 * avpkt)

ecn يمكن لـ RED إما 'وضع علامة' أو 'إسقاط'. إشعار الازدحام الصريح يسمح لـ RED بإخطار المضيفين البعيدين بأن معدلهم يتجاوز مقدار النطاق الترددي المتاح. لا يمكن إخطار المضيفين غير القادرين على ECN إلا بإسقاط حزمة. إذا تم تحديد هذه المعلمة، فسيتم فقط وضع علامة على الحزم التي تشير إلى أن مضيفيها يحترمون ECN ولن يتم إسقاطها، إلا إذا وصل حجم قائمة الانتظار إلى depth حزمة.

harddrop
    إذا كان متوسط حجم طابور التدفق أعلى من max بايت، فإن هذا المعامل يفرض الإسقاط بدلاً من وسم ecn.

أمثلة واستخدامات
للإرفاق بالجهاز ppp0:

# tc qdisc add dev ppp0 root sfq

يرجى ملاحظة أن SFQ، مثل جميع وحدات qdisc غير المشكلة (الحافظة للعمل)، مفيدة فقط إذا كانت تمتلك قائمة الانتظار. هذا هو الحال عندما تساوي سرعة الارتباط النطاق الترددي المتاح فعليًا. ينطبق هذا على مودمات الهاتف العادية، واتصالات ISDN، ووصلات الإيثرنت المباشرة غير المحولة.

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

في هذه الحالة، لا توجد قائمة الانتظار الفعلية داخل لينكس وبالتالي فهي غير متاحة للجدولة.

قم بتضمين SFQ في qdisc طبقي للتأكد من أنها تمتلك قائمة الانتظار. من الممكن استخدام مصنفات خارجية مع sfq، على سبيل المثال لتجزئة حركة المرور بناءً على عناوين IP المصدر/الوجهة فقط:

# tc filter add ... flow hash keys src,dst perturb 30 divisor 1024

لاحظ أن المقسوم المُعطى يجب أن يطابق المستخدم بواسطة sfq. إذا قمت بتغيير المبدئي لـ sfq وهو 1024، فاستخدم نفس القيمة لمرشح تجزئة التدفق أيضًا.

مثال على sfq مع وضع RED الاختياري :

# tc qdisc add dev eth0 parent 1:1 handle 10: sfq limit 3000 flows 512 divisor 16384
  redflowlimit 100000 min 8000 max 60000 probability 0.20 ecn headdrop

المَصْدَر

o   Paul E. McKenney "Stochastic Fairness Queuing", وقائع IEEE INFOCOMM'90، سان فرانسيسكو، 1990.

o   Paul E. McKenney "Stochastic Fairness Queuing", "Interworking: Research and Experience", المجلد 2، 1991، الصفحات 113-131.

o   انظر أيضًا: M. Shreedhar و George Varghese "Efficient Fair Queuing using Deficit Round Robin", وقائع SIGCOMM 95.

انظر أيضًا
tc(8), tc-red(8)

المؤلفون
Alexey N. Kuznetsov, <kuznet@ms2.inr.ac.ru>, Eric Dumazet <eric.dumazet@gmail.com>.

صان هذه الصفحة bert hubert <ahu@ds9a.nl>

ترجمة
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.