logo
Материалы по интерфейсам периферий / Для Скрипко / Для пособия ПУ (Восстановлен) (2)

Повышение эффективности

Главным инструментом в контроле над шиной и передачей в IEEE 1394 является промежуток в передаче (gap), отделяющий друг от друга каждый пакет. Gap сбрасывает шину, позволяет определить тип передаваемых данных (асинхронные, синхронные), но он же является и источником проблем с эффективностью. Первая версия спецификации обеспечивала великолепную эффективность с пакетами большого размера. Но стоило уменьшать размер пакета или увеличь скорость шины, как количество пакетов на один и тот же объём данных (или на один и тот же промежуток времени) возрастало, а длина gap оставалась прежней. Таким образом, чем больше количество передаваемых пакетов, тем больше времени шина просто простаивает в молчании, и тем меньше времени остаётся на передачу непосредственно данных. С этим надо было что то делать, что и потребовало изменений в протоколе на логическом уровне.

Ack acceleration. Как известно, любой пакет в IEEE 1394 должен отделяться от другого промежутком называемым subaction gap. Одна из причин, почему нужен этот промежуток - это убедиться, что пакет, подтверждающий получение данных не затеряется. Однако, если пакет, подтверждающий получение имеется, то следующий пакет таким же (ack packet) быть не может (подтверждение уже получено, второй раз подтверждать не надо), и надобности в subaction gap нет. В 1394а предусмотрено обнаружение ack packet, и как только такой пакет обнаружен, после него передача не останавливается на subaction gap, а продолжается дальше.

Flt-by arbitration. Так называется возможность "прицепить" на лету какой-либо пакет к уже передающемуся. Это позволяет сэкономить время и канал, ведь для прикреплённого пакета не требуется дополнительный арбитраж. Но, нам же надо не просто прицепить пакет, надо, чтобы он обязательно дошёл до адресата. Для этой цели подходят пакеты, полученные через дочерний порт, которые должны "размножиться" по пути к корневому устройству. Это ограничивает применение fly-by arbitration всего двумя случаями. Во первых, если пакет полученный на дочерний слот - это acknowledge packet, то к нему на лету может быть прикреплён любой асинхронный пакет. Либо, если на дочерний порт получен синхронный пакет, то к нему может быть прикреплён любой другой синхронный пакет.

Arbitration Improvements (Fairness Optimization). Как уже говорилось, fairness interval это отрезок, во время которого одно устройство может выиграть шину только один раз. Даже если всё остальное время шина никому не нужна, оно вынуждено ждать начала следующего цикла, чтобы продолжить передачу. А потом ещё выжидать reset gap, самые длинные промежутки, предусмотренные стандартом. Поэтому, в версии 1394а протокола появилась возможность одному устройству запрашивать (и получать) право на передачу несколько раз (до 63) в течении одного fairness interval.