УДК 004.724.4
ПРОВЕРКА ДОПУСТИМОСТИ СХЕМЫ МАРШРУТИЗАЦИИ
В СИСТЕМЕ RapidIO
А.А. Бакулин (НИИСИ РАН, г. Москва, [email protected])
Предлагается алгоритм проверки схемы маршрутизации на допустимость в заданной системе RapidЮ. Время работы алгоритма линейно зависит от количества маршрутов в проверяемой схеме. Ключевые слова: RapidЮ, маршрутизация, алгоритм, допустимость.
Система, построенная согласно спецификации Кар1йЮ [1], состоит из оконечных устройств и коммутаторов, а также из соединяющих эти устройства двунаправленных физических каналов. Точки подключения каналов к устройствам называются портами.
Каждое оконечное устройство обладает уникальным числовым идентификатором. Только оконечные устройства могут отправлять и принимать пакеты с полезными данными. Доставка отправленного пакета обеспечивается за счет возможностей коммутаторов перенаправлять пакеты: коммутатор, на один из портов которого поступил пакет, на основании идентификатора пункта назначения выбирает выходной порт, куда перенаправляется пакет [2]. Последовательная передача пакета между коммутаторами должна в конце концов привести к доставке пакета в пункт назначения.
Хотя спецификация Кар1йЮ не предписывает формат данных, на основании которых коммутатор принимает решение о перенаправлении, обычно используется таблица маршрутизации -массив номеров выходных портов. Коммутатор использует идентификатор пункта назначения как смещение в этом массиве, по которому расположен требуемый номер выходного порта.
Можно выделить следующие два типа коммутаторов, условно названных в данной статье «коммутатор типа А» и «коммутатор типа В». У коммутатора типа А только одна таблица маршрутизации, и, следовательно, выбор выходного порта всегда однозначно определяется только одним идентификатором пункта назначения. У коммутатора типа В имеется отдельная таблица маршрутизации для каждого входного порта, что позволяет выбирать различные выходные порты для одного пункта назначения в зависимости от того, через какой порт поступил пакет.
Последовательность каналов, через которые проходит пакет от отправителя до получателя, называется маршрутом между отправителем и получателем. Множество маршрутов для всех пар отправителей и получателей, между которыми требуется передавать данные, называется схемой маршрутизации.
Описанные выше особенности коммутаторов накладывают ограничения на проходящие через них маршруты. Маршруты с общим пунктом на-
значения, входящие в коммутатор типа А, должны выходить из него через один порт. В случае коммутатора типа В то же верно для маршрутов с общим пунктом назначения, входящих через один порт. Если данные ограничения не соблюдаются, построить таблицы маршрутизации, соответствующие этим маршрутам, будет невозможно. Таким образом, проверить, что множество маршрутов некоторой схемы удовлетворяет ограничениям, накладываемым коммутаторами, можно путем построения таблиц маршрутизации для всех коммутаторов, задействованных схемой. Но при этом для хранения таблицы маршрутизации на каждом коммутаторе потребуется объем памяти, пропорциональный количеству оконечных устройств в системе.
Пусть каждый маршрут задан в схеме маршрутизации в виде неупорядоченного набора каналов (например, как результат пользовательского ввода или работы некоторого алгоритма). Но произвольный набор каналов необязательно является маршрутом. Маршрут должен удовлетворять следующим требованиям:
• осуществлять доставку пакетов от устройства-источника к устройству-приемнику по единственному пути;
• не включать каналы, не используемые при доставке от источника к приемнику;
• не проходить дважды через один коммутатор;
• не проходить более чем через 256 коммутаторов независимо от размеров системы [2].
Схема маршрутизации, все маршруты которой удовлетворяют как этим требованиям, так и ограничениям, накладываемым коммутаторами, считается допустимой. В данной статье представлен алгоритм для проверки допустимости схемы, время работы которого линейно зависит от количества маршрутов в схеме, а объем используемой памяти не зависит от количества оконечных устройств в системе.
Постановка задачи
Обозначим множество коммутаторов типа А; С в - множество коммутаторов типа В; Е - множество оконечных устройств. С = СА и С в - множество всех коммутаторов, а - множество всех устройств в системе.
Будем представлять каждый двунаправленный канал в виде пары каналов, идущих в противоположных направлениях. Соответственно, каждый порт также будем представлять в виде входного и выходного порта. Каждому устройству n£N сопоставим множество входных и множество Р0 ut (n) выходных портов. Элементы множества каналов L представляют собой кортежи вида (n 1, Р 1, n2, р 2) , где nx , n 2 6 N , р jE Ро ut (n 1 ) , Р 2 6 Pin (n 2) , причем n 1 Ф n 2. Таким образом, канал связывает выходной порт одного устройства с входным портом другого. Каналы всегда парные: если имеется канал , то существует парный ему канал I'=(n2, р2 , n1( р 1) EL, р2 6 Ро ut (n 2) , р 1 6 Pi n (n j ) . Будем обозначать множество каналов, входящих в устройство n, и L0 ut (n) - множество каналов, исходящих из него.
Таким образом, систему можно рассматривать как ориентированный граф G = (N , L) , в котором узлами являются устройства, а дугами - каналы связи. В дальнейшем эти термины будут употребляться как равнозначные.
Определение 1. Маршрутом г (s , t) из устройства-источника SEE в устройство-приемник teE будем называть подмножество множества каналов , для которого выполняются следующие условия.
R1. I L0 ut (s) П г (s, t) | = 1 - в маршруте есть только один канал, исходящий из устройства-источника.
R2. | L in (t) П г (s, t) | = 1 - в маршруте есть только один канал, входящий в устройство-источник.
R3. L in (s )Пг (s , t) = 0 - в источник не входит ни один канал маршрута.
R4. L0 ut (t) П г (s, t) = 0 - из приемника не исходит ни один канал маршрута.
R5. VCEC: I Lin (с) П г (s,t) | = | Lo ut (с) П П г (s , t) | <1 - в коммутатор может входить только один канал, принадлежащий маршруту; если в коммутатор входит один канал маршрута, то из него также выходит один канал маршрута.
R6. VI = (n 1,р 1,n 2,р 2) 6 г (s,t) : n 2 6 CV - все устройства, через которые проходит маршрут, кроме источника и приемника, являются коммутаторами.
R7. | г (s ,t) |< 2 5 7 - маршрут не может включать более 257 каналов.
R8. Маршрут не содержит циклов.
Определение 2. Маршруты ^ (s ^^ ) и
г2( s 2, t 2) называются зависимыми на коммутаторе , если пункты назначения маршрутов совпадают (^ = t2 = t) и выполняется одно из условий:
• Lin (0 П г1 ( s 1, t) * 0 и Lin (0 П г2 (s2,0 Ф
при - оба маршрута проходят через
коммутатор типа A;
• при
с 6 С в - маршруты входят в коммутатор типа В через один канал.
Определение 3. Маршруты (в 1, I и г2 ( в 2 , г 2) называются совместимыми на коммутаторе с 6 С , если выполняется одно из условий:
• маршруты не являются зависимыми на коммутаторе с;
• маршруты зависимы на коммутаторе и К41 СО п Г1 (в 1 , = Ь0 и1 (с) П Г2 (в 2,12 ) , то есть выходят из коммутатора через один канал.
Определение 4. Рассмотрим множество Р£ { (в, г) : в, г 6 Е, в Ф г} и соответствие (2 : Р — 2 сопоставляющее каждой паре (в, г) подмножество (( (в, г) множества каналов. Пару 5 = (Р , О назовем схемой маршрутизации.
Определение 5. Схему маршрутизации 8=(Р, О) будем называть допустимой, если
• все элементы множества I* (5) = { г : г = = О (в , г) , (в , г) 6 Р } являются маршрутами;
• все эти маршруты попарно совместимы на всех коммутаторах системы.
Необходимо определить, является ли схема маршрутизации 5 , заданная для некоторого графа системы , допустимой.
Анализ задачи
Условия R1-R8 должны гарантировать, что маршрут представляет собой простую цепь,
начинающуюся в и заканчивающуюся в .
Теорема 1. Маршрут является простой цепью.
Доказательство. Сначала докажем по индукции, что маршрут г(8, 1) всегда содержит единственную простую ориентированную цепь, соединяющую 8 и 1. Пусть п - количество каналов в простой цепи, исходящей из 8 и заканчивающейся на некотором устройстве deN. При п=1 простая цепь состоит из канала, исходящего из ; такой канал, согласно R1, единственный и всегда существует.
Пусть . Рассмотрим следующие случаи:
• - оконечное устройство; тогда, согласно
Яб, А = г.
• d - коммутатор; согласно R5, этот коммутатор ранее не встречался в построенной простой цепи, а также, в соответствии с R5, маршрут должен включать канал, исходящий из d; добавив этот канал к цепи, получим простую цепь длиной п=т+1.
Таким образом, можно увеличивать длину простой цепи, пока ее конечным узлом не станет . После этого, в силу R4, дальнейшее удлинение простой цепи станет невозможным. Длина цепи ограничена количеством каналов в маршруте (согласно R7), не превышающим 257. Следовательно, построенная таким образом простая цепь всегда заканчивается в г, и любой маршрут г(8, 1) содержит простую направленную цепь из 8 в 1.
Единственность построенной простой цепи из в вытекает из способа ее построения. Так как из выходит лишь один канал маршрута, как и из каждого задействованного коммутатора, то имеется лишь один способ построения простой цепи, выходящей из в и входящей в 1 Более того, никакая другая цепь в маршруте существовать не может: в силу R5, такая цепь не может начинаться или заканчиваться на коммутаторе, а в силу R1 и R6, единственное оконечное устройство, с которого может начинаться цепь, - это .
Тем не менее, условия R1-R7 допускают наличие в маршруте каналов, не входящих в простую цепь, если эти каналы принадлежат циклам, проходящим только через коммутаторы. Но R8 запрещает наличие циклов в маршруте, следовательно, любой маршрут , удовлетворяющий условиям R1-R8, является простой цепью, начинающейся в в и заканчивающейся в 1 Теорема доказана.
Теорема 2. Пусть I* с - множество маршрутов, попарно зависимых на заданном коммутаторе . Тогда отношение совместимости на множестве является отношением эквивалентности.
Доказательство. Свойства рефлексивности и симметричности непосредственно вытекают из определения совместимости: любой маршрут совместим сам с собой, и если маршрут совместим с маршрутом , то также совместим с .
Докажем транзитивность рассматриваемого отношения. Пусть , и -
попарно зависимые на коммутаторе маршруты, причем совместим с и
совместим с . Предположим, что несо-
вместим с . Поскольку эти два маршрута зависимы на коммутаторе , они могут быть несовместимыми, только если выходят из коммутатора через различные каналы. В силу зависимости и совместимости и выходят из коммутатора через общий канал , а и выходят из коммутатора через общий канал . Так как маршрут не может выходить из коммутатора через два различных канала, то , и все три маршрута выходят из коммутатора через один канал, что противоречит предположению. Следовательно, и совместимы. Теорема доказана.
Таким образом, отношение совместимости на множестве является отношением эквивалентности. Это позволяет утверждать, что можно проверить взаимную совместимость множества из зависимых маршрутов, выполнив всего про-
верок на совместимость отдельных маршрутов.
Алгоритм проверки допустимости схемы
Был разработан алгоритм, который одновременно выполняет проверку условий К1-Я8 и проверку маршрутов на совместимость. Алгоритм ис-
пользует фиксированный объем данных для каждого устройства в системе. Обращение к данным устройства выполняется посредством идентификаторов переменных:
• curTarget - текущий пункт назначения маршрутов;
• curRoute - текущий маршрут;
• in - входной порт текущего маршрута;
• out - выходной порт текущего маршрута;
• oldOut - выходной порт предыдущего маршрута (для коммутатора типа A);
• oldOuts - выходные порты предыдущих маршрутов (для коммутатора типа B);
• next - следующее устройство в текущем маршруте.
Начальные значения переменных curTarget и curRoute не должны совпадать с любым возможным для данной схемы пунктом назначения и маршрутом соответственно. Переменным in и out назначаются начальные значения — 1 в предположении, что никакой порт не может иметь такой номер. Для остальных переменных начальные значения не важны.
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), причем для каждого канала количество действий фиксированное. Следовательно, временная сложность алгоритма составляет , где - множество маршрутов схемы , а - максимальная длина маршрута. Так как из R7 следует Lm ах < 2 5 7, то временная сложность составляет . Таким образом, проверка схемы маршрутизации на допустимость выполняется за время, линейно зависящее от количества маршрутов в схеме.
Подытоживая, отметим, что в статье описывается алгоритм проверки допустимости схемы маршрутизации в заданной топологии системы 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=/zda-ta/specs/cmn_trnspt.pdf (дата обращения: 13.06.11).