Добавить в закладки

AddThis Social Bookmark Button

Последние комментарии

Авторизация



  
Home Аппаратные решения Fibre Channel arbitrated loop (FC-AL)
Fibre Channel arbitrated loop (FC-AL)
Fibre Channel arbitrated loop (FC-AL)

Введение
Когда технология Fibre Channel впервые была представлена, все компоненты оптической сети были весьма дорогостоящими: свитчи, хабы, трансиверы. Технология Arbitrated Loop находится между «point-to-point» и «switched fabric» и предоставляет возможность соединения «point-to-point» до 126 NL_Ports в петлю, но, это меньше, чем в «switched fabric», которая, теоретически, позволяет соединять до 16 миллионов оптических портов. Это был достаточно дешевый способ соединять ограниченное количество устройств в небольшие кольцевые сети.
Fibre Channel arbitrated loop (FC-AL) позволяет последовательно соединять до 126 устройств в конфигурацию «кольцо» через L_Ports (loop ports). FC-AL дешевле, тем, что не требует использования дорогостоящих свитчей. FC-AL неплохой выбор при построении от малых до средних оптических сетей, также существует возможность масштабирования, добавлением оптических свитчей.
 
 Активное изображение
Рис.1 Пример топологии Arbitrated loop с использованием хаба
 
 
Эффективность подключаемости повышается за счет подключения одного или нескольких хабов в сеть. Данные в такой топологии проходят через хаб и все элементы сети, также как в топологии без хаба.
Технология arbitrated loop способствовала внедрению Fibre Channel, путем удешевления стоимости решения, путем исключения дорогостоящих свитчей, также, в зависимости от устройств в сети, уменьшается количество оптических трансиверов.
Arbitrated loop поддерживает больше соединений, чем «point-to-point» и поддерживает 126 NL_Ports и один FL_Port в одной петле. В arbitrated loop, каждый передающий сигнал порт, подсоединяется к получающему порту, так формируется связь между всеми элементами сети до получения замкнутого кольца. Такой тип подключения, обычно осуществляется при помощи Fibre Channel хаба, который устраняет необходимость формирования физического кольца кабелями.

В arbitrated loop каждый порт (хост) видит все пакеты, проходящие по кольцу, и игнорирует (пропускает) пакеты, не адресованные ему.
 
 Активное изображение
Рис.2 Пример топологии Arbitrated loop


Построение «Arbitrated loop»
Arbitrated loop строится, соединением элементов сети в петлю. Петли могут быть сформированы, путем физического формирования кольца или с помощью Fibre Channel хаба. Передача данных происходит от передающего порта к получающему, Это продолжается до тех пор, пока петля была сформирована. Петля может содержать до 126 N_L Ports и одного F_L Portа который используется для подключения к среде Fabric. Даны, которые передаются через кольцо, повторяется каждым портом, пока данные не найдут получателя.
 
 Активное изображение
Рис.3 Arbitrated loop с четырьмя узлами

На рисунке 3 показан пример создания петли. В данном примере показаны четыре узла и четыре трансивера. В этой конфигурации, пропускная способность передачи данных сети делится между всеми узлами петли. В данной конфигурации, если хоть один порт в петле откажет, то вся петля разрушится. При отсутствии аппаратного сбоя, петля может перейти в состояние хаоса, в случае возникновения прерывистых сбоев на любом из узлов. Любой посторонний импульс, каким бы он ни был, ведет за собой реинициализацию всей петли, что приведет к приостановлению всех операций ввода/вывода, до тех пор, пока петля не перейдет в стабильное состояние. Данная ситуация нежелательна в высокодоступных системах хранения информации, которые, в основном используют оптическое соединение со свитчами. Тем не менее, использование двухпортовых оптических устройств в петле, нашло широкое применение внутри большинства систем хранения данных на оптических дисках.
Производительность Arbitrated loop зависит от большого числа факторов. Некоторые из них очевидны, например, количество элементов в петле.
С увеличением количества узлов в петле, время прохождения пакета по петле, также увеличивается. Это происходит потому, что каждый пакет или последовательность могут иметь дополнительные порты для прохождения к конечной точке, прохождение через каждый порт добавляет свою задержку, что влияет на общую пропускную способность, кроме того, это также влияет на задержку при передаче пакетов.
 

Петли с хабами
Возможен другой путь формирования петли, с использованием хаба. Поскольку стоимость трансиверов и узлов резко снизилась, с того времени, когда они впервые были введены, преимущества, полученные с этой конфигурации, может перевешивать дополнительные расходы. Как показано на рисунке 4, петля формируется внутри хаба.
 
 Активное изображение
Рис.4 Arbitrated loop с хабом

Первым улучшением, является, простота кабелирования. Каждый трансивер, должен быть подключен к трансиверу следующего узла и так далее. Как показано на Рис.4, все, что нужно для формирования петли, это просто подключить узлы к хабу. Этот пример показывает, что для того же количества узлов в петле, требуется в два раза больше трансиверов, что увеличивает стоимость решения.
Хаб добавляет одно важное преимущество петле, хаб может исключить из петли отказавшие порты устройства, что позволяет оставшимся в петле устройствам функционировать нормально, как показано на рисунке 5.
 
 Активное изображение
