Шины.PCI,.USB.и.FireWire
.pdf
BOSS$арбитраж. Все усовершенствования направлены на снижение непродуктив$ ных затрат времени.
Если на шине используются изохронные передачи, то все транзакции организуют$ ся в последовательность циклов — интервалов времени с номинальной длительно$ стью 125 мкс. Начало каждого цикла отмечается широковещательным пакетом начала цикла (Cycle Start). Эти пакеты посылает узел, являющийся мастером цик лов. Право на передачу этого пакета мастер получает через арбитраж, используя высокий приоритет. Организация циклов представлена на рис. 19.1, где изображе$ на работа двух изохронных каналов (Ch#J и Ch#K) и передача асинхронных паке$ тов A и B. После пакета начала цикла каждый узел, которому выделены изохрон$ ные каналы, имеет право передать по одному пакету для каждого канала (до прихода следующего пакета начала цикла). Для изохронных передач используется корот$ кий зазор арбитража, так что асинхронные транзакции, использующие более длин$ ный зазор, в изохронную часть цикла вклиниться не могут. После того как иссяк$ нут изохронные пакеты данного цикла, выполняются асинхронные передачи, у которых для арбитража используются более длинные зазоры. Когда наступает пора посылки следующего пакета начала цикла, мастер цикла, дождавшись осво$ бождения шины, снова получает право доступа (пользуясь своим приоритетом, обусловленным его положением в корне дерева) и посылает следующий пакет на$ чала цикла. Таким образом, длительность цикла может отклоняться от номиналь$ ного значения 125 мкс. Отклонения длительности цикла от номинального не страш$ ны, поскольку пакет начала цикла несет значение системного времени точно на момент фактической передачи этого пакета.
Рис. 19.1. Организация циклов
Если на шине не используются изохронные передачи, то мастер циклов может от$ сутствовать и пакетов начала цикла на шине не будет. В этом случае все время на шине может заполняться асинхронными передачами с их длинными зазорами ар$ битража.
Базовый механизм арбитража
Узел, желающий передать пакет, посылает вверх по дереву сигнал запроса арбит$ ража TX_REQUEST. Узел имеет право на передачу пакета запроса или ответа, ког$
да он получит «сверху» сигнал предоставления RX_GRANT. Если несколько узлов запрашивают шину одновременно, то доступ получит то устройство, которое по$ шлет сигнал арбитража раньше. Запрос арбитража узел имеет право послать, лишь наблюдая состояние покоя шины (Bus Idle) в течение некоторого промежутка вре$ мени — зазора арбитража. Таким образом, более приоритетным окажется узел, использующий для задержки запроса арбитража меньшее значение зазора и нахо$ дящийся ближе к корню — его запрос дойдет быстрее. В связи с этим мастер цик$ лов должен находится в корне дерева, чтобы иметь приоритет посылки пакетов начала цикла по отношению к асинхронным пакетам других узлов. Для шины IEEE 1394 различают две длительности зазора:
изохронный зазор (Isochronous gap), длительность которого лежит в пределах 40–50 нс;
зазор асинхронных транзакций (subaction gap) — более длительный (0,3– 10,6 мкс), величина которого подбирается так, чтобы не слишком затягивать ар$ битраж и не конфликтовать с задержками посылок пакетов квитирования. Дли$ тельность зазора должна быть не меньше, чем время оборота по шине для самой удаленной друг от друга пары узлов.
Немедленный и изохронный арбитраж используют одинаковую (самую маленькую) длительность зазора — 40–50 нс. Однако это не вызывает проблем с приоритетом изохронных пакетов: немедленный арбитраж выполняется только для пакетов$ квитанций, которыми узлы отвечают только на асинхронные пакеты запросов$от$ ветов. Пакеты запросов$ответов требуют приоритетного или справедливого арбит$ ража, так что они могут передаваться только после всех изохронных пакетов данного цикла. Следовательно, немедленный арбитраж никогда не происходит в изохрон$ ной части цикла.
Справедливый арбитраж для асинхронных передач предохраняет шину и ее узлы от возможных перегрузок. Для этого на шине устанавливается интервал справед ливости (fairness interval) — период времени, в течение которого узел имеет право выполнить лишь одну субакцию — послать один асинхронный пакет запроса или ответа. Длительность интервала справедливости зависит от числа актив$ ных узлов (у которых включен уровень LINK) и от загруженности шины изох$ ронным трафиком. Справедливость обеспечивает PHY, у которого имеется специальный бит разрешения арбитража. Физический уровень будет посы$ лать запрос арбитража только при установленном бите разрешения. Этот бит изначально устанавливается после самоидентификации устройств. Далее, как только физический уровень (по запросу от канального) посылает запрос ар$ битража, бит сбрасывается. Повторно он установится только после того, как PHY будет видеть шину в покое в течение интервала arb_reset_gap — зазора сброса арбитража (по умолчанию 21 мкс). Этот интервал гораздо больше изох$ ронного и асинхронного зазора; такое длительное «молчание» всех устройств означает, что у них больше нет асинхронных пакетов, разрешенных к передаче в этом интервале справедливости. Таким образом, интервал справедливости — это время между соседними зазорами сброса арбитража, и его длительность неопределенна (рис. 19.2).
Рис. 19.2. Определение интервала справедливости
Усовершенствование арбитража в IEEE 1394a
Простота механизма арбитража оборачивается бесполезным расходованием вре$ мени на зазоры. Эти расходы снижают эффективную пропускную способность шины, особенно для коротких пакетов и пакетов, передаваемых на высокой скоро$ сти. Для скорости S100 на пакетах максимального размера эффективность исполь$ зования шины составляет 80%, на коротких (64 байта данных) эффективность па$ дает до 20%. При скорости S400 на длинных пакетах эффективность снижается до 50%, а на коротких — до 10%. В IEEE 1394a введен приоритетный арбитраж и ус$ коренные механизмы, сокращающие издержки времени на выжидание интерва$ лов зазоров.
Приоритетный арбитраж (в IEEE 1394a) позволяет узлу за один интервал спра$ ведливости передать более одного асинхронного запроса. Число запросов, разре$ шенных узлу за один интервал, определяется полем pri_req его регистра FAIRNESS_BUDGET (смещение 218h в пространстве регистров CSR, другое имя того же регистра — PRIORITY_BUDGET, формат приведен на рис. 19.3). Значение этого поля заносит диспетчер шины исходя из числа узлов и их потребностей, которые они сообщают в поле pri_max своих регистров. Диспетчер назначает узлам значения pri_req, так чтобы их сумма не превышала 63–N, где N — число узлов на шине.
Рис. 19.3. Формат регистра FAIRNESS_BUDGET
Механизмы ускорения позволяют посылать пакеты запросов и ответов «с окази$ ей», без задержек арбитража. Ускорения позволяют узлам, находящимся дальше от корня, обогнать в арбитраже более близкие к корню узлы, находящиеся в более выгодном положении. Однако и при использовании механизмов ускорения дол$ жен соблюдаться интервал справедливости. Ускорения используются узлами с «умным» PHY, способным анализировать пакеты. Ускорения могут быть реа$ лизованы двумя способами:
используя ускоренный арбитраж, основанный на пакетах квитирования (ack$ accelerated). Здесь возможны два варианта:
узел, отвечающий пакетом квитирования на какой$либо запрос (ответ), мо$ жет послать свой асинхронный пакет запроса (ответа) вслед за пакетом$кви$ танцией, отделяя его лишь префиксом данных. Таким образом производит$ ся соединение (конкатенация) двух пакетов (см. рис. 18.2, б);
узел, желающий послать пакет запроса или ответа, дожидается прохождения пакета$квитанции и с коротким зазором (40 нс, как у изохронного арбитра$ жа) посылает запрос арбитража. При этом он опередит обычный узел, кото$ рый в этом случае будет выдерживать нормальный асинхронный зазор.
Арбитраж «на лету» (Fly$by) позволяет узлу присоединять свой пакет запроса к пакету, транслируемому им в сторону корня и не требующему квитирования (то есть к изохронным пакетам и квитанциям). При этом нельзя присоединять пакет, передаваемый на скорости S100, к пакетам, идущим на более высокой скорости (S100 передается без сигнализации о скорости, так что устройства 1394 будут ошибочно пытаться принять этот пакет на скорости пакета$«носителя»).
Во время исполнения ускоренного арбитража корневой узел не имеет возможно$ сти захватить шину. Если он работает мастером циклов (необходимым для изо$ хронного обмена), то он может не суметь вовремя передать пакет начала цикла. Чтобы этого не происходило, узлы с ускоренным арбитражем должны иметь реги$ стры CYCLE_TIME и запрещать ускоренный арбитраж близко к ожидаемой границе цикла, пока не получат очередной пакет начала цикла.
Новый механизм арбитража в IEEE 1394b
В бета$режиме IEEE 1394b введен новый метод арбитража — BOSS (Bus Owner/ Supervisor/Selector), предназначенный как для чистых B$шин, все узлы которых работают в бета$режиме, так и для гибридных шин, часть узлов которых работает с традиционной DS$сигнализацией. Метод BOSS позволяет передавать запросы на право передачи во время передачи пакетов, что обеспечивает конвейеризацию работы шины и сокращает ее простои.
BOSS арбитраж в чистой B шине
Метод BOSS использует возможность полнодуплексного обмена каждой пары со$ единенных узлов, которая имеется только в бета$режиме. В этом режиме запросы на управление шиной посылаются по передающей линии; запросы представляют собой специальные 10$битные символы, отличимые от символов кодов данных. Узел может посылать запросы в любые свои порты, не занятые передачей данных. По логике работы повторителей многопортовых узлов оказывается, что к узлу, ведущему передачу данных, сигнальные пути от всех других узлов шины свобод$ ны. Исходя из этого узлу, ведущему передачу последнего пакета субакции, логич$ но стать «боссом» (BOSS) — принимать решение о том, какому из узлов предоста$
вить право следующей передачи. Роль «босса» передается между PHY узлов шины по следующим правилам:
данный PHY станет «боссом», если он является источником пакета. По этому признаку боссом станет узел, посылающий пакет квитирования или пакет от$ вета физического уровня;
данный PHY станет «боссом», когда он явно или неявно получает право пере$ дачи. Явное получение права — прием символа GRANT или GRANT_ISOCH в качестве признака завершения пакета или в ответ на запрос арбитража. Неяв$ ное получение права происходит, когда принимающий PHY может самостоя$ тельно определить, что субакция завершена (шина находится в изохронном интервале или последний пакет был пакетом квитирования в асинхронном ин$ тервале);
корневой узел берет на себя роль «босса» после длительного отсутствия актив$ ности на шине (из$за потери пакета квитирования или иной ошибки);
PHY перестает быть «боссом» по приему пакета, а также когда он явно или не$ явно предоставляет право передачи другому узлу.
Вместо интервалов покоя, используемых в традиционном механизме арбитража для обозначения завершения фазы самоидентификации при конфигурировании, завершения изохронного интервала, завершения субакции и границы интервала справедливости, в бета$режиме используются маркеры. Маркер (token) — это спе$ циальный управляющий символ, передаваемый «боссом» в течение времени, до$ статочного для его обнаружения по всей шине. Маркер может передаваться, когда шина находится в покое или когда она удерживается в занятом состоянии потоком символов DATA_NULL (маркеры встраиваются в этот поток).
Как и в традиционном режиме, передача пакетов ведется в двух интервалах — изо$ хронном и асинхронном. Изохронный интервал начинается, когда мастер циклов передает маркер CYCLE_START_EVEN/ODD и пакет начала цикла. Заканчивает$ ся изохронный интервал, когда текущий «босс» не имеет относящегося к текущей фазе изохронного запроса от своего LINK$уровня или от какого$либо активного порта, работающего в бета$режиме. В этом случае «босс» передает маркер ASYNC_ EVEN или ASYNC_ODD, означающий начало асинхронного интервала. Переход шины в состояние нормальной работы после самоидентификации происходит по маркеру ASYNC_EVEN, который передается корневым узлом после передачи его пакетов самоидентификации.
Асинхронный период (время, не занятое под изохронные интервалы), делится на интервалы справедливости. Граница интервала справедливости отмечается мар$ кером ASYNC_EVEN (начало четного интервала справедливости) или ASYNC_ODD (начало нечетного интервала справедливости), отличающимся от предыдущего асинхронного маркера. Четные и нечетные интервалы чередуются. Возможно, что маркер ASYNC_EVEN/ODD одновременно будет означать и завершение изохрон$ ного интервала, и начало нового интервала справедливости. Для повышения ус$ тойчивости шины к потере маркера корневой узел, обнаружив покой шины, не$ прерывно посылает маркеры ASYNC_EVEN/ODD.
Передача запросов в виде символов позволяет осуществлять их приоритезацию
иконвейеризацию, введя множество типов запросов и фаз шины. Изохронные
иасинхронные интервалы делятся на свои четные (even) и нечетные (odd) фазы, чередующиеся независимо друг от друга. Изохронные фазы меняются по концу каждого изохронного интервала цикла (по маркеру ASYNC_EVEN/ODD). Асинх$ ронные фазы меняются на границе каждого интервала справедливости, в соответ$ ствии с маркером ASYNC_EVEN/ODD. После сброса изохронные и асинхронные фазы считаются четными.
Запросы арбитража могут предназначаться как для текущей фазы, так и для по$ следующей (противоположной), что является конвейеризацией запросов. PHY бета$узла посылает «боссу» изохронные и асинхронные запросы с наивысшим при$ оритетом, полученные от своего LINK$уровня или от других бета$портов. Прио$ ритетность зависит от текущего интервала шины и фазы.
Вслед за передачей последнего пакета субакции текущий «босс» передает право на передачу для запроса, наиболее приоритетного для данного интервала и фазы. Если к этому времени «босс» не принял запросов, относящихся к данной фазе, он пере$ дачей одного или более маркеров меняет интервал (с изохронного на асинхрон$ ный) и/или фазу асинхронного интервала:
если шина находится в изохронном интервале и нет изохронного запроса к те$ кущей фазе, то «босс» завершает изохронный интервал маркером ASYNC_EVEN/ ODD, не меняя текущей асинхронной фазы;
если шина находится в асинхронном интервале и нет запроса к текущей фазе, то «босс» маркером ASYNC_EVEN/ODD меняет текущую асинхронную фазу (начинается новый интервал справедливости);
если и для новой асинхронной фазы нет запросов, то «босс» передает управле$ ние шиной узлу, стоящему выше него по иерархии. В конце концов, управление (роль «босса») получит корневой узел. Асинхронная фаза не будет сменяться другой до тех пор, пока в текущей фазе не будет передан хотя бы один пакет.
В асинхронном интервале узел может послать запрос для текущей фазы, только если он имеет бюджет приоритета для текущего интервала справедливости. Если бюджет исчерпан, то узел может послать запрос для следующей фазы, на который право передачи будет дано в следующем интервале справедливости. Таким обра$ зом, сменой фаз осуществляется справедливый арбитраж без потерь времени на зазоры. Асинхронные фазы меняются только тогда, когда все узлы, имеющие па$ кеты для передачи в данной фазе, выполнят эти передачи.
Арбитраж в гибридной шине
В гибридной шине, состоящей из бета$узлов и традиционных узлов с DS$сигнали$ зацией, новый механизм арбитража обеспечивает совместимость устройств, прав$ да, с применением зазоров. Гибридная шина состоит из B$облаков (одного или не$ скольких), между которыми находятся фрагменты с DS$сигнализацией. При этом корневой узел может оказаться как в B$облаке, так и в DS$фрагменте.
В каждом B$облаке имеется один старший пограничный узел (senior border PHY): это последний узел, передающий в облако пакет самоидентификации без кода ско$ рости. Старший пограничный узел облака, содержащего корневой узел, называет$ ся прокси корнем. Этот узел будет работать дежурным арбитром, пока другие узлы не играют роль «босса». Если корнем является традиционный узел, то прокси$кор$ ня нет. P$порт старшего пограничного узла (если он не является прокси$корнем) всегда является DS$портом.
Старший пограничный узел в каждом B$облаке наблюдает за традиционными за$ зорами арбитража, и только он имеет право посылать асинхронные маркеры. Об$ наружив зазор асинхронных транзакций, он посылает асинхронные маркеры без смены фазы. Маркер со сменой фазы он посылает, обнаружив зазор сброса арбит$ ража. В состоянии покоя шины он посылает маркеры текущей фазы.
Вответ на запрос от B$порта старший пограничный узел начинает процедуру ар$ битража, используя традиционный механизм зазоров. Если старший пограничный узел является прокси$корнем, то он предоставляет право передачи B$узлу. Если старший пограничный узел не является прокси$корнем, то он посылает запрос арбитража через свой p$порт. Выиграв традиционный арбитраж, он выполняет B$арбитраж, и начинается передача бета$трафика. Как только в B$облаке начина$ ется бета$передача, в нем включается механизм BOSS$арбитража, и этот механизм будет работать до тех пор, пока не завершится субакция и в облаке не закончатся запросы для текущей фазы.
Впериод передачи трафика B$облака старший пограничный узел должен обеспе$ чить видимость занятости шины для всех узлов остальной части шины. Пакеты, передаваемые в традиционном формате, пограничный узел транслирует нормаль$ ным образом (заменяя пакет префиксом данных, если пакет передается на недопу$ стимо высокой скорости). Пакеты бета$формата пограничный узел транслировать из облака не может, вместо них он передает префикс данных до тех пор, пока к не$ му не придет пакет традиционного формата. Чтобы эта передача префикса закон$ чилась, «босс» по окончании субакции и при отсутствии запросов текущей фазы должен послать пакет традиционного формата с нулевой длиной данных.
Вконце передачи бета$трафика текущий «босс» не посылает никаких маркеров, а передает право управления вышестоящему узлу. Таким образом это право дос$ тигнет старшего пограничника, который начнет формирование интервала покоя шины.
Вгибридной шине маркер CYCLE_START может быть только в облаке, в котором находится мастер цикла. Это облако называется старшим B$облаком (senior B cloud). Такового может и не быть, поскольку мастер циклов может оказаться и в традиционном фрагменте шины. Остальные B$облака называются младшими (junior B cloud). Поскольку маркеры по традиционному фрагменту распростра$ няться не могут, воспроизведение маркеров начала цикла в младших облаках про$ блематично. PHY узлов младшего облака узнают о начале изохронного периода от своего LINK$уровня. Поскольку информации о номере фазы у узлов младшего
облака нет, изохронная транзакция запрашивается сигналом (символом) ISOCH_ CURRENT. Этот запрос достигает старшего пограничного узла, который выполняет немедленный арбитраж в традиционном фрагменте шины. Запросы ISOCH_EVEN/ ODD в младшем облаке не фигурируют.
Пограничный узел принимает традиционные запросы арбитража (сигналом TX_ REQUEST) и преобразует их в символ запроса LEGACY_REQUEST, посылаемый в свой p$порт. Остальные свои порты он блокирует посылкой в них символа DATA_ NULL. Если арбитраж выигран, то узел получит символ GRANT или GRANT_ISOCH; если проигран — DATA_PREFIX или DATA_NULL.
Конфигурирование шины и узлов IEEE 1394
Конфигурирование шины IEEE 1394 выполняется в различных ситуациях:
автоматически при изменении конфигурации — при подсоединении и отсоеди$ нении устройств, а также включении/выключении их PHY$уровня;
при обнаружении каким$либо узлом фатальной ошибки — «зависания» шины;
по инициативе какого$либо узла, желающего, например, изменить топологию (сменить корневой узел).
Конфигурирование состоит из трех последовательных этапов.
1.Сброс (Bus Reset), с момента которого прекращается передача полезного тра$ фика.
2.Идентификация дерева (Tree Identification), во время которой узлы выстраи$ ваются в иерархическую структуру.
3.Самоидентификация узлов (Self Identification), во время которой узлы присва$ ивают себе уникальные физические идентификаторы.
Конфигурирование шины приводит ее в состояние, пригодное для передачи по$ лезного трафика. Конфигурирование шины осуществляется исключительно аппа$ ратными средствами PHY$уровня каждого узла (LINK$уровень конфигурируемых узлов может быть и отключен). Программные средства в этом процессе не уча$ ствуют. Благодаря чисто аппаратной реализации автоконфигурирование произ$ водится настолько быстро, что возможно сохранение непрерывности изохронных потоков.
В первоначальной версии шины самое большое время во всей процедуре конфигу$ рирования занимал сброс. В физический уровень 1394 вносились усовершенство$ вания, направленные на минимизацию потерь времени при сбросе. Остальные эта$ пы конфигурирования происходят быстрее, но в случае образования петлевого соединения идентификация дерева никогда не закончится. Эта ситуация обнару$ живается любым узлом, и сообщение о ней доводится до пользователя. В 1394b приняты меры по автоматическому исключению петлевых соединений.
Свойства любого узла сконфигурированной шины наблюдаемы и управляемы че$ рез его архитектурные регистры и память конфигурации. Они доступны со стороны шины через асинхронные транзакции к определенным адресам. Архитектурные регистры определяют поведение узла на шине. Память конфигурации раскрывает «прикладную ценность» узла и обеспечивает его уникальную идентификацию, не зависящую от непостоянного физического идентификатора.
Сброс шины (Bus Reset)
Сброс шины приводит к ряду эффектов:
все узлы переводятся в исходное состояние;
передача трафика прерывается, незавершенные транзакции отбрасываются;
вся информация о топологии разрушается;
все узлы переходят в состояние инициализации.
Сброс шины может быть вызван любым устройством. Сброс распространяется все$ ми узлами беспрепятственно, поскольку его сигнал по праву доминирования еди$ ниц (см. главу 22) превалирует над всеми другими сигналами. После сигнала сброса, длительность которого Treset = 167 мкс (или 1,4 мкс — короткий сброс, см. ниже), узлы выдерживают паузу Twait = 0,16 мкс, после чего начинается процесс иденти$ фикации дерева.
Сигнал сброса вырабатывается по ряду причин:
сброс при включении питания PHY (состояние питания LINK не важно);
сброс при подключении узла к порту и его отключении (обнаруживается узлом по изменению напряжения смещения);
сброс по тайм$ауту арбитража, предотвращающий «зависание» шины. Он вы$ рабатывается узлом при длительном нахождении шины в одном состоянии по истечении MAX_ARB_STATE_TIME = 200–400 мкс. Контроль длительности не рас$ пространяется на состояния покоя (bus idle), старта идентификации дерева и со$ стояния, контролируемые своими счетчиками тайм$аутов;
программно$инициируемый сброс, выполняемый по запросу приложения на каком$либо узле.
В случае изменения топологии сброс вырабатывается по крайней мере два раза подряд. Первый раз его сигнализирует узел$новичок, подключаемый к шине. Вто$ рой раз сброс подаст узел, к которому он подключился, поскольку он обнаружит изменение состояния порта. Два сброса подряд — это сигнал к установке стандарт$ ного зазора арбитража (gap_cnt=63); новое оптимальное значение зазора должно определяться по новой топологии.
При подключении/отключении устройств в разъемах возникает дребезг контак$ тов — серия замыканий и размыканий, которая может длиться десятки и сотни миллисекунд. В 1394 это порождает так называемый шторм сбросов, что парализу$ ет работу шины на длительное время (сотни миллисекунд). В 1394a эту проблему
