Әділ кезек - Википедия - Fair queuing

Әділ кезек отбасы жоспарлау алгоритмдері кейбіреулерінде қолданылады процесс және желіні жоспарлаушылар. Алгоритм қол жеткізуге арналған әділеттілік шектеулі ресурстарды бөліскен кезде, мысалы, үлкен емес пакеттермен немесе процедуралармен ағындарды болдырмау үшін, олар кішігірім жұмыс орындарын тудырады, басқа ағындарға немесе процестерге қарағанда өнімділікті немесе процессор уақытын көбірек жұмсайды.

Әділ кезек кейбір жетілдірілген жағдайда жүзеге асырылады желілік қосқыштар және маршрутизаторлар.

Тарих

Термин әділ кезек Джон Нагл 1985 жылы ұсыныс жасай отырып ойлап тапты айналмалы жоспарлау а арасындағы шлюзде жергілікті желі және ғаламтор нашар ұстайтын хосттардың желілік бұзылуын азайту.[1][2][3]

Алан Демерс байтпен өлшенген нұсқасын ұсынды, Шринивасан Кешав және Скотт Шенкер 1989 ж. және ертерек кезекке тұрудың алгоритміне негізделген.[4][5] Байт бойынша өлшенген әділетті кезек алгоритмі әр пакет үшін теориялық жөнелту күнін есептеу арқылы бит-биттік мультиплекстеуді имитациялауға бағытталған.

Тұжырымдама әрі қарай дамыды салмақты әділ кезек, және неғұрлым жалпы тұжырымдамасы трафикті қалыптастыру, мұнда кезектегі басымдықтар қажетті ағынға жету үшін динамикалық түрде бақыланады қызмет көрсету сапасы мақсаттар немесе кейбір ағымдарды жеделдету.

Қағида

Әділ кезекте бір кезек қолданылады пакет ағыны және оларға әр ағын «ресурстардың тең үлесін ала алатындай» айналымда қызмет етеді.[1][2]

Әдеттегіден артықшылығы бірінші бірінші (FIFO) немесе кезек күту үлкен пакеттерден немесе көптеген деректер пакеттерінен тұратын жоғары деректер жылдамдығының ағыны сілтеме сыйымдылығындағы әділ үлесінен аспауы мүмкін.

Әділ кезек маршрутизаторларда, ажыратқыштарда және статистикалық мультиплексорлар а жіберетін пакеттер буфер. Буфер кезекте тұрған жүйе ретінде жұмыс істейді, мұнда мәліметтер пакеттері олар берілгенге дейін уақытша сақталады.

Сілтеме арқылы деректер жылдамдығы R, кез келген уақытта N деректердің белсенді ағындары (кезектері бос) әрқайсысына орташа деректер жылдамдығымен қызмет көрсетіледі R / N. Қысқа уақыт аралығында деректер жиілігі осы шамада өзгеруі мүмкін, өйткені пакеттер кезекпен жеткізіледі.

Әділдік

Желіні жоспарлау тұрғысынан, әділеттілік бірнеше анықтамалары бар. Нагельдің мақаласы қолданылады айналмалы жоспарлау пакеттер,[2] бұл пакеттердің саны бойынша әділетті, бірақ пакеттердің мөлшері әр түрлі болған кезде өткізу қабілеттілігінде емес. Туралы бірнеше ресми түсініктер әділдік шарасы қоса, анықталды max-min әділеттілік, ең нашар әділеттілік,[6] және әділдік индексі.[7]

Салмақпен бөлісуге жалпылау

Бастапқы идея әр ағымға бірдей жылдамдық береді. Табиғи кеңейту пайдаланушыға өткізгіштің әр ағынға бөлінетін өткізу қабілетінің бөлігін көрсетуге мүмкіндік беруінен тұрады салмақты әділ кезек және жалпыланған процессорды бөлісу.

Байтпен өлшенген әділ кезектер алгоритмі

Бұл алгоритм бәсекеге қабілетті ағындар арасында сілтеме ресурстарын айналмалы түрде бөлудің әділдігін үлгі етуге тырысады. Дестеге негізделген ағындар пакеттік жолмен және кезекпен берілуі керек. Байт бойынша өлшенген әділетті кезек алгоритмі әр пакеттің аяқталу уақытын модельдеу арқылы пакеттерге берілу ретін таңдайды, олар айналма жолмен берілуі мүмкін. Осы модельдеуге сәйкес аяқталу уақыты ең ерте пакет тарату үшін келесі таңдалады.

Алгоритмнің күрделілігі мынада O (журнал (n)), қайда n кезектер / ағындар саны.

Алгоритм бөлшектері

Аяқтаудың нақты уақытын модельдеу, мүмкін болғанымен, есептеуді қажет етеді. Үлгіні беру үшін пакет таңдалған сайын және кез-келген кезекке жаңа пакет келген сайын айтарлықтай есептеу қажет.

Есептеу жүктемесін азайту үшін виртуалды уақыт енгізілді. Әрбір пакеттің аяқталу уақыты осы балама монотонды түрде өсетін виртуалды уақыт шкаласында есептеледі. Виртуалды уақыт уақыт пакеттері олардың жіберілуін аяқтайтын моделін дәлме-дәл жасамаса да, толық функционалды модельдің мақсаттарына жету үшін берілістердің пайда болу ретін дәл модельдейді. Виртуалды уақытты пайдаланып, бұрын кезекте тұрған пакеттердің аяқталу уақытын есептеу қажет емес. Аяқталу уақыты, қолданыстағы пакеттерге жаңа түсімдерге әсер етуі мүмкін болса да, виртуалды уақыт сызығындағы аяқталу уақыты өзгермейді - кез-келген жаңа берілісті орналастыру үшін виртуалды уақыт сызығы нақты уақытқа қатысты өзгереді.

