Основные протоколы физического уровня Fibre Channel.

Часто название протокола доступа к среде передачи в соответствующей конфигурации — «петля с арбитражем доступа» (Fibre Channel Arbitrated Loop, FC-AL) — используют в качестве эквивалента названия технологии Fibre Channel. Однако, по иронии судьбы, получивший такую известность протокол не входил в первоначальный вариант стандарта и лишь впоследствии был принят в качестве дополнения к нему.

Ниже мы рассмотрим основные процедуры, протоколы и технологии уровня передачи FC-1 и сигнального уровня FC-2 и, в частности, непосредственно сам арбитраж доступа.

КОДИРОВАНИЕ 8B/10B

Рисунок 1. Преобразование 8В/10В.

Уровень FC-1 определяет протокол передачи, в том числе правила кодирования и декодирования, специальные символы и контроль ошибок. В соответствии со схемой кодирования 8B/10B блоки данных из 8 бит преобразуются в блоки данных из 10 бит. Эта схема была изначально разработана компанией IBM для ESCON и позволяет, в частности, обеспечить баланс напряжения постоянного тока.

Некодированная информация разбивается на блоки по 8 бит: A, B, C, D, E, F, G, H, плюс контрольная переменная Z (см. Рисунок 1). Последняя может принимать значение D в случае обычных символов данных (D-типа) или K в случае специальных символов (K-типа). Эта информация преобразуется в соответствии с правилами 8B/10B в так называемый передаваемый символ (Transmission Character) из 10 бит: a, b, c, d, e, i, f, g, h, j. Правила, в частности, предусматривают, что передаваемый символ D-типа должен содержать не менее четырех нулей и единиц, причем число идущих подряд нулей или единиц не должно быть больше четырех. Каждый имеющий смысл передаваемый символ имеет свое обозначение Zxx.y в соответствии со следующим соглашением: Z — контрольная переменная; xx — десятичное значение двоичного числа, составленного из битов E, D, C, B и A, а y — десятичное значение двоичного числа, составленного из битов H, G, F. Так, например, передаваемый символ для специального (т. е. К-типа) байта 10111100 обозначается как K28.5. Иногда он называется также запятой (comma).

Каждый байт данных или специальный символ имеет два (возможно, одинаковых) передаваемых кода, т. е. каждый передаваемый символ имеет два представления, в частности K28.5 может быть представлен и как десятибитовая последовательность 0011111010, и как 1100000101. Какое из двух возможных представлений будет выбрано для передачи, зависит от значения «текущего дисбаланса» (Running Disparity, RD). Двоичный параметр RD вычисляется на основании баланса 0 и 1 в подблоках передаваемого символа. 1 соответствует сигналу с большей оптической мощностью (для оптических каналов) или сигналу с большим напряжением на контакте +, чем на контакте - (в случае медных линий). Текущий дисбаланс вычисляется после первых шести битов каждого передаваемого символа и затем после последних четырех его битов. Дисбаланс может быть положительным (больше единиц, чем нулей) или отрицательным (больше нулей, чем единиц). Такая схема призвана обеспечить равенство нулей и единиц с течением времени.

Всевозможных 10-битовых комбинаций больше, чем реально используется для представления 256 обычных символов. Таким образом, при получении 10-битовой последовательности битов, не соответствующей ни D-типу, ни K-типу, получатель сигнализирует об ошибке кодирования. Кроме того, как отправитель, так и получатель вычисляют новое значение текущего дисбаланса. Если полученный символ имеет отличное от ожидаемого значение дисбаланса (которое получатель определяет на основании предыдущего значения), то получатель сигнализирует об ошибке дисбаланса. Такой подход позволяет реализовать контроль ошибок. Вообще же, вероятность возникновения ошибки при передаче данных составляет ничтожную величину 10-12.

АРБИТРАЖ ДОСТУПА

В отличие от двух других топологий Fibre Channel, в случае петли с арбитражем доступа входящие в нее устройства вынуждены конкурировать друг с другом за доступ к среде передачи. Право передачи предоставляется тому из них, кто выиграет процедуру арбитража. Арбитраж осуществляется следующим образом.

При наличии данных для передачи устройство должно вначале получить контроль над петлей. Для этого оно передает кодовое слово — примитив арбитража ARBx (Arbitrate Primitive Signal), где x соответствует физическому адресу (Arbitrated Loop Physical Address, AL_PA). Если примитив ARBx возвращается обратно, то устройство получает контроль над петлей, после чего оно может передать адресату примитив открытия соединения (Open Primitive Signal, OPN). После этого два устройства взаимодействуют фактически напрямую. Все остальные устройства между ними служат лишь пассивными повторителями передаваемых данных.

