| FQ(8) | Linux | FQ(8) |
نام (NAME)
tc-fq - سیاستگذاری و مدیریت ترافیک با صفبندی عادلانه (Fair Queue)
خلاصه دستور (SYNOPSIS)
tc qdisc ... fq [ limit PACKETS ] [ flow_limit PACKETS ] [ quantum BYTES ] [ initial_quantum BYTES ] [ maxrate RATE ] [ buckets NUMBER ] [ orphan_mask NUMBER ] [ pacing | nopacing ] [ ce_threshold TIME ]
توضیحات (DESCRIPTION)
FQ (صفبندی عادلانه یا Fair Queue) یک زمانبند بسته بدون کلاس (classless packet scheduler) است که عمدتاً برای ترافیک تولیدشده محلی (locally generated traffic) کاربرد دارد. این زمانبند برای دستیابی به گامبندی (pacing) به ازای هر جریان طراحی شده است. FQ جداسازی جریانها را انجام میدهد و قادر است الزامات گامبندی تعیینشده توسط پشته TCP را رعایت کند. تمامی بستههای متعلق به یک سوکت به عنوان یک «جریان» (flow) در نظر گرفته میشوند. برای بستههای غیرمحلی (بار کاری مسیریاب)، از درهمسازی بسته (packet hash) به عنوان روش جایگزین استفاده میشود.
یک برنامه کاربردی میتواند با استفاده از فراخوانی SO_MAX_PACING_RATE در setsockopt، حداکثر نرخ گامبندی را مشخص کند. این زمانبند بسته با ایجاد تاخیر میان بستهها، محدودیت نرخ تعیینشده برای هر سوکت را رعایت میکند. توجه داشته باشید که پس از لینوکس ۴.۲۰، هسته لینوکس مکانیزم EDT (زودترین زمان خروج یا Earliest Departure Time) را به کار گرفت و TCP مستقیماً زمان خروج مناسب را برای هر skb تنظیم میکند.
خروج بستهها از صف (dequeueing) به شیوه نوبتگردشی (round-robin) انجام میشود. یک صف اختصاصی FIFO برای بستههای با اولویت بالا (اولویت TC_PRIO_CONTROL) رزرو شده است و این بستهها همواره پیش از سایر بستهها از صف خارج میشوند.
زمانبند FQ از نوع غیرحافظ کار (non-work-conserving) است.
گامبندی TCP برای جریانهایی که دورههای بیکاری (idle times) دارند مفید است، زیرا پنجره ازدحام به پشته TCP اجازه میدهد تعداد زیادی بسته را در صف قرار دهد. این ویژگی رویکرد «شروع آهسته پس از بیکاری» (slow start after idle) را برطرف میکند؛ رویکردی که به جریانهای با BDP بزرگ و برنامههای انتقالدهنده دادههای تکهای مانند پخش ویدیو آسیب شدیدی وارد میکرد.
پارامترها (PARAMETERS)
limit
حد نهایی و سختگیرانه روی اندازه واقعی صف. هنگامی که این حد تکمیل شود، بستههای ورودی جدید دور ریخته (drop) میشوند. اگر مقدار آن کاهش یابد، بستهها دور ریخته میشوند تا محدودیت جدید برآورده شود. مقدار پیشفرض 10000 بسته است.
flow_limit
حد نهایی و سختگیرانه برای حداکثر تعداد بستههای در صف به ازای هر جریان. مقدار پیشفرض 100 است.
quantum
اعتبار به ازای هر دور نوبتگردشی (RR) برای خروج از صف؛ یعنی مقدار بایتی که یک جریان مجاز است در یک نوبت از صف خارج کند. مقدار بزرگتر به معنای فاصله زمانی طولانیتر تا نوبت خدمترسانی به جریان بعدی خواهد بود. مقدار پیشفرض ۲ برابر MTU رابط شبکه است.
initial_quantum
اعتبار اولیه نرخ ارسال؛ یعنی مقدار بایتی که یک جریان جدید در ابتدا مجاز است از صف خارج کند. این پارامتر بهطور ویژه برای استفاده از IW10 بدون تاخیر افزوده طراحی شده است. مقدار پیشفرض ۱۰ برابر MTU رابط شبکه (یعنی ۱۵۱۴۰ بایت برای اترنت «استاندارد») است.
maxrate
حداکثر نرخ ارسال برای یک جریان. مقدار پیشفرض نامحدود (unlimited) است. تنظیمات اختصاصی برنامه از طریق SO_MAX_PACING_RATE تنها در صورتی نادیده گرفته میشود که بزرگتر از این مقدار باشد.
buckets
اندازه جدول درهمسازی مورد استفاده برای جستجوی جریانها. به هر سطل (bucket) یک درخت سرخوسیاه (red-black tree) برای مرتبسازی کارآمد تداخلها تخصیص داده میشود. مقدار پیشفرض: 1024 است.
orphan_mask
برای بستههایی که متعلق به یک سوکت مشخص نیستند، fq میتواند بخشی از skb->hash را ماسک کرده و تعداد سطلهای اختصاصیافته به آن ترافیک را کاهش دهد. این یک مکانیزم پیشگیری از حملات داس (DDOS) است و مقدار پیشفرض آن 1023 میباشد (به این معنا که بیش از 1024 جریان به این بستهها اختصاص نمییابد).
[no]pacing
فعال یا غیرفعال کردن گامبندی جریان. مقدار پیشفرض فعال (enabled) است.
ce_threshold
آستانهای تعیین میکند که بالاتر از آن، تمامی بستهها با علامت تجربه ازدحام ECN (Congestion Experienced) نشانهگذاری میشوند. این گزینه برای الگوریتمهای کنترل ازدحام سبک DCTCP که به نشانهگذاری در آستانههای صف بسیار کمعمق نیاز دارند کاربرد دارد.
مثالها (EXAMPLES)
# tc qdisc add dev eth0 root fq ce_threshold 4ms # tc -s -d qdisc show dev eth0 qdisc fq 8001: dev eth0 root refcnt 2 limit 10000p flow_limit 100p buckets 1024 orphan_mask 1023 quantum 3028b initial_quantum 15140b low_rate_threshold 550Kbit refill_delay 40.0ms ce_threshold 4.0ms Sent 72149092 bytes 48062 pkt (dropped 2176, overlimits 0 requeues 0) backlog 1937920b 1280p requeues 0 flows 34 (inactive 17 throttled 0) gc 0 highprio 0 throttled 0 ce_mark 47622 flows_plimit 2176
همچنین ببینید (SEE ALSO)
نویسندگان (AUTHORS)
صفبندی FQ توسط Eric Dumazet نوشته شده است.
| 10 Sept 2015 | iproute2 |