Жаңа кезекте тұрған пакеттің виртуалды аяқталу уақыты виртуалды басталу уақытының қосындысы және пакеттің өлшемімен беріледі. Виртуалды басталу уақыты - сол кезектің алдыңғы виртуалды аяқталу уақыты мен ағымдағы сәттің арасындағы максимум.

Барлық үміткер пакеттерінің виртуалды аяқталу уақытымен (яғни, барлық бос емес кезектердің басындағы пакеттер) есептелгенде, әділ кезек виртуалды аяқталу уақытын салыстырады және ең төменгісін таңдайды. Виртуалды әрлеу уақыты минималды пакет беріледі.

Псевдокод

Ортақ айнымалылар    const N // кезектер Nb [1..N] // кезектер lastVirFinish [1..N] // соңғы виртуалды аяқтау лезі
алу(packet) queueNum: = selectQueue (packet) кезектер [queueNum] .enqueue (packet) updateTime (packet, queueNum)
updateTime(packet, queueNum) // virStart - виртуалды қызметтің виртуалды басталуы: = max (now (), lastVirFinish [queueNum]) packet.virFinish: = packet.size + virStart lastVirFinish [queueNum]: = packet.virFinish
жіберу ()     queueNum: = selectQueue () пакеті: = кезектер [queueNum] .dequeue () қайту пакет
SelectQueue ()     ол: = 1 минVirFinish =      уақыт ол ≤ N істеу         кезек: = кезектер [ол] егер емес кезек. бос және кезек.head.virFinish содан кейін             minVirFinish = queue.head.virFinish queueNum: = it: = it + 1 қайту кезекNum

Функция алу() пакет алынған сайын орындалады және жіберу() жіберілетін пакет таңдалған сайын орындалады, яғни сілтеме бос болған кезде және кезектер бос болмаған кезде. Бұл жалған код функцияны қарастырады қазір() ағымдағы виртуалды уақытты және функцияны қайтарады кезек таңдаңыз() пакет салынған кезекті таңдайды.

Функция Кезек таңдаңыз() кезекті ең аз виртуалды аяқтау уақытымен таңдайды. Оқу мүмкіндігі үшін мұнда ұсынылған жалған код сызықтық іздеу жасайды. Бірақ сұрыпталған тізімді жүргізу логарифмдік уақытта жүзеге асырылуы мүмкін, а O (журнал (n)) күрделілік, бірақ күрделі кодпен.

Сондай-ақ қараңыз

Әдебиеттер тізімі

  1. ^ а б Джон Нагл: «Шексіз жады бар пакеттік қосқыштарда» RFC 970, IETF, Желтоқсан 1985 ж.
  2. ^ а б в Nagle, J. B. (1987). «Шексіз сақтау мүмкіндігі бар пакеттік қосқыштарда». Байланыс бойынша IEEE транзакциялары. 35 (4): 435–438. CiteSeerX  10.1.1.649.5380. дои:10.1109 / TCOM.1987.1096782.
  3. ^ Филлип Гросс (қаңтар 1986), 16-17 қаңтар 1986 ж. DARPA шлюзінің алгоритмдері мен мәліметтер құрылымының жұмыс тобы жұмысының жинағы (PDF), IETF, 5, 98 б, алынды 2015-03-04, Нагл өзінің «әділ кезек» схемасын ұсынды, онда шлюздер әр жіберуші хост үшін жеке кезектерді ұстайды. Осылайша, патологиялық енгізілімдері бар хосттар шлюздің ресурстарындағы өздерінің үлес салмағынан асып кете алмайды. Бұл қызықты және қызықты пікірталас тудырды.
  4. ^ Демерс, Алан; Кешав, Сринивасан; Шенкер, Скотт (1989). «Әділ кезек алгоритмін талдау және модельдеу». ACM SIGCOMM компьютерлік коммуникацияға шолу. 19 (4): 1–12. дои:10.1145/75247.75248.
  5. ^ Демерс, Алан; Кешав, Сринивасан; Шенкер, Скотт (1990). «Әділ кезек алгоритмін талдау және модельдеу» (PDF). Интернеттегі жұмыс: зерттеу және тәжірибе. 1: 3–26.
  6. ^ Беннетт, Дж. Хуй Чжан (1996). «WF / sup 2 / Q: Ең нашар әділетті салмақталған кезек». IEEE INFOCOM '96 жинағы. Компьютерлік байланыс жөніндегі конференция. 1. б. 120. дои:10.1109 / INFCOM.1996.497885. ISBN  978-0-8186-7293-4.
  7. ^ Ито, Ю .; Тасака, С .; Ишибаши, Ю. (2002). «IP-маршрутизаторлар кезегіне әр түрлі салмақты дөңгелек робиндер». IEEE Халықаралық Өнімділік, Есептеу және Байланыс Конференциясының Конференциясы (Каталог No02CH37326). б. 159. дои:10.1109 / IPCCC.2002.995147. ISBN  978-0-7803-7371-6.