|
|
|
РАЗРАБОТКИ
|
Размисли по HFSC
|
|
|
|
|
|
от zlatozar(21-10-2006)
рейтинг (24)
[ добре ]
[ зле ]
Вариант за отпечатване Реших да напиша статия за PF ама то като гледам с каква скорост се развивата няма да стане скоро. Затова ще опитам да си разясня HFCS планировчика. Ще поясня основните неща, оптимизацията и "хватките" са си ваше дело.
Откъде идва името HFSC? Това е съкращение на Hierarchical Fair Service Curve Algorithm. Ето и каква е идеята. Добре е планировчика да се самонаглася и да взема рашения според случая - selfadopted.
В HFSC има ДВА планировчика(packet schedularas). Първия е гарантирания или т.н. realtime, а втория linkshare. HFSC ще избере автоматично, кой от двата ще използва ako на места параметрите се препокриват. Параметрите, които контролират тези два планировчика са:
realtime - той контролира минималната ширина (bandwidth), която се изисква от опашката. Когато има възможност HFSC предпочита този, той е default. Големината му ще нараства докато се достигне лимита на канала или се достигне upperlimit ограничението. Ако нямаме realtime планировчик или "интернета" ни е малко и не можем да гарантираме нужния минимум, ще се използва linkshare. Този параметър e опционален.
Още по нагледно:
if (there is an eligible packet)
/* real-time criteria */
send eligible packet with min. deadline d ;
else
/* link-sharing criteria */
send packet with min. virtual time v ;
linkshare - той определя колко да се вземе трафика за текущата от опашката баща (parent queue). Разпределя пропорционално интернета. Ако имаме излишък той ще се използва според допълнителните параметри или докато се достигне upperlimit (ako e упоменат). И този параметър е опционален.
Mалко по особено е. Където са дефинирани realtime и linkshare и параметрите в тях се препокриват ще се предпочете realtime. Realtime е планировчика по подразбиране. И още нещо, ако в дефиницията на опашката (а не в altq) не се използва linkshare задължително трябва да се напише bandwidth! В противен случай pfctl ще се оплаче. Запомнете го, макар май се промени това в новите версии на pf.
Надлежно показвам какво съм видял в кода:
ls - linkshare
rt - realtime
ul - upper limit
/* if link_share is not specified, use bandwidth */
if (opts->lssc_m2 == 0)
opts->lssc_m2 = pa->bandwidth;
if ((opts->rtsc_m1 > 0 && opts->rtsc_m2 == 0) ||
(opts->lssc_m1 > 0 && opts->lssc_m2 == 0) ||
(opts->ulsc_m1 > 0 && opts->ulsc_m2 == 0)) {
warnx("m2 is zero for %s", pa->qname);
return (-1);
}
Пример:
altq on $ext_if hfsc bandwidth 45Mb
queue{dns, ssh, www, mail, other}
queue dns bandwidth 10%
queue ssh bandwidth 10%
queue mail bandwidth 20%
queue www bandwidth 40%
queue other hfsc(default)
upperlimit - това е максималното количество "интернет", което някоя от опашките може да използва. И още нещо, което се разбира ама аз да си го кажа: Стойността на upperlimmit трябва да е по-голяма от лимитите поставени в realtime и linkshare. Този параметър е опционален.
Нуждаем се и от малко теория. Ето и необходимата порция.
След всеки един от тези параметри има число, което указва каква част от интернет потока трябва да се задели или от следните 3 числа (m1 d m2). Какво заначат тези числа
m1 - първоначалното количество интернет.
d - забавянето (time delay, in milliseconds)
m2 - корекция на количеството интернет
Тези параметри определят така наречената "сервизна крива" (service curve). Tя може да бъде два типа:
изпъкнала (convex) при m1 > m2
вдлъбната (concave) при m1
Интересен е случая m1 = m2. В този случай няма да има корекции и вие просто принизявате HFSC до CBQ ;)
Забележка: Oсвен тази динамика можете и да добавите и приоритети на пакетите (PRIQ).
ВАЖНО:
1) realtime параметрите не могат да бъдат по-големи от 75% от целия ни интернет (total interface bandwidth)
2) кривата на realtime трябва да е винаги изпъкнала (m1 > m2).
Да онагледим нещата:
# PARENT QUEUE DEFINITION
altq on $ext_if hfsc bandwidth 45Mb
queue{dmznet, prvnet, others}
# CHILD QUEUE DEFINITIONS
# ако пакетите се задържат до 10 сек. ще вземе 50% или повече
# от цялия интернет. Когато пакетите пристигат повече и повече и
# планировчика ги задържа повече от 10 сек. ще се опита да се коригира
# и завземе 65% от интернета.
queue dmznet hfsc(linkshare (50% 10000 65%))
# и тук е същото, само че ще се коригира към по-малко!
queue prvnet hfsc(linkshare (40% 5000 25%))
queue others hfsc(default)
Нека да поясним нещата. Може да разглеждате опашките като скачени съдове, едното е за сметка на другото. Затова сумата от параметрите от един вид не трябва да надвишават количеството интернет (total bandwith) като default опашката не влиза в тия сметки. Тези стойности могат да са %, b, Kb, Mb, Gb.
Да направим анализ. Да кажем, че в DMZ зоната има FTP сървър и в един момент почва да бълва трафик и "тръбата" от 50% не може да смогне (бави пакетите повече от 10 сек.) затова планировчика я разширява автоматично. Разширяването е за сметка обаче на privnet. Защо съм сложил съм 5 сек? Расъждавам така, ако някое типче тръгне да сваля нещо ще запълни "тръбата" и аз ще го резна като изрично намаля капациета. Второ, ако забавянето е повече от 5 сек. то някъде другаде(в случая dmz зоната) става нещо, трябва повече интернет. Хм, за оптимизацията се разбрахме не мога да кажа точно какво трябва да е забавянето (delay).
Запамети. Горната граница на разширяването може да се ограничи единствено от upperlimit.
Нещата стават още по-интересни, когато намесим и realtime. Kакто ви казах могат да бъдат дефинирани едновременно. HFSC автоматично ще избере, кои ще свърши по-добра работа. Може да изберете да имат еднакви параметри, може и да измислите нещо по-хитро. Дерзайте, но не забравяйте, че сервизната крива на realtime винаги трябва да бъде изпъкнала (m1 > m2). И от тук и простичкото правило: ако искате при забавяне да увеличите канала - linkshare, ako не - realtime.
Пример:
# PARENT QUEUE DEFINITION
altq on $ext_if hfsc bandwidth 45Mb
queue{dmznet, prvnet, others}
# CHILD QUEUE DEFINITIONS
queue dmznet hfsc(linkshare (50% 10000 65%))
# HFSC ще избере сам.
queue prvnet hfsc(realtime (40% 5000 25%) linkshare (40% 5000 25%))
queue others hfsc(default)
И остана последно смятането на количествата интернет. Сравнете следните два примера:
# CBQ
altq on $ext_if cbq bandwidth 20Mb queue{dmznet, prvnet, others}
# prvnet gets 8Mb
queue prvnet bandwidth 40% queue{host1, host2}
# host1 gets 4Mb
queue host1 bandwidth 50%
# host2 gets 4Mb
queue host2 bandwidth 50%
# HFSC
altq on $ext_if hfsc bandwidth 20Mb queue{dmznet, prvnet, others}
# prvnet gets 8Mb
queue prvnet hfsc(linkshare 40%) queue{host1, host2}
# host1 gets 4Mb
queue host1 hfsc(linkshare 20%)
# host2 gets 4Mb
queue host2 hfsc(linkshare 20%)
Какво се забелязва? CBQ разпределя параметрите спрямо parent опашката, а HFSC спрямо root! Много често се греши внимавайте!
Искам да спомена и един друг параметър, който често пипам qlimit. Той определя колко да е голяма опашката и от там колко гладко да се обработва. По подразбиране е 50 пакета. Преди да правите радикални промени поиграйте си с qlimit.
queue oRel bandwidth 128Kb qlimit 100 hfsc( linkshare 128Kb ) { oRelTCP, oRelUDP }
queue oRelTCP bandwidth 64Kb qlimit 60 hfsc( linkshare 64Kb default red )
queue oRelUDP bandwidth 64Kb qlimit 60 hfsc( linkshare 64Kb)
Какво да използваме? Ако искаме да сортираме трафика по приоритет ще се възползваме от PRIQ. Ако искаме да разпределим нещата "на калпак" - CBQ. И накрая ако искаме всичко това плюс разни други красиви добавки HFSC.
Ako и това не ви е достатъчно вижте в блога ми http://zlatozar.blogspot.com
<< Програмиране графичен интерфейс (GUI) с Lazarus и freepascal | Крайна цел: FreeBSD >>
|
|
|
|
|
малко пояснения моля От: ken На: 20-10-2006@17:00 GMT+2 Оценка: 1/Неутраленкакво е PF? и също HFCS. но на български , разбираемо като за начинаещи. така както е сега тази информация, все едно е извадена от някое реадме от средата. ....
[Отговори на този коментар]
Към: малко пояснения моля От: ... На: 20-10-2006@18:13 GMT+2 Оценка: 1/НеутраленЩом нищо не ти говори значи действително си начинаещ и тогава темата в тази статия не би трябвало да те интересува,защото така или иначе няма да ти свърши работа
Ако пък си любопитен за какво става дума винаги можеш да попиташ първо най-добрия приятел на човека - google.
Успех.
[Отговори на този коментар] Към: малко пояснения моля От: SysAdmin На: 20-10-2006@21:07 GMT+2 Оценка: 1/НеутраленКолегата обяснява за по-напреднали. Може би някой типичен Линукс потребител няма да разбере лесно темата, защото това е *BSD продукт. Вече няколко години има опити да се портне PF в Линукс, засега няма работещ проект. Така или иначе, PF е пакетен филтър, собствена версия с отворен код на тима на OpenBSD, допринесъл за много новости в света на отворените *nix системи, ще напомня само за OpenSSH. Преди версия 3.0 в OpenBSD се използваше IPF, който обаче сменя лиценза си и затова тимът се заема със задачата да си напише собствен пакетен филтър. След големия успех, PF бива портнат във FreeBSD и NetBSD, отначало като бета проекти на самодейци, след това става част от портовата система на двете дистрибуции. Няма да обяснявам защо PF е по-добър от ipfw (и dummynet), фактът че се наложи именно PF е показателен...
[Отговори на този коментар] Към: малко пояснения моля От: k4BIG <treach< at >mail __точка__ bg> На: 21-10-2006@16:57 GMT+2 Оценка: 1/НеутраленМерси за разработката:)Страхотна е.С нетърпение чакам и други такива статии от zlatozar за ПФ то както е обещал:)
ken ако те интересува в общи линии какво е ПФ разгледаи http://www.openbsd.org/faq/pf/.
[Отговори на този коментар]
HFSC От: Димитър Василев <dimitar< dot >vassilev< at >gmail< dot >com> На: 21-10-2006@9:40 GMT+2 Оценка: 1/НеутраленЗлатозаре,
имам няколко препоръки относно твоите статии:
Първо:
Пиши малко, но качествено."Статията" ти няма логически отделени увод, основна част и заключение. Всичко идва като поток на съзнанието.
Второ:
недей да пишеш в статии в прекалено неформален стил с недостатъчно информация. Ощетяваш тези, които не знаят достатъчно и отблъскваш хората, които знаят повече.
Трето:
Правопис и граматика. Пише се "статия", слагат се запетайки, не се слагат букви от латинската азбука. Все още сме България по официални данни.
Коментарът по знанията ти по английска граматика ще спестя.
Четвърто:
Оставяй за няколко дена и после пак препрочитай какво си писал преди да пуснеш за публичен достъп. Ще ме накараш да ти подаря правописен речник.
Пето: Отнасяй се към читателя с уважение и не ползвай стилистика на детска учителка - "задължително трябва да се напише bandwidth!"
и удивителни знаци. Дразни.
Прочети как пишат Весо Колев, Internet Storm Center, SANS и други.
Шесто:
Изпуснал си да посочиш и страницата на човека дето разработва HFSC
http://www.cs.cmu.edu/~hzhang/HFSC/main...
Там е показано на 3-4 слайда за какво иде реч и е доста по-ясно.
Седмо: коригирай терминологията си.
Сервизна крива си е сервизна крива - но не си споменал защо се нарича така. Нарича се така, защото е векторна крива по която се прави изчисления за ограниченията на които подлежат дадени услуги за определен субект в дадена ситуация.
"schedularas", дето се пише schedulers е по-удачно да се нарече пакетен координатор/разпределител. Подвел си се по буквалния превод. Останалите грешки оставям на теб.
[Отговори на този коментар]
Димитър Василев От: k4BIG <treach__at__mail[ точка ]bg> На: 21-10-2006@17:12 GMT+2 Оценка: 1/НеутраленДимитър Василев ами искам и аз да кажа 1-2 думи.
Не съм видял много разработени матеряли по въпроса добре особено от българи и всеки такъв опит е добре дошъл.
Знам ,че критиката ти е градивна и чесно казано и аз те подкрепям ,НО немисля че момента е подходящ.
Тоест когато има конкуренция в нещо може да имаш изисквания.Когато не ..знаеш отгорова.
В момента аз и другите които четем с интерес подобни статии рискуваме да загубим трудолюбив човек.
Ще кажеш е как може критиката е градивна нищо лошо не казвам...еми хора много и начините по които реагират на нещата са различни.
На тебе може да не ти пука защото най-вероятно разбираш от материята но на други им пука.
Така ,че нека оставим хората да се самокритикуват.Ако не могат нека ги закачаме когато ни пречат.
Ако си модератор или нещо подобно на саита си зимам думите понеже имаш право.Във всеки друг случаи обаче не съм сългасен по нинакъв начин с деиствията ти.
Ако имаш нещо такова за казване вярвам има меилове и т.н. привеит комуникации.
Не се явявам адвокат просто изразявам мнение както и ти си направил.
Поздрави
[Отговори на този коментар] Към: HFSC От: zlatozar <zlatozar (a) hotbox__dot__ru> На: 21-10-2006@20:45 GMT+2 Оценка: 1/НеутраленБлагодаря ти Димитре,
Да правописа ми куца. Да ти си по-добър.
Това са размисли, така че не е редно да има увод.
Написването на тази статия ми отне много време и не ми беше лесно да стигна до някои изводи. Нека всеки погледне посочения от Димитър адрес и да се опита да приложи знанията придобити от там на практика. Успех.
Опитвам се да споделя наученото и да помогна на BSD групата в България, но до тук бях.
Критиката е конструктивна, признавам. Дразниме как е надменно е написана. Димитре, как може да се държищ така след като си виновен http://freebsd-bg.org/ да умре. Там има само една остаряла авторска статия (с увод) и няколко преводни, които са безмислени. Срамота.
Ау как ме нервира....Стила си е мой. Не обичам схемите от началното училище.
[Отговори на този коментар]
Към: Към: HFSC От: Димитър Василев <dimitar[ точка ]vassilev< at >gmail[ точка ]com> На: 21-10-2006@22:13 GMT+2 Оценка: 1/НеутраленЗлатозаре,
знам от собствен опит, че е трудно да си сдържаш нервите, когато трудът ти не е оценен, но трябва.
Нужно е да го опаковаш във вид, който ще го продаде. Когато не сториш, можеш да се сърдиш единствено на себе си.
Колкото до вината ми за умирането на freebsd-bg.org ще коментирам, че това e домейн на Стефан Ламбрев /Чефо/; хоства се в Канада; в момента е в процес на сменяне на регистрар; някои от новите хора, които поеха преводи, не ги довършиха, нито дадоха обратно частично преведеното.
Останалите 3-ма колеги от основният екип също нямат време и поради дефект в хардуера преди време CVS-а на преводите е наличен само в архивен вариант. Любо не можа да смогне да възстанови всичко обратно.
Поради професионални ангажименти нямам време за преводи. В листите на *BSD писах, че тази година няма да имам възможност за участие в OpenFest поради професионални планове.Които желае може да поеме част от функциите, които изпълнявах. Даже ще се радвам, ако има такъв/такава.
Основният ми фокус е основно върху Фют известен още като bg.FreeBSD.org и се мъча да движа част от нещата зад граница, доколкото е възможно. Ако си мислиш, че е лесно да убедиш Пенчев да иде до машинна зала за 20 минути е лесно опитай ти.
Имаш ми електронната поща, ако искаш пиши.
С това смятам дискусията за качеството на материала за приключена и за ненужно повече да заниваме хората по този въпрос.
Има търсачки, така че който иска ще научи повече може да потърси.
Благодаря ти за материала, желая ти успехи и дано следващите ти материали са по-добри.
[Отговори на този коментар]
Към: HFSC От: Vladsun <vsmin __@__ mail __точка__ bg> На: 21-10-2006@21:45 GMT+2 Оценка: 1/Неутрален"...Пето: Отнасяй се към читателя с уважение ...
Прочети как пишат Весо Колев..."
Ефектът LOL.
[Отговори на този коментар]
Към: Към: HFSC От: k4BIG <treach __@__ mail[ точка ]bg> На: 22-10-2006@8:23 GMT+2 Оценка: 1/НеутраленНа фона на това ,че няма много статии по тая тематика особено на български цялата тази критика не беше на место.
Това е като да изгониш единствения си нападател в отбора въпреки ,че нямаш втори.Подържаи ниво когато има конкуренция иначе всичко е обречено на просто човешкото "отказвам се ,обиден съм"
Логично и нормално поведение.Предвидимо.
Но явно на тебе не ти пука понеже имаш доста знания.Ако това ти е грижата за читателя да накараш човека да спре да пише.Евала:)
Дали е основателна или не критиката...
За кои ти пука.За този които пише и искаш да си му настоиник?Или за хората които "не разбират нищо от статията"?
Извини ме за малко по острия тон ,но нека се бъркаме на хората само когато ни засягат лично.Ако си модератор на тоя саит ме извини защото имаш право да го кажеш.В всеки друг случаи не мисля ,че това което правиш е правилно.Има си линча кореспонденция.
Другото е просто театралничене за мене.
Аре!
[Отговори на този коментар] Към: Към: HFSC От: gat3way На: 22-10-2006@17:36 GMT+2 Оценка: 1/НеутраленМлъквай бе IRC тенетемеец...и как беше там? "Е-боклук"? Пфуууу!
[Отговори на този коментар]
Към: HFSC От: Никола На: 21-10-2006@15:08 GMT+2 Оценка: 1/НеутраленПреди време преведох част от README файла в дистрибуцията ALTQ. Можете да хвърлите едно око на http://www.minus273.org/tech/qos/hfsc-t...
[Отговори на този коментар] Мерси От: IID_IUnknown На: 23-10-2006@6:53 GMT+2 Оценка: 1/НеутраленНай накрая нещо полезно за *BSD тук ..
Какво от това че е неформално? И без това материята не е за всеки, този, който има нужда от това няма проблем с неформалните изразявания :-)
[Отговори на този коментар] Не.. (Към: Мерси) От: лонг джон На: 23-10-2006@21:12 GMT+2 Оценка: 1/Неутрален"Най накрая нещо полезно за *BSD тук .."
Очаквам с нетърпение статия за Netfilter на freebsd-bg.org или някой друг от BSD-посветените сайтове в българското пространство, за да имам удоволствието да се изцепя със същия коментар.
Всъщност писанията на златозар имат място тук долкото се говори за технология с отворен код, иначе да се развиват BSD теми в Линукс портал е и донякъде дразнещо. Вероятно на всеки е известно пословичното смешновато и арогантно отношение на основателя на OpenBSD към Linux.
[Отговори на този коментар]
За статията От: smelkomar На: 24-10-2006@12:51 GMT+2 Оценка: 1/НеутраленЪ-ъ-ъ-ъ, това тук не е ли Линукс-портал???
А и имам въпросче - тази "сервизна" крива прилага ли се в pfSense?
[Отговори на този коментар] Към: Не.. (Към: Мерси) От: Michael Pounov <misho (a) openbsd-bg< dot >org> На: 30-10-2006@13:18 GMT+2 Оценка: 1/НеутраленZa syjalenie i ti ne si mnogo praw
da se zaiajdash, zashtoto openSource
obshtestwoto ot BSD i specialno ot OpenBSD
polzwa mnogo proekti wyzlowi :) OpenSSH,
OpenNTPd, OpenSSL i t.n. tehnologii.
Badete malko blagodarni na osobniacite i
ludite zashtoto te dwijat sweta pa makari da
sa konfliktni lichnosti ;) Tozi proekt e
pylen s takiwa individi :):):) I dawa
rezultat !!!
Haide da ne razpalwame woini pls s podobni
izkazwania zashtoto wseki ima da kaje neshto
a i nikoi ne pecheli ot towa ;)
[Отговори на този коментар]
Корекция на глупостите написани от автора От: I. Vladimirov <diablodh__at__abv__dot__bg> На: 2-01-2007@13:26 GMT+2 Оценка: 1/НеутраленНяма да се занимавам да пиша какво е объркал автора, a само ще напиша правилното значение на параметрите под линукс.
HFSC e най-добрия алгоритъм за споделяне на трафика имплементиран до сега в линукс.
1. Главен клас - общата скорост на връзката
2. Дефаутен клас - клас в който попада всичко не описано към другите класове
3. Гарантиран клас - клас гарантиращ скоростта
4. Споделен клас - клас за споделяне на връзката
Гарантирания клас може да бъде подклас на споделен, но споделен не може да бъде подклас на гарантиран
Параметри:
UL - горна граница
m1 - таван на горната граница
d - латинтност при която се достига м1
m2 - долен праг на горната граница
LS - поделена скорост
м1 - горна граница на поделена скорост
d латентност при достигане на м1
m2 - долен праг при поделяне.
m1>=m2
tc qdisc add dev imq0 root handle 1: hfsc default 7
tc qdisc add dev imq1 root handle 1: hfsc default 7
###########################
#Defining root class U/D###
###########################
tc class add dev imq0 parent 1: classid 1:1 hfsc ul m1 100mbit d 500 m2 100mbit ls m1 100mbit d 500 m2 100mbit
tc class add dev imq1 parent 1: classid 1:1 hfsc ul m1 100mbit d 500 m2 100mbit ls m1 100mbit d 500 m2 100mbit
###########################
#7Mi klas NESHEIPNATI #####
###########################
tc class add dev imq0 parent 1:1 classid 1:7 hfsc ul m1 8kbit d 500 m2 8kbit ls m1 8kbit d 500 m2 8kbit
tc class add dev imq1 parent 1:1 classid 1:7 hfsc ul m1 8kbit d 500 m2 8kbit ls m1 8kbit d 500 m2 8kbit
Това са необнодимите класове за начало.
Поделянето може да се направи по следния начин.
Ако имаме 4 компютъра и искаме всеки от тях да ползва по 1 мбит когато и 4 са на линия и всеки от тях да ползва макс 4мбит.
правим един поделящ клас със скорост
class1: ul m1=m2=4mbit ls m1=m2=4mbit
и 4 класа за компютрите
class2: ul m1=m2=4mbit ls m1=4mbit m2=1mbit
class3: ul m1=m2=4mbit ls m1=4mbit m2=1mbit
class4: ul m1=m2=4mbit ls m1=4mbit m2=1mbit
class5: ul m1=m2=4mbit ls m1=4mbit m2=1mbit
Можем също така да направим м2 параметъра различен за всеки компятър като му гарантираме по малка или по висока скорост.
[Отговори на този коментар]
Към: Корекция на глупостите написани от ав От: _c_ <misho__at__openbsd-bg[ точка ]org> На: 3-01-2007@14:43 GMT+2 Оценка: 1/НеутраленAaaa btw
Moment da se prokashliam ... :)
Malko tehnichesko utochnenie :):)
Kakwo obshto ima twoia post s BSD i PF.
Choweche sledish li temata :):)
[Отговори на този коментар]
|
|
|
|
|
|
|
|