Рис.5 Хаб пропускает порт


Arbitration
Процесс, посредством которого оптический порт контролирует петлю, называется arbitration. Когда порт получает контроль над петлей, и он открыл другой порт, он способен передать фрагмент, другими словами, устройство получает возможность управлять петлей. Рис.6.

 Активное изображение
Рис.6 Arbitrated loop (FC-AL)

Arbitration не позволяет нескольким портам посылать пакеты по петле одновременно. После того, как устройство получает очередь на передачу данных в arbitration и открывает соединение к другому устройству в петле, устанавливается соединение «point-to-point». Оставшиеся порты в петле, не могут никак участвовать, до тех пор, пока не закончится установленное соединение.
 
 Активное изображение
Рис.7 Установленное соединение «point-to-point»

Рис.7 показывает, как один из четырех портов устанавливает соединение в петле. Порт 4 открыл первый порт для передачи данных и оставшиеся порты 2 и 3 были логически исключены из петли, формируя виртуальное point-to-point соединение между портами 1 и 4.
 
Компания EMC впервые представила технологию arbitrated loop в конфигурации прямого соединения HBA к Symmetrix FA (2 Node Arbitrated Loop). Рис.8. Это было первое возможное подключение Fibre Channel к Symmetrix и конфигурация была ограниченной до минимума, до тех пор, пока небыли выявлены все проблемы, связанные с новой технологией.
 
 Активное изображение
Рис.8 Первая имплементация на Symmetrix

Очень быстро хабы были представлены в конфигурациях и возможности соединения массива расширились (Рис.9). Хабы придают эластичность конфигурациям, т.к. они позволяют пропускать соединения с любым портом, если тот некорректно работает, позволяя остальным устройствам в петле продолжать штатно функционировать. Просто говоря, они не позволяют сгоревшему порту или порту с ошибками, положить все устройства в петле.
 
 Активное изображение
Рис.9 Расширенное подключение


Двухпортовые устройства
В двухпортовых системах хранения данных, каждый дисковый накопитель имеет два порта и каждый из них подключается к независимой петле. Как показано на Рис. 10, если происходит ошибка на одной петле, к примеру, инициатор 1 отключается, или один порт отказывает, или происходит отказ порта диска, диск остается доступным для второго инициатора. Это может быть сравнено PowerPath на уровне диска.
 
 Активное изображение
Рис.10 Двухпортовые дисковые накопители

Это не единственное решение, в котором применяются двухпортовые диски, хабы, также могут быть включены в конфигурацию, для увеличения масштабируемости и эластичности решения. (Рис 11).
 
 Активное изображение
Рис.11 Высокодоступное решение на основе двухпортовых дисках


Адресация в Arbitrated loop (FC_AL)
Спецификация Fibre Channel определяет три байта поле для адреса, используемые в маршрутизации пакетов. В FC_AL только один из этих трех байтов (младший 8 бит) используется в решениях, которых называют Arbitrated Loop Physical Address (AL_PA). Этот адрес используется в Source ID (S_ID) и Destination ID (D_ID) для пакетов, передаваемых в петле.
 
 Активное изображение
Рис.12 Loop addressing

Рис.12 показывает 24-битную адресацию, используемую в стандарте Fibre Channel. Восемь (8) бит использует AL_PA. Биты с 8 по 23 используются для идентификации FL_port и полные 24 бита используются для N_Port в сетях, где применяются оптические свитчи.
Значения AL_PA используются только символы, в результате использования которых не будет несоответствия после кодировки. AL_PA 00 зарезервирован под FL_Port и оставшиеся 126 AL_PA могут иметь значения между 01 и EF.
В случае если сразу два порта попытаются получить доступ к петле, то доступ получит, только один порт. Этот выбор происходит на основе назначенных приоритетов AL_PA адреса, адрес 00 имеет наивысший приоритет и к EF приоритет снижается.
 
 Активное изображение
 Рис.13 Приоритеты в AL_PA


Loop ID
Используемые AL_PA значения, состоящие из различных значений от 0x00 до 0xFF. Рис.14
Когда вы конфигурируете Symmetrix FA, вы должны указать AL_PA, но значение AL_PA не может выть указано явно, вы должны указать Loop ID в бинарном файле и это значение Loop ID будет переведено в AL_PA. Loop ID представляет собой последовательность значений от 0x00 по 0x7E.
Соответствия Loop ID к AL_PA показано на Рис.14.
 
 Активное изображение
Рис.14 Соответствия AL_PA к loop ID

Arbitrated loop имеет несколько упорядоченных наборов, используемых в Arbitrated loop и схем открытия и закрытия петель. Упорядоченный набор представляет собой группу из четырех символов, первым является K28. Пять специальных символов, а остальные три (data) символы определяют смысл в упорядоченном множестве. Эти упорядоченные множества могут находиться либо в начале или в конце кадра (в случае, если кадр разделители), или могут существовать сами по себе (в случае основных сигналов и последовательностей).
Основные сигналы обычно используются для определения событий или действий на отправляющем порту. Таблица основных сигналов показана на Рис.14. К примеру, сигнал ARB(x) используется портом для обозначения вхождения в петлю. Значение x показывает адрес AL_PA назначенный порту.
 
 Активное изображение