Если же доступ к петле хотят получить одновременно несколько устройств, то тогда они сравнивают содержащийся в примитиве ARB адрес со своими собственными. Если участвующее в арбитраже устройство имеет больший адрес, то оно передает полученный примитив дальше без изменений; если же оно имеет меньший адрес, то полученный примитив изымается из обращения, и это устройство передает примитив со своим адресом. Таким образом, арбитраж выигрывает устройство с наименьшим адресом. Получившее контроль над петлей устройство может сохранять его неограниченно долго. Правда, стандарт предусматривает алгоритм обеспечения справедливого доступа (Access Fairness Algorithm), в соответствии с которым устройство не имеет права повторно участвовать в арбитраже, пока всем остальным устройствам не будет предоставлена возможность установить контроль над петлей. К сожалению, реализация этого алгоритма не является обязательной.

ИНИЦИАЛИЗАЦИЯ ПЕТЛИ

Функционирование петли возможно только после ее инициализации, причем после появления в петле нового устройства или отключения от нее имевшегося вся процедура должна повторяться заново. Инициализация состоит в назначении устройствам (точнее, их портам) физических адресов AL_PA.

Адрес AL_PA записывается в младший байт трехбайтного идентификатора адреса (Native Address Identifier, S_ID для отправителя и D_ID для получателя). Однако, в целях соблюдения баланса нулей и единиц, адрес AL_PA может в действительности принимать только 127 разных значений. В случае, если петля связывает более 127 устройств, некоторым из них адреса не достанется, и они будут переведены в пассивный режим (Nonparticipating Mode). В этом режиме устройство только повторяет передаваемые по петле слова. Если петля является автономной, т. е. не подключена к коммутатору, то первые два байта идентификатора остаются пустыми.

Процедура инициализации петли состоит из трех этапов и начинается с передачи примитива инициализации петли (Loop Initialization Primitive, LIP). При включении питания порт передает LIP и тем самым инициирует передачу этого примитива всеми остальными портами. Далее устройства в петле должны выбрать главного (master) для контроля за процессом выбора адресов. Когда петля подключена к коммутатору, главным назначается порт коммутатора; в противном случае главным выбирается порт с наименьшим именем (Port_Name). Наконец, порты выбирают себе адреса в соответствии со следующими приоритетами: назначенный коммутатором, используемый при предыдущей инициализации, запрограммированный производителем, свободный из оставшихся. В конце выбранный главным порт передает примитив CLS о завершении процедуры инициализации.

АДРЕСАЦИЯ

В отличие от многих других технологий локальных сетей, где используется фиксированный MAC-адрес длиной 6 байт, Fibre Channel использует динамически назначаемые при регистрации адреса — так называемые адресные идентификаторы. Адреса в диапазоне от FFFFF0 до FFFFFE (здесь и далее в этом разделе в шестнадцатеричном представлении) закреплены за определенными адресатами — коммутирующей структурой (Fabric), сервером многоадресной рассылки (Multicast Server) и т. д. Адрес FFFFFF зарезервирован для широковещательной рассылки. Адреса назначаются при регистрации в коммутирующей структуре. До регистрации идентификатор адреса не определен и равен 000000.

Как было описано в предыдущем разделе, устройства в петле используют однобайтные физические адреса AL_PA. После завершения инициализации петли и получения адресов AL_PA общедоступные порты типа NL_Port предпринимают попытку зарегистрироваться в коммутирующей структуре, в частности, для получения адресного идентификатора. При этом обычно адрес AL_PA оставляется без изменений и помещает в младший из трех байт адресного идентификатора.

Однако, чтобы инициализация и регистрация вообще были возможны, т. е. чтобы можно было назначить адресные идентификаторы, порты необходимо каким-то образом идентифицировать. Это достигается за счет использования фиксированных именных идентификаторов (Name_Identifier). Именные идентификаторы служат для идентификации портов (Port_Name), узлов (Node_Name) и коммутаторов (Fabric_Name).

КОНТРОЛЬ ПОТОКОВ

Применяемый на уровне FC-2 контроль потоков позволяет согласовать скорость отправки кадров с возможностями коммутирующей структуры и конечных устройств-получателей по их обработке. Лежащая в основе идея достаточно проста: устройство может передавать кадры, только когда другое устройство готово их принять.

В соответствии с правилами Fibre Channel, при установлении соединения между ними устройства должны пройти взаимную регистрацию (login). Одним из результатов регистрации является открытие кредитов. Кредит — это количество кадров, которое отправитель может передать без получения подтверждения об их обработке. Fibre Channel использует два типа контроля потоков: межбуферный (buffer-to-buffer) и сквозной (end-to-end). Какой из механизмов применяется в каждом конкретном случае, зависит от сервисного класса (о сервисных классах см. статью «Fibre Channel» в предыдущем номере LAN). Сквозной контроль потоков используется в случае Класса 1, а межбуферный контроль потоков — для Класса 3; в случае Класса 2 применяются оба типа контроля потоков.

