RapidIO (Rapid Input/Output) – это стандарт высокоскоростной коммуникации между компонентами системы, который широко используется во встраиваемых и высокопроизводительных вычислительных системах. RapidIO обеспечивает низкую задержку передачи данных и высокую пропускную способность, что делает его идеальным для систем, где требуется быстрая передача данных между различными устройствами. RapidIO может использоваться для соединения процессоров, памяти, периферийных устройств и других компонентов системы.
Основными конкурентами RapidIO являются HyperTransport, Infiniband и PCI Express, которые, однако, предназначены для решения других задач.
Интерфейс RapidIO разработан компаниями Mercury Computer Systems и Motorola (ныне Freescale Semiconductor) в начале 2000-х годов, как развитие шины, применявшейся в многопроцессорных системах цифровой обработки сигналов компании Mercury.
Спецификации интерфейса RapidIO разработаны организацией «RapidIO Trade Association». На настоящий момент последней версией спецификации является 4.
Спецификации RapidIO определяют физический (соответствует физическому и канальному уровню модели OSI), транспортный ( сетевой уровень – сетевая модель OSI) и логический (соответствует транспортному уровню модели OSI) уровни.
Имеется две спецификации физического уровня:
- LP-LVDS — канал точка-точка представляет собой параллельный 8- или 16-разрядный дуплексный интерфейс, частота тактового сигнала — 250, 375, 500, 750 или 1000 МГц;
- LP-Serial — канал точка-точка представляет собой последовательный дуплексный интерфейс, состоящий из 1, 2, 4, 8 или 16 подканалов (англ. lane), скорость передачи битового потока: 1,25, 2,5, 3,125, 5 или 6,25 Гбод.
Протокол RapidIO определён трёхуровневой спецификацией:
- Физический уровень: электрическая спецификация, PCS/PMA, протокол канального уровня для надёжного обмена пакетами
- Транспортный уровень: маршрутизация, многоадресная рассылка, и программная модель
- Логический уровень: логический ввод/вывод, система обмена сообщениями, глобальная разделяемая память (CC-NUMA), управление потоком, потоковая передача данных.
Системные спецификации включают:
- Инициализацию системы
- Работу с ошибками / Горячую замену
Электрическая спецификация RapidIO основана на промышленном стандарте Ethernet и стандартах Optical Interconnect Forum:
- XAUI для шин со скоростью 1,25, 2,5 и 3,125 ГБд (1, 2 и 2,5 Гбит/с)
- OIF CEI 6+ Гбит/c для шин со скоростью 5,0 и 6,25 ГБд (4 и 5 Гбит/c)
- 10GBASE-KR 802.3-ap (“длинный”) и 802.3-ba (“короткий”) для шин со скоростью 10,3125 ГБд (9,85 Гбит/с)
Уровень PCS/PMA RapidIO поддерживает две формы кодирования/разбивания по кадрам:
- 8b/10b для шин со скоростью до 6,25 ГБд
- 64b/67b, сродни тому, что используется в Interlaken, для шин со скоростью свыше 6,25 ГБд
Каждый элемент RapidIO, участвующий в работе, отправляет и получает три вида данных: пакеты, управляющие символы и последовательность простоя.
Каждый пакет содержит в себе два значения, которые управляют обменом этим пакетом на физическом уровне. Первый из них — это acknowledge ID (ackID), уникальное в пределах канала 5-, 6- или 12-битное число, которое используется для отслеживания пакетов, передающихся в канале. Пакеты передаются с последовательно возрастающими значениями ackID. Из-за того, что ackID зависит от канала, он хранится не в контрольной сумме, а на уровне протокола. Это позволяет менять ackID с каждым каналом, через который проходит пакет, в то время как контрольная сумма пакета остаётся постоянной от конца до конца и служит для проверки целостности пакета. Когда пакет успешно получен, его получение подтверждается согласно ackID. Передатчик обязан сохранять пакет до тех пор, пока его успешное получение не было подтверждено на другом конце.
Вторым значением является физический приоритет пакета. Физический приоритет состоит из бита-идентификатора Виртуального Канала (VC), битов приоритета и бита, означающего что пакет критически важен для потока запросов (CRF). Бит VC определяет, используются ли остальные биты для нумерации виртуального канала от 1 до 8, или же для определения приоритета внутри нулевого виртуального канала. Виртуальным каналам назначаются соответствующие минимальные гарантированные пропускные способности. Внутри виртуального канала 0, пакеты с высоким приоритетом, могут отправляться раньше пакетов с низким. Пакеты ответов должны обладать большим физическим приоритетом, чем пакеты запросов, во избежание взаимоблокировки.
Физический уровень RapidIO добавляет к пакетам двухбайтовый заголовок в начале каждого пакета, включающий в себя ackID и физический приоритет, а также двухбайтовую контрольную сумму в конец, для проверки целостности пакета. Пакеты, большие 80 байт так же имеют промежуточную контрольную сумму после первых 80 байт. За одним исключением, контрольная сумма пакета служит для проверки целостности пакета на концах соединения.
Управляющие символы RapidIO могут отправляться в любой момент, даже внутри пакета. Это позволяет RapidIO иметь наименьшую возможную задержку управления, и достигать высокой пропускной способности с меньшими буферами, нежели у других протоколов.
Управляющие символы используются для отделения пакетов друг от друга (Start of Packet, End of Packet, Stomp), подтверждения получения пакетов (Packet Acknowledge, Packet Not Acknowledged), сброса (Reset Device, Reset Port) и для распространения событий внутри системы RapidIO (Multicast Event Control Symbol). Управляющие символы так же используются для управления потоком (Retry, Buffer Status, Virtual Output Queue Backpressure) и восстановления ошибок.
Процедура восстановления ошибок очень быстра. Как только получатель замечает ошибку передачи в полученном потоке данных, он заставляет связанный с ним передатчик отправить управляющий символ Packet Not Accepted. Как только на другом конце получают управляющий символ Packet Not Accepted, передача новых пакетов останавливается и отправляется управляющий символ Link Request/Port Status. ackID, который надо использовать при следующей передаче указывается управляющим символом Link Response. Затем передача возобновляется.
Последовательность простоя используется во время инициализации канала для оптимизации качества сигнала. Она так же передаётся, когда нет никаких других отправляемых пакетов или управляющих символов.