Бакулин А.А. (alexander.bakulin@gmail.com) - ННИСИ РАН, г. Москва | |
Ключевые слова: допустимость, алгоритм, маршрутизация, rapidio |
|
Keywords: feasibility, algorithm, routing, RapidIO |
|
|
Система, построенная согласно спецификации RapidIO [1], состоит из оконечных устройств и коммутаторов, а также из соединяющих эти устройства двунаправленных физических каналов. Точки подключения каналов к устройствам называются портами. Каждое оконечное устройство обладает уникальным числовым идентификатором. Только оконечные устройства могут отправлять и принимать пакеты с полезными данными. Доставка отправленного пакета обеспечивается за счет возможностей коммутаторов перенаправлять пакеты: коммутатор, на один из портов которого поступил пакет, на основании идентификатора пункта назначения выбирает выходной порт, куда перенаправляется пакет [2]. Последовательная передача пакета между коммутаторами должна в конце концов привести к доставке пакета в пункт назначения. Хотя спецификация RapidIO не предписывает формат данных, на основании которых коммутатор принимает решение о перенаправлении, обычно используется таблица маршрутизации – массив номеров выходных портов. Коммутатор использует идентификатор пункта назначения как смещение в этом массиве, по которому расположен требуемый номер выходного порта. Можно выделить следующие два типа коммутаторов, условно названных в данной статье «коммутатор типа A» и «коммутатор типа B». У коммутатора типа A только одна таблица маршрутизации, и, следовательно, выбор выходного порта всегда однозначно определяется только одним идентификатором пункта назначения. У коммутатора типа B имеется отдельная таблица маршрутизации для каждого входного порта, что позволяет выбирать различные выходные порты для одного пункта назначения в зависимости от того, через какой порт поступил пакет. Последовательность каналов, через которые проходит пакет от отправителя до получателя, называется маршрутом между отправителем и получателем. Множество маршрутов для всех пар отправителей и получателей, между которыми требуется передавать данные, называется схемой маршрутизации. Описанные выше особенности коммутаторов накладывают ограничения на проходящие через них маршруты. Маршруты с общим пунктом назначения, входящие в коммутатор типа A, должны выходить из него через один порт. В случае коммутатора типа B то же верно для маршрутов с общим пунктом назначения, входящих через один порт. Если данные ограничения не соблюдаются, построить таблицы маршрутизации, соответствующие этим маршрутам, будет невозможно. Таким образом, проверить, что множество маршрутов некоторой схемы удовлетворяет ограничениям, накладываемым коммутаторами, можно путем построения таблиц маршрутизации для всех коммутаторов, задействованных схемой. Но при этом для хранения таблицы маршрутизации на каждом коммутаторе потребуется объем памяти, пропорциональный количеству оконечных устройств в системе. Пусть каждый маршрут задан в схеме маршрутизации в виде неупорядоченного набора каналов (например, как результат пользовательского ввода или работы некоторого алгоритма). Но произвольный набор каналов необязательно является маршрутом. Маршрут должен удовлетворять следующим требованиям: · осуществлять доставку пакетов от устройства-источника к устройству-приемнику по единственному пути; · не включать каналы, не используемые при доставке от источника к приемнику; · не проходить дважды через один коммутатор; · не проходить более чем через 256 коммутаторов независимо от размеров системы [2]. Схема маршрутизации, все маршруты которой удовлетворяют как этим требованиям, так и ограничениям, накладываемым коммутаторами, считается допустимой. В данной статье представлен алгоритм для проверки допустимости схемы, время работы которого линейно зависит от количества маршрутов в схеме, а объем используемой памяти не зависит от количества оконечных устройств в системе. Постановка задачи Обозначим Будем представлять каждый двунаправленный канал в виде пары каналов, идущих в противоположных направлениях. Соответственно, каждый порт также будем представлять в виде входного и выходного порта. Каждому устройству Таким образом, систему можно рассматривать как ориентированный граф Определение 1. Маршрутом R1. R2. R3. R4. R5. R6. R7. R8. Маршрут не содержит циклов. Определение 2. Маршруты · · Определение 3. Маршруты · маршруты не являются зависимыми на коммутаторе · маршруты зависимы на коммутаторе Определение 4. Рассмотрим множество Определение 5. Схему маршрутизации S=(P, Q) будем называть допустимой, если · все элементы множества · все эти маршруты попарно совместимы на всех коммутаторах системы. Необходимо определить, является ли схема маршрутизации Анализ задачи Условия R1–R8 должны гарантировать, что маршрут Теорема 1. Маршрут является простой цепью. Доказательство. Сначала докажем по индукции, что маршрут r(s, t) Пусть · · d – коммутатор; согласно R5, этот коммутатор ранее не встречался в построенной простой цепи, а также, в соответствии с R5, маршрут должен включать канал, исходящий из d; добавив этот канал к цепи, получим простую цепь длиной n=m+1. Таким образом, можно увеличивать длину простой цепи, пока ее конечным узлом не станет Единственность построенной простой цепи из Тем не менее, условия R1–R7 допускают наличие в маршруте каналов, не входящих в простую цепь, если эти каналы принадлежат циклам, проходящим только через коммутаторы. Но R8 запрещает наличие циклов в маршруте, следовательно, любой маршрут Теорема 2. Пусть Доказательство. Свойства рефлексивности и симметричности непосредственно вытекают из определения совместимости: любой маршрут совместим сам с собой, и если маршрут Докажем транзитивность рассматриваемого отношения. Пусть Таким образом, отношение совместимости на множестве Алгоритм проверки допустимости схемы Был разработан алгоритм, который одновременно выполняет проверку условий R1–R8 и проверку маршрутов на совместимость. Алгоритм использует фиксированный объем данных для каждого устройства в системе. Обращение к данным устройства выполняется посредством идентификаторов переменных: · curTarget – текущий пункт назначения маршрутов; · curRoute – текущий маршрут; · in – входной порт текущего маршрута; · out – выходной порт текущего маршрута; · oldOut – выходной порт предыдущего маршрута (для коммутатора типа A); · oldOuts – выходные порты предыдущих маршрутов (для коммутатора типа B); · next – следующее устройство в текущем маршруте. Начальные значения переменных curTarget и curRoute не должны совпадать с любым возможным для данной схемы пунктом назначения и маршрутом соответственно. Переменным in и out назначаются начальные значения R(S) обозначает множество маршрутов схемы S. Ключевое слово fail означает завершение алгоритма и признание схемы недопустимой. Успешное завершение работы процедуры ValidateScheme означает допустимость проверяемой схемы. 1 procedure ValidateScheme(Scheme): 2 foreach r(s,t) in R(Scheme) // с группировкой по t 3 unpaired = 0, cnt = 0 4 foreach link in r 5 cnt++ 6 if cnt > 257 7 fail 8 (fdev, fport, tdev, tport) = link 9 SetOut(fdev, fport, tdev, tport, r, s, t) 10 SetIn(fdef, fport, tdev, tport, r, s, t) 11 Check(fdev, t, unpaired) 12 Check(tdev, t, unpaired) 13 if unpaired != 0 14 fail 15 if s.curRoute != r or t.curRoute != r 16 fail 17 chainCnt = 0, cur = s 18 while cur != t 19 cur = cur.next 20 chainCnt++ 21 if chainCnt != cnt 22 fail
23 procedure SetOut(fdev, fport, tdev, tport, route, source, target): 24 if fdev.curRoute == route and fdev.out != -1 25 fail 26 if fdev in E and fdev != source 27 fail 28 fdev.out = fport 29 fdev.curRoute = route 30 fdev.next = tdev
31 procedure SetIn(fdev, fport, tdev, tport, route, source, target): 32 if tdev.curRoute == route and tdev.in != -1 33 fail 34 if tdev in E and tdev != target 35 fail 36 tdev.in = tport 37 tdev.curRoute = route
38 procedure Check(dev, target, unpaired): 39 if dev.in != -1 and dev.out != -1 40 if dev.curTarget == target 41 if dev in CA 42 if dev.oldOut != dev.out 43 fail 44 else if dev in CB 45 if dev.oldOuts[dev.in] != dev.out 46 fail 47 dev.curTarget = target 48 if dev in CA 49 dev.oldOut = dev.out 50 else if dev in CB 51 dev.oldOuts[dev.in] = dev.out 52 dev.in = -1 53 dev.out = -1 54 unpaired-- 55 else if dev not in E 56 unpaired++ Для работы алгоритма необходимо, чтобы обрабатываемые маршруты были сгруппированы по пункту назначения. Алгоритм выполняет проход по всем каналам маршрута и для каждого задействованного маршрутом устройства записывает входной и выходной порты, используемые маршрутом, в переменные in и out (процедуры SetIn и SetOut). Если в переменной oldOut или oldOuts[in] коммутатора был записан выходной порт одного из предыдущих маршрутов с тем же пунктом назначения, то предыдущий и текущий маршруты проверяются на совместимость (процедура Check, строки 40–46). После успешной проверки текущее значение out копируется в oldOut или oldOuts[in] в зависимости от типа коммутатора. Очевидно, что на совместимость проверяются только зависимые маршруты. В силу теоремы 2 используемый в алгоритме способ оценки совместимости текущего маршрута только с предыдущим зависимым с ним в конечном счете определяет совместимость всего множества зависимых на данном коммутаторе или входном порту коммутатора маршрутов. По теореме 1, выполнение условий R1–R8 для множества каналов означает, что это множество представляет собой простую цепь. Покажем выполнение алгоритмом проверки условий R1–R8. R1. Проверка наличия канала, исходящего из устройства-источника, выполняется в строке 15: установленный текущий маршрут говорит о том, что для устройства-источника была вызвана процедура SetOut, установившая выходной порт. Наличие нескольких исходящих каналов из источника определяется в строке 24. R2. Проверка наличия канала, входящего в устройство-приемник, выполняется так же, как и при проверке R1. Наличие нескольких входящих каналов в приемник определяется в строке 32. R3. Проверяется в строке 34. R4. Проверяется в строке 26. R5. Проверка того, что количество используемых входных каналов не превышает 1, выполняется в строке 32. Для выходных каналов аналогичная проверка выполняется в строке 24. Равенство количества (парность) входных и выходных каналов оценивается с помощью переменной unpaired, устанавливаемой в 0 перед обработкой маршрута. При первой записи используемого маршрутом порта коммутатора значение unpaired увеличивается в строке 56, а при последующей записи парного (входного или выходного) порта уменьшается в строке 54. После обработки всех каналов маршрута unpaired должна иметь значение 0; ненулевое значение означает отсутствие парности в одном или более коммутаторах. Эта проверка выполняется в строке 13. R6. Косвенно проверяется путем обеспечения невозможности задействовать иные оконечные устройства, кроме источника и приемника, за счет проверок в строках 26 и 34. R7. Проверяется в строках 5–7. R8. Так как маршрут должен содержать только простую цепь от источника к приемнику, в строках 17–20 выполняется проход по этой цепи. Если количество каналов в цепи не совпадает с количеством каналов в маршруте, маршрут содержит цикл, что будет обнаружено в строке 21. Из алгоритма видно, что в худшем случае (когда схема допустима) для каждого маршрута выполняются два прохода по всем его каналам (в строках 4–12 и 18–20), причем для каждого канала количество действий фиксированное. Следовательно, временная сложность алгоритма составляет Подытоживая, отметим, что в статье описывается алгоритм проверки допустимости схемы маршрутизации в заданной топологии системы RapidIO. Время работы алгоритма линейно зависит от количества маршрутов в схеме и не зависит от размеров системы. Объем используемой памяти линейно зависит от количества узлов в системе. Это позволяет использовать алгоритм для проверки интерактивно корректируемой схемы маршрутизации в реальном времени, например, подсказывая пользователю допустимость того или иного ввода. Кроме того, алгоритм может использоваться как подпрограмма в более общих алгоритмах автоматического или автоматизированного расчета схемы маршрутизации. Литература 1. Бакулин А. Взаимодействие компонентов высокопроизводительных параллельных систем с помощью технологии RapidIO // Моделирование и визуализация. Многопроцессорные системы. Инструментальные средства разработки ПО; [под ред. В.Б. Бетелина]. М.: Изд-во НИИСИ РАН, 2009. С. 77–89. 2. RapidIO Interconnect Specification. Part 3: Common Transport Specification. Revision 1.3. RapidIO Trade Association, 2005. URL: http://www.rapidio.org/specs/disclaimer?specfile=/zdata/specs/cmn_trnspt.pdf (дата обращения: 13.06.11). |
http://swsys.ru/index.php?id=2904&lang=%E2%8C%A9%3Den&page=article |
|