Рис.15 Основные сигналы

Основные последовательности определяют статус или условия и как правило, передаются непрерывно, пока статус не изменится. Как минимум три последовательных происшествия из одного набора требуется, чтобы его восприняли и приняли запрос. Рис.16 показывает основные последовательности, используемые в Arbitrated Loop для обозначения инициализации петли и пропускания порта петли. Оптические сети, использующие свитчи, используют другие методы инициализации соединения, но используют основные последовательности.
 
 Активное изображение
Рис.16 Основные последовательности

В поле AL_PA указывается либо порт источника, либо порт получателя в AL. В некоторых случаях, есть необходимость указывать какому источнику или получателю принадлежит данный AL_PA. Для идентификации порта получателя пакета используется термин AL_PD. Когда указывается порт источника, то используют термин AL_PS. Рис.16 показывает различные виды LIP (Loop Initialization Primitive) последовательностей, используемых при инициализации петель. Рассмотрим каждый отдельно:
Loop Initialization LIP(F7, F7). Если порт передает сигнал LIP(F7, F7), это свидетельствует о том, что порт в состоянии инициализации и запрашивает цикл инициализации для получения адреса AL_PA. Такая ситуация обычно возникает, когда устройство подключается в петлю, либо включается выключенный порт.
 Loop Failure LIP(F8, F7). Сигнал LIP(F8, F7) свидетельствует о том, что порт находится в состоянии инициализации из-за разрыва петли. Этот порт не имеет AL_PA и использует F7. Это может произойти, если подключаемый в петлю, порт без AL_PA обнаруживает сбой в петле. Также ситуация может возникнуть, в случае обнаружения любым портом сбоя в петле.
Loop Initialization LIP(F7, AL_PS). Этот LIP, передается в случае, когда идентифицирован адрес AL_PS и идет запрос инициализации порта. Данный сигнал может подаваться, в случаях, когда порт обнаружил понижение производительности петли, или произошел тайм-аут ожидания очереди на передачу пакета и в других случаях.
Loop Failure LIP(F8, AL_PS). Этот LIP, передается в случае, когда порт, имеющий AL_PS, обнаруживает сбой в петле. Данный сигнал может подаваться, в случаях, когда порт обнаружил сбой соединения, или отключения порта.
Selective Reset LIP(AL_PD, AL_PS). Данный LIP, вызывает выборочную перезагрузку порта с известным AL_PD. Значение AL_PS, указывает на порт, который инициировал запрос. Данный запрос может возникнуть в случае, если обнаружено зависание или некорректная работа порта.
Наряду с основными последовательностями сигналов для инициализации петли, существуют последовательности для установки, либо снятия значения LP_Bypass в Loop Port State Machine (LPSM). С установкой данного значения, LPSM передает пакеты по петле, не пытаясь передавать свои данные. Состояние этой переменной используется также для контроля пропуска пакетов портом и обхода пакетами электрической цепи.
Loop Port Enable LPE(yx), LPE(fx). Эти сигналы посылаются либо выбранному порту (yx), либо сразу всем портам (fx), для сброса переменной LP_Bypass и для включения порта в петлю.
Loop Port Bypass LPB(yx), LPB(fx). Эти сигналы посылаются либо выбранному порту (yx), либо сразу всем портам (fx), для установки порта в режим LP_Bypass и для исключения порта из петли.


Loop Port State Machine (LPSM)
Порт в arbitrated loop обязан действовать в определенном порядке, что бы работать в петле. LPSM пакет определяет такое поведение. (Рис.17) В частности, указывает, что может произойти в петле: инициализация, ожидание передачи данных, открытие/закрытие передачи данных, распределение приоритетов. Эти различные состояния осуществляется с использованием определенных упорядоченных команд, которые обрабатываются в LPSM на портах в петле.
 
 Активное изображение
Рис.18 Loop Port State Machine (LPSM)

Основные операции Loop Port State Machine:
◆    Когда порт включается в петлю, он переходит в статус инициализации и начинает инициализацию петли, когда каждый порт постоянно передает LIP сигнал и контролирует возврат LIP сигнала. При получении LIP сигнала, порт переходит в состояние Open-Init, в котором и происходят все основные шаги инициализации петли.
◆    Если петля не работает, порт может перейти в состояние Old_Port, отключая функциональность Arbitrated Loop, и начинает работать, как N_Port.
◆    Если порты не имеют работы, они находятся в мониторинге состояния передачи и получения, состояние Idles.
◆    Когда порту в петле требуется передать данные, другому порту, он входит в статус ожидания передачи данных. Когда порт получает возможность пеердать данные, он входит в состояние ARB-WON.
◆    Когда одному порту в петле, требуется передать данные другому порту, он отправляет OPN, порту получателю. Порт отправитель переходит в состояние OPEN, а порт получатель в состояние OPENED. Когда оба порта в этих состояниях, начинается передача данных.
◆    Если порт завершил передачу данных и хочет закрыть соединение, то он посылает команду CLS. Порт, который отослал команду CLS, переходит в состояние «передача завершена», порт, который получил команду CLS, переходит в состояние «получение завершено». После этого оба порта логически отключаются от петли и переходят в статус мониторинга.
◆    Если порт находится в статусе мониторинга и получает команду OPEN от другого порта, он переходит в состояние OPENED.
◆    Есть еще одно состояние порта, передача.
◆    Если порт должен отправить данные сразу нескольким портам, и порт окончил передачу данных с первым портом, он отправляет команду CLS, переходит в состояние «передача», и когда он получит команду CLS от первого порта, он сможет открыть соединение со вторым портом, не дожидаясь очереди.