Межбуферный контроль потоков осуществляется по обоим концам прямого канала между узловым портом N_Port и коммутирующим портом F_Port или между двумя узловыми портами N_Port в двухточечной конфигурации. Порты с обеих сторон канала обмениваются друг с другом значениями числа кадров BB_Credit, которые каждый из них готов принять. Например, порт A готов принять X кадров, а порт B — Y кадров. Таким образом, BB_Credit для порта A устанавливается равным Y, а для порта B он будет равным X. Эти значения кредитов остаются неизменными на протяжении всего срока регистрации.

Каждый порт ведет учет числа отправленных им кадров, подтверждение о принятии которых не было получено. Первоначальное значение этого счетчика BB_Credit_CNT устанавливается равным 0 и с каждым отправленным кадром увеличивается на 1. При получении примитива о готовности получателя к приему (Receiver_Ready Primitive Signal, R_RDY) значение счетчика уменьшается на 1. Сигнал R_RDY означает, что получатель обработал кадр, освободил место в буфере и готов к приему следующего кадра. При достижении BB_Credit_CNT значения, равного BB_Credit, передача приостанавливается до получения R_RDY.

Процедура сквозного контроля во многом аналогична вышеописанной, за одним существенным исключением: скорость обмена согласуется двумя конечными устройствами. Как и в предыдущем случае, два взаимодействующих устройства согласуют во время регистрации размер буферов приема EE_Credit. При передаче каждого кадра значение счетчика EE_Credit_CNT увеличивается на 1. При получении кадра с подтверждением (ACK Link Control) значение счетчика уменьшается на указанную в подтверждении величину (кадры ACK позволяют подтвердить получение очередного кадра, нескольких кадров или всей последовательности кадров).

СИНТАКСИЧЕСКАЯ СТРУКТУРА

Вся информация в Fibre Channel передается блоками по четыре передаваемых символа. Эти блоки называются передаваемыми словами (Transmission Word). Начинающиеся с символа K28.5 слова являются служебными (Ordered Set). Сигнальный протокол определяет три типа служебных слов.

Ограничители начала и конца кадра (Start-Of-Frame, SOF и End-Of-Frame, EOF) определяют границы кадра. Отдельные примитивы (Primitive Signal) Idle и Receiver Ready сигнализируют, соответственно, о состоянии готовности порта к приему/передаче и о наличии места в буфере для приема последующих кадров. Последовательности примитивов (Primitive Sequence) Not Operational (NOS), Link Reset (LR) и т. п. представляют собой повторяющиеся служебные слова (не менее 3 раз подряд) и сигнализируют о специфическом состоянии порта.

Риcунок 2. Структура кадра и заголовка кадра Fibre Channel.

В свою очередь, при передаче слова (за исключением примитивов) объединяются в кадры (см. Рисунок 2). Кадр начинается с ограничителя начала кадра SOF. За ним следует заголовок кадра длиной в шесть слов, где, в частности, указывается адреса получателя и отправителя. Основное содержимое кадра представляет полезная нагрузка (в принципе, она может и отсутствовать). Поле полезной нагрузки может также содержать вспомогательный заголовок. Завершается кадр контрольной последовательностью CRC и еще одним служебным словом EOF. Таким образом, длина кадра варьируется от 9 слов (36 10-битных байт) до 537 слов (2148 байт) при максимальной полезной нагрузке. Именно кадрами оперирует коммутирующая структура.

Каждый кадр может содержать самодостаточную информацию (например, команду SCSI) или же разбитую для удобства передачи часть целостного информационного массива (например, файла). Такой логически составляющий единое целое блок данных называется последовательностью (Sequence), или, в традиционной терминологии, пакетом. Каждая последовательность идентифицируется с помощью идентификатора Seq_ID в заголовке кадра, а положение кадра в последовательности — с помощью его порядкового номера Seq_Cnt. Таким образом, получатель способен восстановить правильную последовательность кадров, даже если они прибудут в ином порядке по сравнению с тем, в каком были отправлены.

Взаимодействие между приложениями происходит в контексте обмена или сеанса (exchange) между инициатором (originator) и реципиентом (responder). При передаче первого кадра инициатор присваивает данному диалогу номер OX_ID, этот идентификатор затем будет указываться во всех передаваемых реципиентом кадрах в качестве Exchange_ID. В свою очередь, в первом ответном кадре реципиент указывает номер RX_ID, который он присвоил данному обмену, этот идентификатор также будет затем указываться во всех передаваемых инициатором кадрах. Таким образом, и получатель, и отправитель могут однозначно определить, какому именно высокоуровневому протоколу или приложению им следует передать полученные данные.

НА ВСЕ СЛУЧАИ

Технология Fibre Channel находит себе многочисленные применения, в том числе в кластерах и сетях устройств хранения (Storage Area Network, SAN). Основные области применения Fibre Channel мы рассмотрим в следующем номере.

Дмитрий Ганьжа — ответственный редактор LAN. С ним можно связаться по адресу: diga@lanmag.ru.