| TC(8) | Linux | TC(8) |
نام (NAME)
tc-drr - زمانبند نوبتگردشی با کسری (Deficit Round Robin) در کنترل ترافیک
drr - زمانبند نوبتگردشی با کسری
خلاصه دستور (SYNOPSIS)
tc qdisc ... add drr [ quantum بایتها ]
توضیحات (DESCRIPTION)
زمانبند نوبتگردشی با کسری (Deficit Round Robin Scheduler) یک انضباط صفبندی دارای کلاس (classful qdisc) است که به عنوان جایگزینی انعطافپذیرتر برای صفبندی منصفانه تصادفی (SFQ) به کار میرود.
برخلاف SFQ، در اینجا هیچ صف پیشساختهای وجود ندارد -- شما باید کلاسها را اضافه کرده و سپس فیلترهایی را برای دستهبندی بستهها بر همین اساس تنظیم کنید. این ویژگی میتواند به عنوان مثال برای استفاده از qdiscهای RED با تنظیمات متفاوت برای ترافیکهای خاص سودمند باشد. هیچ کلاس پیشفرضی وجود ندارد -- اگر بستهای نتواند دستهبندی شود، دور انداخته میشود (drop میگردد).
الگوریتم (ALGORITHM)
به هر کلاس یک شمارنده کسری (deficit counter) اختصاص داده میشود که مقدار اولیه آن برابر با quantum است.
الگوریتم DRR یک فهرست «فعال» (داخلی) از کلاسهایی که qdiscهای آنها غیرخالی هستند نگهداری میکند. از این فهرست برای خارج کردن بستهها از صف (dequeuing) استفاده میشود. اگر اندازه بسته کوچکتری یا مساوی مقدار شمارنده کسری باشد، بسته از کلاس واقع در ابتدای فهرست خارج میشود. اگر شمارنده خیلی کوچک باشد، مقدار آن به اندازه quantum افزایش مییابد و زمانبند به سراغ کلاس بعدی در فهرست فعال میرود.
پارامترها (PARAMETERS)
- quantum
- میزان بایتهایی که یک جریان مجاز است پیش از انتقال زمانبند به کلاس بعدی، از صف خارج کند. مقدار پیشفرض آن برابر با MTU رابط شبکه است. حداقل مقدار مجاز ۱ است.
مثال و نحوه استفاده (EXAMPLE & USAGE)
برای اتصال به دستگاه eth0، با استفاده از MTU رابط شبکه به عنوان مقدار quantum آن:
# tc qdisc add dev eth0 handle 1 root drr
افزودن دو کلاس:
# tc class add dev eth0 parent 1: classid 1:1 drr # tc class add dev eth0 parent 1: classid 1:2 drr
همچنین باید حداقل یک فیلتر برای دستهبندی بستهها اضافه کنید:
# tc filter add dev eth0 protocol .. classid 1:1
مانند SFQ، انضباط DRR تنها زمانی سودمند است که خودش مالک صف باشد -- این یک زمانبند خالص است و بستهها را به تاخیر نمیاندازد. متصل کردن انضباطهای صف غیرمحافظهکار کار (non-work-conserving) مانند tbf به آن منطقی نیست -- زیرا سایر qdiscها در فهرست فعال نیز تا زمان موفقیت عملیات خروج از صف غیرفعال باقی خواهند ماند. انضباط DRR را درون یک qdisc دیگر مانند HTB یا HFSC جایگذاری کنید تا اطمینان حاصل شود که مالک صف است.
میتوانید با تخصیص دادن بستهها به کلاسهای متصلشده با استفاده از فیلتر جریان (flow filter)، رفتار SFQ را شبیهسازی کنید:
# tc qdisc add dev .. drr
# for i in .. 1024;do
tc class add dev .. classid $handle:$(print %x $i)
tc qdisc add dev .. fifo limit 16
# done
# tc filter add .. protocol ip .. $handle flow hash keys src,dst,proto,proto-src,proto-dst divisor 1024 perturb 10
منبع (SOURCE)
- o
- M. Shreedhar and George Varghese "Efficient Fair Queuing using Deficit Round Robin", Proc. SIGCOMM 95.
یادداشتها (NOTES)
این پیادهسازی هنگام سرریز، بستهها را از طولانیترین صف دور نمیاندازد، زیرا محدودیتها توسط تکتک qdiscهای فرزند مدیریت میشوند.
همچنین ببینید (SEE ALSO)
نویسنده (AUTHOR)
ماژول sched_drr توسط Patrick McHardy نوشته شده است.
| January 2010 | iproute2 |