Инициализация петли
Прежде чем обсуждать все шаги подробно, что происходит во время инициализации петли, важно понять, почему этот шаг необходимо сделать, и что в это время происходит.

Введение
Во время инициализации кольца, выполняется ряд функций, включая присвоение AL_PA адресов портам, оповещения, что конфигурация может быть изменена и ошибках в петле. События, которые могут вызвать инициализацию петли:
a) Если порт был включен в петлю, ему нужно получить AL_PA адрес и оповестить остальные порты в кольце об изменении конфигурации
b) Порт зафиксировал проблемы физического подключения и запустил процесс инициализации для оповещения других портов и проверки целостности кольца
Основные шаги инициализации петли показаны на рисунке 19.
 
 Активное изображение
Рис.19 Процесс инициализации

Каждый узел петли способен инициировать процесс инициализации петли, передав команду LIP, Рис.17. Когда узел отослал команду LIP, все остальные узлы петли, распознав команду, переходят в состояние OPEN_ INIT и передают LIP по всей петле. Это происходит до тех пор, пока команда LIP не прейдет на порт, который инициировал процесс инициализации, и он тоже не перейдет в состояние OPEN_ INIT.
Со всеми портами, которые находятся в состоянии OPEN_ INIT, произойдет следующий шаг, выбор временного инициатора кольца. Этот шаг будет инициирован всеми узлами, находящимися в состоянии OPEN_INIT, постоянно отправляющими пакеты LISM (Loop Initialization Select Master). Пакеты LISM имеют формат, описанный на Рис.20, и служат для того, чтобы дать шанс, каждому узлу петли стать временным инициатором кольца.
 
 Активное изображение
Рис.20 Структура пакета LISM

Структура пакета LISM, показана на Рис.20, с S_ID и D_ID полями, заголовок пакета несет значение ‘0000xx’. Младший байт имеет значение 00, если порт FL_Port, или EF, в случае, если это NL_Port. Пакет LISM, также содержит 8 байт World Wide Name (WWN) порта.
Если в петле всего один FL_Port порт, то он автоматически становится инициатором кольца. В случае если в петле больше одного FL_Port порта, то инициатором кольца будет назначен порт с наименьшим WWN. Причина, по которой FL_Port порт становится инициатором кольца, основано на том, что FL_Port порт, является частью оптической сети со свитчами и содержит конфигурацию других сетей. Если в кольце нет FL_Ports портов, то NL_Port порт, то инициатором кольца будет назначен порт с наименьшим WWN.
Процесс, участвующий на этапе LISM, включает передачу LISM пакетов и проверку пакетов LISM на значения последних байтов полей S_ID и D_ID, на каждом порту. Если NL_Port порт, получил LISM пакет от FL_Port, он останавливает отправку собственных LISM пакетов и начинает пересылку LISM пакетов FL_Port порта. Если FL_Port порт получил LISM пакет от NL_Port порта, он игнорирует полученный пакет и продолжает отправлять свои пакеты. Если поля S_ID и D_ID, указывающие на тип порта, принятого LISM пакета, идентичны пакетам отправляемым портом, то будет сравниваться поле WWN. Если WWN порта, полученного в LISM пакете, выше, чем у получателя, по пакет будет отброшен и порт продолжит рассылать свои LISM пакеты. Если WWN порта, полученного в LISM пакете, ниже, чем у получателя, то он прекратит рассылку собственных LISM пакетов и начнет рассылку полученного пакета. В конечном счете один из портов в петле получит свой собственный LISM пакет, и когда это произойдет, он станет временным инициатором кольца.
Далее этот порт начнет рассылать ARB(F0) сигнал, чтобы информировать оставшиеся порты в кольце об окончании процедуры LISM и о том, что инициатор кольца был выбран.
Следующим шагом в этом процессе является назначение AL_PA адресов. Этот процесс включает в себя задания Arbitrated Loop Physical Addresses (AL_PA) каждому порту в кольце. AL_PA адрес порта, является Fibre Channel адресом в петле и используется для идентификации порта в петле, также он помещается в поле S_ID каждого пакета, отправленного из этого порта и в D_ID поле, каждого пакета, получаемого этим портом. Это является многоступенчатым процессом, где адреса назначаются с использованием четырех различных этапов, в зависимости от конкретной операции на порте.
Эти четыре этапа будут рассмотрены далее, а также все концепции распределения AL_PA адресов в зависимости от того, свободен ли AL_PA адрес или нет.
В arbitrated loop имеется 127 адресов в петле (126 NL_Ports адресов и один FL_Port адрес). Для определения, какие AL_PA адреса были розданы в петле, существует 128 битная карта, где каждый бит, соответствует адресу AL_PA. Если бит, установлен в 1, значит, соответствующий адрес AL_PA уже назначен и уже используется. Если бит, установлен в 0, значит, соответствующий адрес AL_PA свободен для использования. С 0 бита по 31 карты AL_PA являются login-required битами (L-bit), которые заполняются FL_Port портом, чтобы указать, что конфигурация изменилась, и что все порты выполнен выход.
 
 Активное изображение
