لامينت TCP

ما هو Laminar؟

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

الخوارزمية الافتراضية لجدولة الإرسال هي التطبيق الصارم لمبدأ فان جاكوبسون للحفاظ على الحزم [Jacobson88]. تؤدي البيانات التي تصل إلى المُستلِم إلى إرسال ACKs والتي بدورها تتسبّب في إرسال المُرسِل لكمية متكافئة من البيانات مرة أخرى إلى الشبكة. إن متغير الحالة الأساسي هو ضمني في كمية البيانات وACKs المنتشرة في الشبكة. تتم ملاحظة هذه الحالة من خلال أداة تقدير tcp_packets_in_flight() المحسَّنة (المعروفة أيضًا باسم total_wheel). يستند total_pic إلى "الممر" كما هو موضح في RFC 3517، ولكنه يتضمن أيضًا كمية البيانات التي تم الإبلاغ عنها من خلال ACK الحالي وعمليات النقل في انتظار المراجعة التي اجتازت التحكم في ازدحام الزحمة ولكنها في انتظار أحداث أخرى مثل TSO.

المتغير الجديد، CCwin، هو متغيّر حالة التحكم الأساسي في الازدحام. وتعمل خوارزميات التحكم في الزحام على ضبط CCwin لتنظيم مستوى الازدحام الكلي على طول المسار. على الرغم من أنّ CCwin يشبه cwnd، إلا أن cwnd تعد عملية تحميل زائدة وتستخدم خوارزميات متعددة (مثل منع الانفجار) ذات أهداف مختلفة ومتعارضة أحيانًا.

أي وقت يختلف فيه الحقل total_wheel عن CCwin، فإن خوارزمية جدولة الإرسال تعمل قليلاً على تعديل عدد القطاعات المُرسلة استجابةً لكل ACK. ويتم تضمين كل من البدء البطيء وخفض المعدل التناسبي [PRR] (بديل لخفض المعدل) في خوارزمية جدولة الإرسال.

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

ويغير إطار العمل الصفحي فلسفة التصميم الأساسية للتحكم في ازدحام TCP وربما يكون له آثار واسعة النطاق، تتجاوز نطاق التصحيح نفسه. تهدف هذه التصحيحات إلى السماح للأشخاص بتجربة التعليمات البرمجية والتعليق والمساعدة في اكتشاف أي حالات جانبية ربما لم يتم التغاضي عنها. علاوة على ذلك، فإن التصحيح غير مكتمل بمعنى أن هناك عددًا من الخوارزميات لا يزال مفقودًا، وتحديدًا: خوارزميات التحكم في الازدحام، غير CUBIC وReno، والتحقق من صحة البيانات، ومقاييس الوجهة، وما إلى ذلك. سيكون من الرائع حقًا أن يساعد الأشخاص في إعادة هيكلة بعض هذه الخوارزميات الأخرى.

تم وصف إطار عمل Laminar ودافعه بدقة أكبر في مسودة الإنترنت draft-mathis-tcpm-tcp-laminar.

يُرجى إرسال التعليقات والاقتراحات إلى mattmathis@google.com.

يشكّل هذا المشروع جزءًا من جهود Google لجعل الويب أسرع من خلال تحسينات البروتوكول.

ملاحظات التنفيذ

يتم تنفيذ Laminar بشكل أساسي في 3 دوال (tcp_input.c):

ينفذ كل من Tcp_cong_avoid() وtcp_mult_decr() التحكّم في ازدحام AIMD باستخدام متغير حالة CCwin. باستثناء التراجع، فإن هاتين الدالتين هما المكان الوحيد الذي يتغير فيه CCwin. (ستستدعي كلتا الدالتين المعالجات الخاصة بوحدة ازدحام البيانات).

يحدد Tcp_laminar_schedule() مقدار البيانات الذي سيتم إرساله استجابةً لكل ACK. وتنفذ عملية حفظ حزم Van Jacobson، مع تعديلها لأعلى أو لأسفل قليلاً لجعل tcp_packets_in_flight() تتقارب مع CCwin.

هناك تغييرات مهمة في مقدِّر tcp_packets_in_flight() لجعله غير ثابت في معظم أحداث البروتوكولات. إنّ أكشاك التطبيقات والتعديلات في tcp_laminar_schedule() والخسائر الفعلية للحِزم تتغير tcp_packets_in_flight() كما يجب. لا تتم معالجة ACK وTSO ومعظم الأحداث الأخرى. تجدر الإشارة إلى أنّه عند حدوث خسائر، يتغيّر العدد الفعلي للحِزم في الرحلة الجوية فورًا، ولكن لا يظهر ذلك في أداة التقدير tcp_packets_in_flight() حتى تصنّفها آلات إعادة الإرسال على أنّها مفقودة وتزيد قيمة lost_out.

الحصول على التصحيح

تتعارض هذه التصحيح مع net-next الذي أعده ديف ميلر، وتنطبق تمامًا على 3.5-rc2.
ملاحظة: وحدات التحكم في ازدحام الزحمة الأخرى التي لم يتم تحديث Reno وCUBIC منها ولن يتم تجميعها. إذا كانت التكوين تنشئ وحدات أخرى للتحكم في الازدحام، مثل الملفات القابلة للتوسع، والقابلة للتوسع، والسرعة العالية، وما إلى ذلك، فيجب إيقافها أولاً.