CoDel(8) Linux CoDel(8)

tc-codel - الگوریتم مدیریت فعال صف با تاخیر کنترل‌شده (Controlled-Delay Active Queue Management)

tc qdisc ... codel [ limit PACKETS ] [ target TIME ] [ interval TIME ] [ ecn | noecn ] [ ce_threshold TIME ]

الگوریتم CoDel (تلفظ به‌صورت "coddle") یک طرح مدیریت فعال صف (AQM) تطبیقی و «بدون نیاز به تنظیم دستی» (no-knobs) است که برای برطرف کردن کاستی‌های RED و مشتقات آن توسعه یافته است. این الگوریتم با اهداف زیر طراحی شده است:

  • باید بدون پارامتر (یا با حداقل تنظیمات) باشد.
  • باید تاخیر را پایین نگه دارد و هم‌زمان اجازه عبور ترافیک‌های انفجاری (bursts) را بدهد.
  • باید تاخیر را کنترل کند.
  • باید به‌طور پویا با نرخ‌های متغیر پیوند سازگار شود بدون اینکه تاثیری منفی بر بهره‌وری (utilization) بگذارد.
  • باید ساده و کارآمد باشد و از مسیریاب‌های ساده تا پیچیده مقیاس‌پذیر باشد.

الگوریتم CoDel دارای سه نوآوری عمده است. نخست، به‌جای استفاده از اندازه صف یا میانگین صف، از کمینه محلی صف به‌عنوان معیاری برای سنجش صف دائمی/ماندگار (standing/persistent queue) استفاده می‌کند. دوم، از یک متغیر واحد برای ردیابی وضعیت کمینه تاخیر بهره می‌برد تا مشخص کند نسبت به تاخیر صف ماندگار در چه وضعیتی قرار دارد. سوم، به‌جای اندازه‌گیری اندازه صف برحسب بایت یا بسته، آن را بر مبنای زمان ماندگاری یا توقف بسته (packet-sojourn time) در صف می‌سنجد.

الگوریتم CoDel کمینه تاخیر محلی صف (یعنی تاخیر صف ماندگار) را اندازه گرفته و آن را با مقدار تاخیر قابل‌قبول تعیین‌شده در target مقایسه می‌کند. تا زمانی که کمینه تاخیر صف کمتر از target باشد یا بافر کمتر از اندازه یک MTU داده داشته باشد، هیچ بسته‌ای دور ریخته (drop) نمی‌شود. الگوریتم CoDel زمانی وارد حالت دور انداختن بسته (dropping mode) می‌شود که کمینه تاخیر صف برای مدتی بیشتر از interval از مقدار target بیشتر شده باشد. در این حالت، بسته‌ها در فواصل زمانی مختلف که توسط یک قانون کنترلی تعیین می‌شوند، دور ریخته می‌شوند. این قانون کنترلی تضمین می‌کند که حذف بسته‌ها موجب تغییری خطی در توان عملیاتی (throughput) شود. به محض اینکه کمینه تاخیر به زیر مقدار target برسد، دور انداختن بسته‌ها متوقف می‌شود.

جزئیات بیشتر را می‌توانید در مقاله‌ای که در ادامه ذکر شده است بیابید.

حد نهایی و سخت‌گیرانه روی اندازه واقعی صف است. هنگامی که صف به این حد برسد، بسته‌های ورودی جدید دور ریخته می‌شوند. اگر این مقدار کاهش یابد، بسته‌ها دور ریخته می‌شوند تا اندازه صف به حد جدید برسد. مقدار پیش‌فرض ۱۰۰۰ بسته است.

کمینه تاخیر قابل‌قبول صف ماندگار/دائمی است. این کمینه تاخیر با ردیابی کمترین تاخیر محلی که بسته‌ها در صف تجربه می‌کنند مشخص می‌شود. مقدار پیش‌فرض و پیشنهادی 5ms است.

برای اطمینان از کهنه نشدن مقدار کمینه تاخیر اندازه‌گیری‌شده استفاده می‌شود. کمینه تاخیر باید در آخرین دوره زمانی به طول interval تجربه شده باشد. این مقدار باید در حدود بدترین حالت زمان رفت و برگشت (RTT) از گلوگاه تنظیم شود تا نقاط انتهایی فرصت کافی برای واکنش نشان دادن داشته باشند. مقدار پیش‌فرض 100ms است.

می‌تواند برای نشانه‌گذاری بسته‌ها به‌جای دور ریختن آن‌ها استفاده شود. اگر ecn فعال شده باشد، می‌توان از noecn برای غیرفعال کردن آن استفاده کرد و برعکس. به‌طور پیش‌فرض، ecn غیرفعال است.

آستانه‌ای تعیین می‌کند که بالاتر از آن، تمام بسته‌ها با علامت تجربه ازدحام ECN (Congestion Experienced) نشانه‌گذاری می‌شوند. این گزینه برای الگوریتم‌های کنترل ازدحام سبک DCTCP که به نشانه‌گذاری در آستانه‌های بسیار کم‌عمق صف نیاز دارند مفید است.

 # tc qdisc add dev eth0 root codel
 # tc -s qdisc show
   qdisc codel 801b: dev eth0 root refcnt 2 limit 1000p target 5.0ms
interval 100.0ms
    Sent 245801662 bytes 275853 pkt (dropped 0, overlimits 0 requeues 24)
    backlog 0b 0p requeues 24
     count 0 lastcount 0 ldelay 2us drop_next 0us
     maxpacket 7306 ecn_mark 0 drop_overlimit 0
 # tc qdisc add dev eth0 root codel limit 100 target 4ms interval 30ms ecn
 # tc -s qdisc show
   qdisc codel 801c: dev eth0 root refcnt 2 limit 100p target 4.0ms
interval 30.0ms ecn
    Sent 237573074 bytes 268561 pkt (dropped 0, overlimits 0 requeues 5)
    backlog 0b 0p requeues 5
     count 0 lastcount 0 ldelay 76us drop_next 0us
     maxpacket 2962 ecn_mark 0 drop_overlimit 0

tc(8), tc-red(8)

Kathleen Nichols and Van Jacobson, "Controlling Queue Delay", ACM Queue, http://queue.acm.org/detail.cfm?id=2209336

الگوریتم CoDel توسط Eric Dumazet و David Taht پیاده‌سازی شده است. این صفحه راهنما توسط Vijay Subramanian نوشته شده است. لطفاً اصلاحات و گزارش‌ها را به فهرست پستی شبکه لینوکس به نشانی <netdev@vger.kernel.org> ارسال کنید.

23 May 2012 iproute2