Рис.21 Пакеты LIFA / LIPA / LIHA / LISA

Шаг 1. Первым шагом назначения AL_PA адреса является LIFA (Loop Initialization Fabric Address). LIFA позволяет назначить адреса FL_Ports портам, которые до этого были залогинины в кольце до инициализации петли. Временный инициатор кольца, когда инициализирует карту AL_PA, заполняет ее нулями и помещает эту карту в поле payload LIFA пакета, как показано на Рис.21.
Если инициатор кольца имеет уже назначенный адрес AL_PA, он выставляет соответствующий бит в карте и передает пакет. Если следующий порт имеет уже назначенный адрес AL_PA, он также выставляет соответствующий бит в карте AL_PA и переправляет пакет. Если следующий порт не имеет назначенного адреса AL_PA, он оставляет пакет без изменений и переправляет дальше. Это будет происходить до тех пор, пока пакет LIFA не пройдет через все порты петли и не вернется обратно к инициатору кольца.

Шаг 2. Следующим процессом является LIPA (Loop Initialization Previous Address), он позволяет назначить NL_Ports портам те же адреса AL_PA, которые были использованы портами до инициализации кольца. Этот шаг инициализирует временный инициатор кольца, изменяет идентификатор инициализации в первом слове пакета LIFA, получается LIPA пакет, который передается по петле. Каждый порт, начиная с инициатор кольца, проверяет, есть ли у него назначенный AL-PA адрес, в период инициализации кольца. Если есть, то сначала проверяет, установлен ли соответствующий бит в карте и если нет, то выставляет его. Если бит уже выставлен, то порт обязан ожидать назначения ему адреса софтверным методом. Это будет происходить до тех пор, пока пакет LIPA не пройдет через все порты петли и не вернется обратно к инициатору кольца.

Шаг 3. Следующим этапом инициализации, является назначение адресов AL-PA портам, которые не получили адресов на предыдущих этапах, но имеют настроенные AL-PA адреса, с помощью джамперов либо других методов. Этот процесс называется LIHA (Loop Initialization Hard Address). Временный инициатор кольца изменяет идентификатор инициализации в первом слове пакета LIPA, преобразуя его в LIHA пакет, и отправляет его вновь по кольцу. Каждый порт, который не имеет ранее назначенного адреса AL_PA, но имеет жестко назначенный AL_PA адрес, проверяет бит, отвечающий за этот адрес в пакете LIHA. Если бит уже установлен, тогда порт будет обязан ожидать назначения ему адреса софтверным методом. Это будет происходить до тех пор, пока пакет LIHA не пройдет через все порты петли и не вернется обратно к инициатору кольца.

Шаг 4. Последним процессом, раздающим AL_PA адреса, является LISA (Loop Initialization Soft Address), когда порт получает первый свободный AL_PA адрес. Когда временный инициатор кольца получает обратно LIHA пакет, изменяет идентификатор инициализации в первом слове пакета, получается LISA пакет, который в свою очередь, также отправляется по петле. Пакет передается через все порты, которые не имеют AL_PA адреса. Когда порт, не имеющий AL_PA адреса, получает LISA пакет, он находит первый свободный адрес и выставляет соответствующий бит в карте.

Адреса AL_PA, обычно назначаются с младшего бита. Это позволяет наиболее эффективно распределить адреса в петле. Для обеспечения высокой производительности, AL_PA адреса должны располагаться в кольце по убыванию приоритета. Адрес AL_PA 00 имеет наивысший приоритет.
Если после этих шагов порт не получил ни один адрес, например, если все доступные AL_PA были заняты или адрес порта уже используется, тогда порт перестанет участвовать в петле, перейдя в состояние «non- participating». Если порт не поддерживает последовательного распределения AL_PA адресов по карте, он выставляет идентификатор инициализации в 00.
Лучшим способом присвоения AL_PA адресов, является присвоение адресов во время процесса LISA. Процесс LISA, назначает адреса из доступного диапазона, начиная с первого адреса, после зарезервированных адресов AL_PA, и имеет диапазон адресов, назначенных софтверным методом. Этот способ исключает проблемы с распределение адресов в петле, когда порт-инициатор может получить приоритет, ниже, чем у порта-цели.
Есть два дополнительных шага на стадии инициализации петли, которые необходимы для предоставления информации о распределении адресов AL_PA в цикле, они служат для управления конфигурацией и анализа проблем. Этими шагами являются Loop Initialization Report Position (LIRP) и Loop Initialization Loop Position (LILP):
Процесс LIRP предполагает построение карты AL_PA адресов, в зависимости от их позиций в кольце, относительно временного инициатора кольца. Временный инициатор кольца начинает процесс с построения LIRP пакета, согласно структуре, показанной на Рис.22.
 
 Активное изображение
