| NETEM(8) | Linux | NETEM(8) |
نام (NAME)
tc-netem - شبیهساز شبکه
خلاصه دستور (SYNOPSIS)
tc qdisc ... dev DEVICE ] add netem OPTIONS
OPTIONS := [ LIMIT ] [ DELAY ] [ LOSS ] [ CORRUPT ] [ DUPLICATION ] [ REORDERING ] [ RATE ] [ SLOT ] [ SEED ]
LIMIT := limit packets
DELAY := delay TIME [ JITTER [
CORRELATION ]]]
[ distribution { uniform | normal | pareto |
paretonormal } ]
LOSS := loss { random PERCENT [
CORRELATION ] |
state p13 [ p31 [ p32 [ p23 [
p14]]]] |
gemodel p [ r [ 1-h [ 1-k ]]] } [
ecn ]
CORRUPT := corrupt PERCENT [ CORRELATION ]]
DUPLICATION := duplicate PERCENT [ CORRELATION ]]
REORDERING := reorder PERCENT [ CORRELATION ] [ gap DISTANCE ]
RATE := rate RATE [ PACKETOVERHEAD [ CELLSIZE [ CELLOVERHEAD ]]]]
SLOT := slot { MIN_DELAY [ MAX_DELAY ]
|
distribution { uniform | normal | pareto |
paretonormal | FILE } DELAY JITTER }
[ packets PACKETS ] [ bytes BYTES ]
SEED := seed VALUE
توضیحات (DESCRIPTION)
انضباط صف (qdisc) netem قابلیت شبیهسازی شبکه (Network Emulation) را برای آزمودن پروتکلها از طریق شبیهسازی ویژگیهای شبکههای واقعی فراهم میکند.
این انضباط صف یک یا چند اختلال شبکهای را روی بستهها اعمال میکند؛ از جمله: تأخیر (delay)، اتلاف یا از دست رفتن بسته (loss)، تکثیر بسته (duplication) و خرابی بسته (corruption).
گزینهها (OPTIONS)
- limit COUNT
- حداکثر تعداد بستههایی را که qdisc میتواند هنگام اعمال تأخیر در خود نگه دارد، محدود میکند.
- delay
- TIME [ JITTER [ CORRELATION ]]]
بستهها را پیش از ارسال به تأخیر میاندازد. پارامترهای اختیاری امکان معرفی تغییرات تأخیر (jitter) و همبستگی (correlation) را فراهم میکنند. مقادیر تأخیر و جیتر بر حسب میلیثانیه بیان میشوند؛ همبستگی با تعیین درصدی مشخص میشود که نشان میدهد تأخیر قبلی تا چه میزان بر مقدار تصادفی فعلی تأثیر خواهد گذاشت. - distribution TYPE
- الگویی را برای توزیع تأخیر مشخص میکند.
- uniform
- استفاده از توزیع یکنواخت با وزن برابر برای تأخیر بستهها.
- normal
- استفاده از توزیع گاوسی برای تأخیرها. گاهی منحنی زنگولهای (Bell Curve) نامیده میشود.
- pareto
- استفاده از توزیع پارتو برای تأخیر بستهها. این توزیع برای شبیهسازی توزیعهای با دنباله بلند (long-tail) مفید است.
- paretonormal
- این گزینه ترکیبی از توزیعهای pareto و normal است که ویژگیهای هر دو منحنی زنگولهای و دنباله بلند را در بر دارد.
- loss MODEL
- بستهها را بر اساس یک مدل اتلاف دور میاندازد. MODEL میتواند یکی از موارد زیر باشد:
- random PERCENT
- اتلاف هر بسته مستقل از سایر بستهها است.
- state P13 [ P31 [ P32 [ P23 P14 ]]]
- از یک
زنجیره
مارکوف
۴-حالته
برای توصیف
اتلاف بسته
استفاده
میکند.
پارامتر P13 بیانگر اتلاف بسته است. پارامترهای اختیاری مدل را به ۲-حالته P31، ۳-حالته P23، P32 و ۴-حالته P14 گسترش میدهند.حالتهای زنجیره مارکوف عبارتند از:
- 1
- دریافت مناسب بسته (بدون اتلاف).
- 2
- دریافت مناسب در یک رگبار (burst).
- 3
- اتلافهای رگباری (burst losses).
- 4
- اتلافهای مستقل.
- gemodel PERCENT [ R [ 1-H [ 1-K ]]]
- استفاده از مدل گیلبرت-الیوت (اتلاف رگباری) بر پایه:
- ecn
- استفاده از اعلان صریح ازدحام (ECN یا Explicit Congestion Notification) برای علامتگذاری بستهها به جای دور انداختن آنها. برای فعال شدن این قابلیت، باید از یک مدل اتلاف استفاده شده باشد.
- corrupt PERCENT
- محتوای بسته را در یک موقعیت تصادفی بر اساس PERCENT دچار تغییر و خرابی میکند.
- duplicate PERCENT
- پیش از قرار دادن در صف، یک نسخه تکراری از بسته ایجاد میکند.
- reorder PERCENT
- ترتیب بستهها را در صف تغییر میدهد.
- gap DISTANCE
- برخی بستهها را بلافاصله ارسال میکند. تعداد (DISTANCE - 1) بسته اول با تأخیر فرستاده شده و بسته بعدی بلافاصله ارسال میگردد.
- rate RATE [ PACKETOVERHEAD [ CELLSIZE [ CELLOVERHEAD ]]]
- بستهها را بر اساس اندازه آنها به تأخیر میاندازد تا یک سرعت لینک ثابت را شبیهسازی کند. پارامترهای اختیاری:
- PACKETOVERHEAD
- سربار به ازای هر بسته را بر حسب بایت مشخص میکند. برای شبیهسازی هدرهای اضافی لایه پیوند به کار میرود. یک مقدار منفی میتواند برای شبیهسازی حالتی به کار رود که هدر اترنت برداشته شده است (مثلاً -14) یا از فشردهسازی هدر استفاده میشود.
- CELLSIZE
- طرحهای لایه پیوند مانند ATM را شبیهسازی میکند.
- CELLOVERHEAD
- سربار به ازای هر سلول را مشخص میکند.
محدودسازی نرخ تحت تأثیر عوامل متعددی از جمله دانهبندی و دقت ساعت هسته قرار دارد. این امر خود را به شکل فشردهسازی ساختگی بسته (رگبارها یا bursts) نشان میدهد.
- slot MIN_DELAY [ MAX_DELAY ]
- امکان شبیهسازی شبکههای شکافدار (slotted) را فراهم میکند. تحویل بستههای انباشتهشده را به درون یک شکاف زمانی موکول میکند. هر شکاف زمانی در دسترس، با یک حداقل تأخیر برای دستیابی و یک حداکثر تأخیر اختیاری پیکربندی میشود.
- slot distribution
- امکان
پیکربندی
بر اساس
توزیع را،
مشابه با
گزینه distribution
برای تأخیر
بستهها،
فراهم
میسازد.
این گزینههای slot میتوانند تقریب اولیهای از پروتکلهای MAC با ترافیک رگباری نظیر DOCSIS، وایفای (WiFi) و LTE فراهم کنند.
شبیهسازی شکاف زمانی به چند عامل محدود میشود: دانهبندی ساعت هسته، همانند نرخ، و تلاش برای تحویل بستههای متعدد درون یک شکاف زمانی که بر اثر تفکیکپذیری تایمر و همچنین پهنایباند بومی زیرساخت دچار کشیدگی و اعوجاج میشود.
امکان ترکیب ساختار شکافدار (slotting) با نرخ (rate) وجود دارد، که در این صورت رفتارهای پیچیدهای رخ میدهد که طی آن یا نرخ و یا محدودیتهای بایت یا بسته در هر شکاف زمانی، بر نرخ واقعی تحویل حاکم میشوند.
- seed VALUE
- یک مقدار بذر (seed) را برای هدایت و بازتولید رویدادهای تصادفی تولیدشده اتلاف یا خرابی مشخص میکند.
محدودیتها (LIMITATIONS)
ابزار Netem توسط دانهبندی تایمر در هسته محدود میشود. نرخ و تأخیر ممکن است تحت تأثیر وقفههای ساعت قرار گیرند.
ترکیب شکلهای گوناگون تغییر ترتیب ممکن است به نتایج غیرمنتظره منجر شود. برای کارکرد هر روش تغییر ترتیب، وجود مقداری تأخیر ضروری است. اگر تأخیر کمتر از زمان رسیدن بینبستهای (inter-packet arrival time) باشد، هیچ تغییر ترتیبی مشاهده نخواهد شد. به دلیل سازوکارهایی نظیر TSQ (صفهای کوچک TCP)، برای واقعگرایانه بودن نتایج آزمایش کارایی TCP، باید netem را در بخش ورودی (ingress) میزبان گیرنده قرار داد.
ترکیب netem با سایر qdiscها امکانپذیر است، اما ممکن است همیشه کار نکند زیرا netem از بلوک کنترل skb برای تنظیم تأخیرها استفاده میکند.
مثالها (EXAMPLES)
# tc qdisc add dev eth0 root netem delay 100ms
# tc qdisc change dev eth0 root netem delay 100ms 10ms 25%
# tc qdisc change dev eth0 root netem delay 100ms 20ms distribution normal
# tc qdisc change dev eth0 root netem loss 0.1%
همچنین میتوان یک همبستگی اختیاری اضافه کرد. این کار باعث میشود مولد اعداد تصادفی کمتر تصادفی عمل کند و میتوان از آن برای شبیهسازی اتلافهای رگباری بستهها استفاده کرد.
# tc qdisc change dev eth0 root netem duplicate 1%
# tc qdisc change dev eth0 root netem loss 0.3% 25%
دو روش مختلف برای مشخص کردن تغییر ترتیب (reordering) وجود دارد. روش gap از یک توالی ثابت استفاده کرده و ترتیب هر Nامین بسته را تغییر میدهد.
# tc qdisc change dev eth0 root netem gap 5 delay 10ms
روش reorder از درصدی از بستهها برای به هم ریختن ترتیب استفاده میکند.
# tc qdisc change dev eth0 root netem delay 10ms reorder 25% 50%
در این مثال، ۲۵٪ از بستهها (با همبستگی ۵۰٪) بلافاصله ارسال میشوند، بقیه به مدت 10ms به تأخیر میافتند.
اگر جیتر به اندازه کافی بزرگ باشد نیز ترتیب بستهها تغییر خواهد کرد.
# tc qdisc change dev eth0 root netem delay 100ms 75ms
اگر خواهان این رفتار نیستید، انضباط صف داخلی tfifo را با یک انضباط صف ساده FIFO جایگزین کنید.
# tc qdisc add dev eth0 root handle 1: netem delay 10ms 100ms # tc qdisc add dev eth0 parent 1:1 pfifo limit 1000
نمونهای از استفاده از کنترل نرخ و اندازه سلولها:
# tc qdisc add dev eth0 root netem rate 5kbit 20 100 5
امکان اعمال انتخابی اختلال با استفاده از دستهبندی ترافیک وجود دارد.
# tc qdisc add dev eth0 root handle 1: prio # tc qdisc add dev eth0 parent 1:3 handle 30: tbf rate 20kbit buffer 1600 limit 3000 # tc qdisc add dev eth0 parent 30:1 handle 31: netem delay 200ms 10ms distribution normal # tc filter add dev eth0 protocol ip parent 1:0 prio 3 u32 match ip dst 65.172.181.4/32 flowid 1:3
منابع (SOURCES)
- 1.
- Hemminger S. , "Network Emulation with NetEm", Open Source Development Lab, April 2005 http://devresources.linux-foundation.org/shemminger/netem/LCA2005_paper.pdf
- 2.
- Salsano S., Ludovici F., Ordine A., "Definition of a general and intuitive loss model for packet networks and its implementation in the Netem module in the Linux kernel", available at http://netgroup.uniroma2.it/NetemCLG
همچنین ببینید (SEE ALSO)
نویسندگان (AUTHORS)
ابزار Netem توسط Stephen Hemminger در Linux foundation نوشته شده و از NISTnet الهام گرفته شده است.
صفحه راهنمای اصلی توسط Fabio Ludovici <fabio.ludovici at yahoo dot it> و Hagen Paul Pfeifer <hagen@jauu.net> نوشته شده است.
| 25 November 2011 | iproute2 |