| PRIO(8) | Linux | PRIO(8) |
نام (NAME)
tc-prio - انضباط صفبندی اولویتدار (Priority qdisc)
خلاصه دستور (SYNOPSIS)
tc qdisc ... dev dev ( parent classid | root) [ handle major: ] prio [ bands bands ] [ priomap band band band... ] [ estimator interval timeconstant ]
توضیحات (DESCRIPTION)
انضباط صف PRIO یک انضباط صفبندی کلاسی (classful) ساده است که شامل تعداد دلخواهی از کلاسها با اولویتهای متفاوت میشود. خروج بستهها از صف این کلاسها بر اساس ترتیب عددی نزولی اولویت صورت میگیرد. PRIO یک زمانبند (scheduler) است و هرگز بستهها را با تاخیر مواجه نمیکند - این یک انضباط صف نگهدارنده کار (work-conserving) است، هرچند ممکن است انضباطهای صف قرارگرفته درون کلاسهای آن چنین نباشند.
این انضباط صف برای کاهش زمان تاخیر (latency) در شرایطی که نیازی به کاستن از سرعت ترافیک نیست، بسیار کاربردی است.
الگوریتم (ALGORITHM)
هنگام ایجاد با tc qdisc add، تعداد ثابتی باند (Band) ساخته میشود. هر باند در حقیقت یک کلاس است؛ با وجود اینکه افزودن کلاسها با tc qdisc add امکانپذیر نیست، در عوض تعداد باندهایی که باید ایجاد شوند باید در خط فرمانی که PRIO را به ریشه متصل میکند، مشخص گردد.
هنگام خروج از صف (dequeueing)، ابتدا باند ۰ بررسی میشود و تنها در صورتی که بستهای برای تحویل نداشته باشد، PRIO به سراغ باند ۱ میرود و به همین ترتیب ادامه میدهد. بنابراین، بستههایی با بیشترین قابلیت اطمینان باید به باند ۰، بستههای با کمترین تاخیر به باند ۱ و مابقی بستهها به باند ۲ هدایت شوند.
از آنجا که خود انضباط صف PRIO دارای شماره فرعی (minor) صفر خواهد بود، باند ۰ در واقع major:1 و باند ۱ همان major:2 و به همین ترتیب خواهد بود. به جای major، باید شماره اصلی تخصیصیافته به انضباط صف در tc qdisc add را با پارامتر handle جایگزین کنید.
دستهبندی (CLASSIFICATION)
سه روش برای PRIO جهت تعیین اینکه یک بسته در کدام باند در صف قرار گیرد در دسترس است:
- از فضای کاربر (From userspace)
- فرآیندی با دسترسیهای کافی میتواند کلاس مقصد را مستقیماً با استفاده از SO_PRIORITY مشخص کند؛ صفحه راهنمای socket(7) را ببینید.
- با یک فیلتر tc (with a tc filter)
- یک فیلتر tc متصل به انضباط صف ریشه میتواند ترافیک را مستقیماً به یک کلاس هدایت کند.
- با نگاشت priomap (with the priomap)
- بر اساس اولویت بسته، که خود از نوع سرویس (Type of Service یا TOS) تخصیصیافته به بسته استخراج میشود.
تنها گزینه priomap به این انضباط صف اختصاص دارد.
پارامترهای انضباط صف (QDISC PARAMETERS)
- bands
- تعداد باندها. اگر از مقدار پیشفرض ۳ تغییر کند، priomap نیز باید بهروزرسانی شود.
- priomap
- پارامتر priomap اولویت یک بسته را به یک کلاس نگاشت میکند. اولویت میتواند مستقیماً از فضای کاربر تنظیم شود یا از نوع سرویس (TOS) بسته مشتق گردد.
این پارامتر نحوه نگاشت اولویتهای بسته (تخصیصیافته توسط هسته) به باندها را تعیین میکند. نگاشت بر مبنای بایت (octet) نوع سرویس یا همان TOS بسته انجام میگیرد که ساختار آن به این شکل است:
0 1 2 3 4 5 6 7 +---+---+---+---+---+---+---+---+ | | | | |PRECEDENCE | TOS |MBZ| | | | | +---+---+---+---+---+---+---+---+
چهار بیت TOS (که «فیلد TOS» نامیده میشوند) به صورت زیر تعریف میشوند:
Binary Decimal Meaning ----------------------------------------- 1000 8 Minimize delay (md) 0100 4 Maximize throughput (mt) 0010 2 Maximize reliability (mr) 0001 1 Minimize monetary cost (mmc) 0000 0 Normal Service
از آنجا که ۱ بیت در سمت راست این چهار بیت قرار دارد، مقدار واقعی فیلد TOS دو برابر مقدار بیتهای TOS است. خروجی tcpdump -v -v مقدار کل فیلد TOS را نشان میدهد، نه فقط چهار بیت آن را. این همان مقداری است که در ستون اول جدول زیر مشاهده میکنید:
TOS Bits Means Linux Priority Band ------------------------------------------------------------ 0x0 0 Normal Service 0 Best Effort 1 0x2 1 Minimize Monetary Cost 0 Best Effort 1 0x4 2 Maximize Reliability 0 Best Effort 1 0x6 3 mmc+mr 0 Best Effort 1 0x8 4 Maximize Throughput 2 Bulk 2 0xa 5 mmc+mt 2 Bulk 2 0xc 6 mr+mt 2 Bulk 2 0xe 7 mmc+mr+mt 2 Bulk 2 0x10 8 Minimize Delay 6 Interactive 0 0x12 9 mmc+md 6 Interactive 0 0x14 10 mr+md 6 Interactive 0 0x16 11 mmc+mr+md 6 Interactive 0 0x18 12 mt+md 4 Int. Bulk 1 0x1a 13 mmc+mt+md 4 Int. Bulk 1 0x1c 14 mr+mt+md 4 Int. Bulk 1 0x1e 15 mmc+mr+mt+md 4 Int. Bulk 1
ستون دوم حاوی مقدار چهار بیت مربوطه در TOS است و به دنبال آن معنای ترجمهشده آنها آمده است. به عنوان مثال، ۱۵ بیانگر بستهای است که خواستار کمترین هزینه مالی (Minimal Monetary Cost)، بیشترین قابلیت اطمینان (Maximum Reliability)، بیشترین توان عملیاتی (Maximum Throughput) و کمترین تاخیر (Minimum Delay) است.
ستون چهارم نحوه تفسیر بیتهای TOS توسط هسته لینوکس را فهرست کرده و نشان میدهد به کدام اولویت نگاشت میشوند.
ستون آخر نتیجه priomap پیشفرض را نشان میدهد. در خط فرمان، priomap پیشفرض به این صورت است:
1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
این بدان معناست که به عنوان مثال اولویت ۴ به باند شماره ۱ نگاشت میشود. همچنین priomap به شما امکان میدهد اولویتهای بالاتر (بزرگتر از ۷) را نیز مشخص کنید که مربوط به نگاشتهای TOS نیستند، اما از راههای دیگری تنظیم شدهاند.
این جدول برگرفته از RFC 1349 (برای جزئیات بیشتر آن را مطالعه کنید) توضیح میدهد که برنامهها چگونه بیتهای TOS خود را تنظیم میکنند:
TELNET 1000 (minimize delay)
FTP
Control 1000 (minimize delay)
Data 0100 (maximize throughput)
TFTP 1000 (minimize delay)
SMTP
Command phase 1000 (minimize delay)
DATA phase 0100 (maximize throughput)
Domain Name Service
UDP Query 1000 (minimize delay)
TCP Query 0000
Zone Transfer 0100 (maximize throughput)
NNTP 0001 (minimize monetary cost)
ICMP
Errors 0000
Requests 0000 (mostly)
Responses <same as request> (mostly)
کلاسها (CLASSES)
کلاسهای PRIO را نمیتوان بیشتر پیکربندی کرد - آنها هنگام اتصال انضباط صف PRIO بهطور خودکار ایجاد میشوند. با این حال، هر کلاس میتواند خود شامل یک انضباط صف دیگر باشد.
ایرادات و اشکالات (BUGS)
حجم بالای ترافیک در باندهای با شماره پایینتر (دارای اولویت بالاتر مانند باند ۰) میتواند باعث گرسنگی (starvation) باندهای با شماره بالاتر شود. این مشکل را میتوان با اتصال یک شکلدهنده ترافیک (به عنوان مثال tc-tbf(8)) به این باندها مهار کرد تا اطمینان حاصل شود که پیوند ارتباطی را به انحصار خود درنمیآورند.
نویسندگان (AUTHORS)
Alexey N. Kuznetsov, <kuznet@ms2.inr.ac.ru>, J Hadi Salim <hadi@cyberus.ca>. این صفحه راهنما توسط bert hubert <ahu@ds9a.nl> نگهداری میشود.
| 16 December 2001 | iproute2 |