Рис.22 Формат пакетов LIRP/LILP

Основу структуры пакета, составляет полезная нагрузка, состоящая из одного слова идентификатора инициализации петли и однобайтового смещения, содержащего до 127 AL_PA записей. Временный инициатор кольца первым делом инициализирует структуру пакета, устанавливая смещение на 01, и помещает свой AL_PA адрес на смещении 01 в карте AL_PA адресов, далее заполняет все оставшиеся позиции значениями FF. Этот пакет передается на следующий порт в кольце, смещение сдвигается на 1 и порт пополняет карту AL_PA адресов своим адресом. Это будет происходить до тех пор, пока пакет LILP не пройдет через все порты петли и не вернется обратно к инициатору кольца.
Когда LIRP пакет возвращается к инициатор кольца, он меняет идентификатор пакета на LILP и пересылает весь пакет по кольцу, таким образом, каждый порт получает копию карту распределения AL_PA адресов. Когда этот пакет пройдет по кольцу, инициализация закончится.
 

Login process
После того как петля инициализирована, каждый порт приобрел свой адрес, но ниодин инициатор (HBA в сервере) не знает, к какому устройству в кольце обращаться. Чтобы обнаружить устройства в петле, каждому HBA необходимо выполнить несколько дополнительных шагов. Эти шаги предпринимаются адаптерами с целью обмена информацией, которая впоследствии будет использоваться для управления соединениями, инициализированными этими портами. Fibre Channel предусматривает три различных вида входа, которые могут возникнуть между портами путем использования следующих расширенных функций соединений:
◆ Fabric Login (FLOGI)
◆ N_Port Login (PLOGI)
◆ Process Login (PRLI)

Fabric login используются в оптических сетях, содержащих свитчи и служит для установки соединения N_Port с оборудованием сети. Во время этого процесс N_Port и свитч идентифицируют друг друга и обмениваются параметрами соединения. Также на этом этапе N_Port получает адрес.
 
 Активное изображение
Рис.23 FLOGI и Accept

Рисунок 23 показывает процесс обмена информацией. N_Port отсылает первый FLOGI пакет (Command code 04) со всей своей информацией, а свитч возвращает Accept (Command code 02) и связанные с ним параметры.

В arbitrated loop нет процесса Fabric login, порты обмениваются рабочей информацией через N_Port login, также известный, как PLOGI. Рабочие параметры представляют собой в основном информацию, описанную в стандарте FC-2, и содержат такую информацию, как максимальный размер пакета, скорость передачи данных и др. Процесс N_Port login осуществляется инициатором соединения посылкой PLOGI пакета, получатель отвечает Accept.
 
 Активное изображение
Рис.24 PLOGI и Accept

Рисунок 24 показывает зарос PLOGI и команда Accept приходит от целевого порта с соответствующими параметрами. Полезная нагрузка пакетов запроса и соглашения процесса PLOGI содержат рабочие параметры.

Process Login (PRLI) данный процесс позволяет двум портам обмениваться служебными параметрами, описанными в стандарте FC-4. В основном идет обмен параметрами SCSI соединений, процесс показан на Рис.25.
 
 Активное изображение
Рис.25 PRLI and Accept



Arbitration process

Введение
Arbitration - это процесс, позволяющий порту в петле получить доступ к петле и быть уверенным в том, что только один порт может передавать данные одновременно. Если бы этого процесса не было, то порты могли бы передавать данные одновременно и мешать друг другу. Если два порта в петле одновременно будут делать запрос на доступ для осуществления соединения, то должен быть механизм для обработки нескольких одновременных запросов. Данный механизм осуществлен, на уровне приоритетов, порт с меньшим адресом AL_PA имеет больший приоритет над портом, у которого адрес AL_PA больше. Это может привести к ситуации, когда порт с высоким приоритетом может монопольно захватить петлю, но с данной ситуацией справляется алгоритм Arbitration.
В этом разделе будут обсуждаться следующие темы:
◆ “Шаги процесса Arbitration
◆ “Access fairness
◆ “Открытие и закрытие петли

Для понимания процесса arbitration, нужно представлять концепцию «Fill Words». В петле Fibre Channel, даже если не передаются пакеты с данными, кадры idle постоянно передаются по петле. Когда данные передаются по кольцу, определенное количество idle кадров будет передаваться между пакетами с данными. Кадры idle являются формой заполнения пакетов и должна существовать между пакетами в среде Fibre Channel. В процессе arbitration порту необходимо изменять поля пакета и передавать уже измененные пакеты. Это называют подменой кода. Если порту нужно передать полный код, он будет использовать значения, содержащиеся в уже существующем коде. К примеру, если порту нужно запустить процесс arbitration в петле, ему нужно заменить код с ARB(x) на IDLE, и когда это будет сделано, порт сможет передать ARB(x) вместо полученного IDLE.
Когда инициализация петли завершается, петля заполняется IDLE пакетами, т.к. все порты находятся в статусе мониторинга. Когда порту потребуется передать данные, он должен запустить процесс arbitration, тогда он получи доступ к петле. Для понимания процесса arbitration нужно описать шесть шагов, на примере петли, состоящей из четырех портов, как показано на рисунке 26.
 
 Активное изображение
Рис.26 Arbitration Шаг 1

Шаг 1 процесса Arbitration, показан на Рис.26. Петля заполнена пакетами shows IDLE и все порты находятся в статусе мониторинга. Текущий код замещения на всех портах IDLE и получаемые пакеты с кодом IDLE, замещаются кодами IDLE на всех портах.
 
 Активное изображение
Рис.27 Arbitration Шаг 2

Шаг 2 (Рис.27) показывает, как порт 1 запускает процесс Arbitration для доступа в петлю, изменяя код пакета на ARB(1) для каждого полученного пакета с кодом IDLE. Если порт 1 получает пакет с кодом ARB, он должен проверить приоритет этого пакета ARB и проигнорировать, если пакет содержит приоритет, меньший, чем ARB(1) или передать дальше, если приоритет более высокий.
 
 Активное изображение
Рис.28 Arbitration Шаг 3

Шаг 3 (Рис.28), когда порт 2 получает пакет с ARB(1), он меняет код на ARB(1) и пакет с кодом ARB(1) отправляет на следующий порт в петле. Текущий код на оставшихся портах петли будет также замещен на ARB(1), и пакеты с кодом ARB(1) займут петлю.
 
 Активное изображение
Рис.29 Arbitration Step 4

Шаг 4 (Рис.29), когда порт 1 получает пакет с кодом ARB(1), он считает, что процесс arbitration дает ему доступ в кольцо и сразу меняет код пакета на ARB(F0). Теперь порт 1 будет сбрасывать пакеты с кодом ARB(x) и это обеспечит защиту от ситуации, когда сразу несколько портов будут одновременно передавать данные в кольце.
 
 Активное изображение
Рис.30 Arbitration Шаг 5

Шаг 5 (Рис.30), каждый порт, который получил пакет с кодом ARB(F0) меняет текущий код на ARB(F0) и предает пакет дальше. Данный код передается по петле, чтобы определить, пытается ли какой-либо другой порт запустить процесс Arbitration. Если какой-либо другой порт пытается запустить процесс Arbitration, то он заменит свой код с ARB(x) на ARB(F0).
До тех пор, как ни один другой порт пытается начать процесс Arbitration, код ARB(F0) распространится по кольцу и дойдет до порта 1 и он заменит код на IDLE.
 
 Активное изображение
Рис.31 Arbitration Шаг 6

Шаг 6 (Рис.31), каждый порт, который получает код IDLE, меняет текущий код на IDLE, и до тех пор, пока ни один порт не запускает процесс Arbitration, петля будет заполнена кодом IDLE.



Access fairness
Arbitrated loop присваивает различные приоритеты разным AL_PA адресам, в следствии, может возникнуть ситуация, когда порты с высокими приоритетами будут доминировать в петле над портами, с более низкими приоритетами. Для предотвращения подобной ситуации, используется технология «Access fairness», она позволяет всем портам петли иметь равные возможности для доступа к петле. Это не означает, что технология Access fairness ограничивает время использования петли портом, который получил к ней доступ для передачи данных, данная технология не позволяет порту получать доступ к петле второй раз подряд, если другим портам тоже требуется передать данные. Порты, которые не запускают процесс Arbitration, никоим образом не влияют на Access fairness. Порт, который использует технологию Access fairness, называется fair портом, тот, который нет - unfair.
Access fairness работает, начиная с того времени, когда первый порт в петле начал передачу данных, до того времени, пока другой порт не запустит процесс Arbitration, для доступа к петле. Этот процесс контролирует каждый порт в петле, выставляя переменную Access. Когда порт начинает передачу данных по петле, он выставляет переменную Access на 0 для уверенности в том, что он не запустит процесс Arbitration, пока остальные процессы не получат возможность запустить процесс Arbitration. Порт 1, собравшийся передавать данные по петле, отправляет пакет с кодом ARB(F0) и другие порты, которые пытаются запустить процесс Arbitration, меняют свои ARB(x) на ARB(F0).
 
 Активное изображение
Рис.32 Access fairness window

Первый порт, получив обратно пакет с кодом ARB(F0), знает, что другие порты не будут пытаться получить доступ к петле, запуская процесс Arbitration. Т.к. пакет с кодом ARB(F0) обошел всю петлю, процесс access fairness, также закончил свою работу. С окончанием процесса access fairness window, все fair порты, которые выставили значение переменной access в 0, огораживают себя от повторного запуска процесса Arbitration.


Открытие и закрытие петли
После того, как порт получил доступ к кольцу, он должен выбрать порт назначения передачи данных. Для открытия соединения с портом назначения, порт, получивший доступ к петле, отправляет пакет с кодом OPN и указывает AL_PA адрес порта получателя. Когда порт получает пакет с кодом OPN, устанавливается соединение между портами. На этом этапе, все остальные порты в петле пропускают через себя данные от передающего порта к порту, получающему данные.
 
 Активное изображение
Рис.33 Открытия порта

На рисунке 33, показана ситуация, когда порт 1 открывает передачу данных, отправляя пакет с кодом OPN на порт 3. Как только порт 3 получает пакет с кодом OPN, он отправляет на порт 1 пакет с кодом R_RDY.

Как показано на Рис.34, существуют различные коды для открытия соединения в петле.
 
 Активное изображение
Рис.34 Основные команды открытия петли

OPN(yx) используется для открытия соединения между двумя портами, в том случае, если передача данных будет происходить в обоих направлениях. Данная операция позволяет передавать данные, максимально задействовав пропускную способность кольца, т.к. данные будут передаваться между портами одновременно.
OPN(yy) используется, в том случае, когда порт отправитель должен только передать данные, не предоставляя возможности порту получателю отправлять к нему данные, за исключением пакетов с кодами Acknowledge, Busy, или Reject.
Open Replicate, этот метод используется для открытия передачи данных от порта инициатора ко многим портам. Код open в этом пакете содержит AL_PA адреса всех портов получателей данных.
OPN(yr) используется для передачи данных портам, которые указаны в списке AL_PD адресов.
OPN(fr) используется для передачи данных всем портам, исключая порт отправитель.


Закрытие кольца
Когда все пакеты переданы от одного порта другому, порты должны закрыть соединение, отправляя пакет с командой Close. Когда пакет заканчивает передачу, он отправляет пакет с кодом CLS порту получателю, переходит в статус «Передача завершена» и ждет, пока другой порт не закончит прием. Когда порт получает код CLS, он переходит в состояние «Прием завершен», заканчивает передачу пакета и тоже отсылает пакет с кодом CLS. Когда порт, инициировавший закрытие, получает пакет с кодом CLS от другого порта, он переходит в состояние мониторинга для того, чтобы другой порт мог начать процесс Arbitration.

Следующие три шага показывают закрытие петли.
 
 Активное изображение
Рис.35 Закрытие петли: Шаг 1

Шаг 1. Рис.35 показывает открытое соединение между портами 1 и 3. Порт 3 получил пакет с кодом OPN, и ответил пакетом с кодом R_RDY, порт 1 получил пакет R_RDY и передает пакет с данными на порт 3.
 
 Активное изображение
Рис.36 Закрытие петли: Шаг 2

Шаг 2. Рис.36 показывает, как порт 1 отправляет пакет с кодом Close на порт 3 и порт 1 переходит в состояние «Передача завершена». Порт 3 может продолжать передачу пакетов, до тех пор, пока у него будет хватать возможности.
 
 Активное изображение
Рис.37 Закрытие петли: Шаг 3

Шаг 3. Когда порт 3 получил пакет с кодом Close, он переходит в статус «Прием завершен», завершает передачу пакета данных и отправляет код CLS порту 1 (Рис.37). Порт 3 переходит в состояние мониторинга. Когда первый порт получает код CLS, он может перейти в состояние мониторинга, либо начать передачу с другим портом.


Alternate Buffer-to-Buffer Credit (BB_Credit)

В arbitrated loop передача потока пакетов между двумя портами ведется несколько по другой модели, чем описывалось ранее. Модели управления потоками Buffer-to-buffer и end-to-end устанавливаются во время процесса login. Альтернативный BB_Credit используется в arbitrated loop вместо login BB_Credit, т.к. каждый порт в петле может открывать до 126 соединений к другим портам и, следовательно, придется следить за каждым портом, во время процесса N_Port login. Это было бы значительным осложнением. Альтернативная модель BB_Credit представляет собой расширенную расширение login BB_Credit и начинает работу во время инициализации процесса логина, изначально он устанавливается в ноль, и динамически увеличивается, когда открываются соединения между портами кольца.
Login BB_Credit используется для установки значения доступных BB_Credit, когда устанавливается соединение в петле и порты при желании могут использовать login BB_credit.
 
 Активное изображение
Рис.38 Alternate credit

Порт, отправляя пакет с кодом R_RDY, для каждого доступного принимающего порта, активирует модель BB_Credit. Это позволяет открытым портам, со свободными значениями BB_Credit, начинать передачу пакетов, как только они получают пакет с кодом R_RDY от порта получателя. Порт петли должен показывать, поддерживает ли он login BB_Credit или Alternate Credit модель. Этот параметр выставляется во время процесса N_Port login, когда бит управления BB_Credit (BBM bit) устанавливается в 1 для поддержки Alternate credit либо установлен в 0, при использовании модели login BB_Credit.
Рис.38 показывает ситуацию, когда порты 1 и 3 во время процедуры N_Port login включают поддержку Alternate credit и выставляют BB_Credit в ноль. Это происходит, когда порт 1 посылает пакет с кодом OPN(3, 1) на порт 3, далее порт 1 ожидает пакет с кодом R_RDY от порта 3, чтобы начать передачу данных. Количество принятых портом 1 пакетов с кодом R_RDY, указывает на количество свободных буферов на порте 3.
Когда передача данных прекращается, количество доступных BB_Credits устанавливается в 0, т.к. не отослано ни одного пакета с кодом R_RDY. Количество доступных BB_Credit будет выставлено, при следующей инициализации соединения между портами.
 

Добавить комментарий


Защитный код
Обновить

Статьи в разделе