Bluetooth 5: как добиться максимума пропускной способности BLE |
![]() |
Добавил(а) microsin | |||||||||||||||||||||||||||||||||
В этой статье (перевод [1]) будут рассмотрены новые возможности Bluetooth 5 для двукратного повышения скорости, а также общий обзор на пропускную способность приложения BLE. Предыдущая статья [2] рассматривала новые функции Bluetooth 5 и более конкретно увеличенную емкость оповещения (advertisement capacity). Сначала надо уяснить для себя, что представленные скорости (1 Mbps и новая скорость 2 Mbps) это только теоретические значения, которые будут в реальном приложении значительно урезаны. Это происходит по многим причинам, которые мы рассмотрим в следующей секции. "Двукратное" повышение скорости Bluetooth 5 требует новой аппаратуры, так что старые устройства/чипы/модули не будут это поддерживать. Также важно отметить, что для достижения более высокой пропускной способности необходимо, чтобы оба устройства BLE обменивались друг с другом данными с поддержкой на обоих сторонах нового LE 2M PHY (что делает возможным передавать данные с этой высокой скоростью). Примечание: расшифровку незнакомых терминов и сокращений см. в Словарике [13]. И новый LE 2M PHY, и оригинальный LE 1M PHY, оба называются не кодированными PHY (LE Uncoded PHY), поскольку они используют представление 1 символ на бит данных (в сравнении с новым LE Coded PHY, который использует 2-символьное или 8-символьное представление на бит данных). Другая важная вещь, которую стоит отметить - когда используется PHY повышенной скорости, реально достижимо пониженное потребление мощности источника питания (в пересчете на передачу того же самого объема данных). Причина в том, что время включения радиотракта уменьшается без повышения передаваемой мощности. Это в свою очередь также улучшает совместную работу в эфире с другими беспроводными технологиями, которые делят друг с другом общий спектр диапазона 2.4 ГГц (также по причине уменьшения времени радиоактивности). В этой статье будет рассмотрено следующее: • Какова ожидаемая практическая пропускная способность BLE? [Почему нельзя достичь теоретических скоростей BLE?] Скорости передачи данных 1 Mbps (LE 1M PHY), 2 Mbps (LE 2M PHY), 125 kbps и 500 kbps (обе используют LE Coded PHY с S=8 и S=2 соответственно) это скорости, на которых радиотракт передает данные, но они недостижимы для реального приложения по следующим причинам: • Ограниченное количество пакетов на интервал соединения. Чтобы лучше понять эти факторы и разобраться, что влияет на пропускную способность приложения, нужно рассмотреть формат пакета. На следующей картинке показана структура LE-пакетов данных 1M PHY и 2M PHY:
Рис. 1. Формат пакета BLE. В этом пакете нас интересует полезная нагрузка, ATT Payload (именно она определяет передаваемые данные приложения). Как можно видеть, каждый уровень BLE использует некоторое количество байт заголовка. • Для Bluetooth 4.0 и Bluetooth 4.1 максимальная ATT Payload составляет 20 байт. 2x скорость Bluetooth 5 при использовании нового 2M PHY. Полезно понимать ограничения в использовании LE 2M PHY в Bluetooth 5: • Нельзя использовать для передачи primary advertisements (на primary-каналах). Передача данных приложения от одного устройства к другому обычно происходит во время соединения между ними. Соединившиеся устройства могут договориться использовать разные PHY через процедуру обновления PHY (PHY Update Procedure). Эта процедура может быть инициирована либо подчиненным slave-устройством (Peripheral, сервер), либо главным master-устройством (Central, клиент) после установки соединения, однако master будет ультимативно принимать конечное решение о том, какой PHY использовать для каждого направления (основываясь на запросе slave и возможностей по поддержке PHY со стороны master). Рис. 2. PHY Update Procedure - устройство master запрашивает поменять PHY, и PHY меняется как минимум для одного направления. [Факторы, определяющие пропускную способность] Есть несколько факторов, влияющих на пропускную способность BLE. В основном это: • Какой PHY используется - LE 1M, или LE 2M, или LE Coded (S=2 или S=8). Давайте рассмотрим каждый фактор более подробно. PHY. В стандарте Bluetooth 5 существуют в основном 3 варианта PHY: original 1 Mbps PHY, новый 2 Mbps, и Coded PHY (S=2 или S=8). Какой PHY используется будет напрямую влиять на максимальную пропускную способность данных, так как это определяет фактическую скорость передачи сырых данных (raw data rate), при которых пакеты передаются по радио. Интервал соединения и максимальное количество пакетов на событие соединения. Интервал соединения (connection interval) эффективно определяет, сколько пакетов можно передать за время одного события соединения (connection event). Чем больше интервал соединения, тем больше пакетов можно отправить в одном событии соединения (до определенного предела для некоторых устройств). Подробнее про интервалы соединения и события BLE см. [6]. Однако количество пакетов на соединения зависит от используемого устройства и программного стека BLE, так что это ограничение отличается для разных устройств и версий стека на определенном устройстве. Также количество пакетов зависит от выполняемых операций устройства, так что радиотракт может быть вынужден следить за другими событиями, и количество пакетов, отправляемых на одном соединении, может не достичь максимума, который допускает стек. Например, это количество различается между iOS и Android, и также меняется в зависимости от версии OS, работающей на устройстве. Иногда полезно динамически обновлять параметры соединения, основываясь на специфике использования в каждом случае. Однако имейте в виду, что именно master (устройство Central, клиент GATT) отвечает за принятие решения по обновлению параметров. Data Length Extensions (DLE). Эта функция позволяет пакету переносить увеличенный объем полезной нагрузки (до 251 байт против 27, когда DLE запрещена). DLE была представлена в спецификации версии Bluetooth 4.2. ATT Maximum Transmission Unit (ATT MTU). ATT MTU определяет максимальное количество данных, которое может быть обработано передатчиком и приемником, и которое может хранить их буфер. Значение MTU влияет на объем служебных данных (в частности, к служебным дополнительным данным относится заголовок ATT, который равен 3 байтам). Минимальный допустимый MTU ATT составляет 27 байт. Это позволяет получить максимум 20 байт полезной нагрузки ATT (3 байта используются для заголовка ATT, а 4 байта - для заголовка L2CAP). Со стороны спецификации нет ограничения, насколько большим может быть MTU, однако каждый стек может накладывать на MTU свои ограничения. Например, если разрешить DLE, то можно передать до 251 – 4 = 247 байт (после вычитания размера заголовка L2CAP). После учета заголовка ATT (3 байта) у нас останется 244 байта реальной полезной нагрузки (ATT payload data). Если MTU составляет по меньшей мере 247 байт, то MTU будет помещаться в 1 пакет. Если MTU больше 247 байт, то MTU будет охватывать несколько пакетов, что снизит пропускную способность (из-за наличия служебных данных пакета и интервалов между пакетами). Эффективное значение MTU определяется минимальным значением ATT MTU, которое поддерживает и клиент, и сервер. Например, если клиент поддерживает ATT MTU 100 байт, и сервер отвечает, что он поддерживает ATT MTU 150 байт, то клиент примет решение, что будет использоваться MTU 100 байт. Тип операции. Обмен данными между клиентом и сервером может осуществляться разными способами: запись с ответом (Write with Response) против записи без ответа (write without Response), индикации (Indications) против оповещений (Notifications). Если нужна высокая пропускная способность, то мы можем использовать запись без ответа (Write without Response) или оповещения (Notifications) для передачи данных от клиента к серверу и от сервера к клиенту. Эти операции устраняют необходимость для противоположного устройства подтверждать прием данных и отвечать до того, как может быть отправлен следующий блок данных. Inter Frame Space (IFS). IFS определяет интервал времени между следующими друг за другом пакетами (150 мкс). Цитата из спецификации Bluetooth: 4.1.1 Inter Frame Space Временной интервал между двумя соседними пакетами на одном и том же индексе канала называется Inter Frame Space. Он определяет время от конца последнего бита предыдущего пакета до начала первого бита следующего пакета. Inter Frame Space обозначается как T_IFS, и должно быть 150 мкс. Передача пустых пакетов. Если устройство, принимающее данные, не имеет данных для обратной передачи, то согласно спецификации Bluetooth оно все еще должно передать пустой пакет. Packet overhead (служебные данные). Как мы видели из рисунка 1, пакет переносит дополнительные (служебные) данные, которые не могут переносить полезную нагрузку приложения (ATT data). За счет этих байт теряется часть пропускной способности BLE. [Вычисление пропускной способности приложения] Как уже упоминалось выше, существует несколько переменных, влияющих на пропускную способность по данным: • Используемая версия Bluetooth и используемый PHY. Версия Bluetooth и PHY определяют скорость передачи сирых данных (raw data transfer rate). Например, если мы используем Bluetooth версии 4.2, и LE 1M PHY, то физическая скорость передачи составит 1 Mbps. С другой стороны, если мы используем Bluetooth 5 LE Coded PHY с S=8, то скорость снизится до 125 kbps. DLE, ATT MTU, интервал соединения, максимальное количество пакетов на интервал соединения, тип операции и IFS - все это определяет времени радиоэфира, которая задействована для реальной передачи данных. Формат пакета играет большую роль в том, какую часть из передаваемых данных занимают полезные данные приложения. LE 1M PHY и LE 2M PHY имеют одинаковый формат пакета. LE Coded PHY имеет сильно отличающийся формат пакета, так что мы рассмотрим его случай отдельно. LE 1M PHY и LE 2M PHY. Рассмотрим снова формат пакета на рис. 1 в контексте используемого PHY. Объем служебных данных для каждого PHY немного отличается. Преамбула составляет 1 байт для 1M PHY и 2 байта для 2M PHY. Поле MIC опциональное, которое используется только для шифрованных соединений. Для упрощения рассмотрим только нешифрованные соединения - для случая использования шифрования добавится 4 байта служебных данных. Для LE Coded PHY формат пакета выглядит следующим образом (информация взята из Bluetooth 5.0 spec Vol 6, Part B, Section 2.2): Рис. 3. Формат пакета слоя соединения (Link Layer, LL) для LE Coded PHY. Для простоты предположим следующее: • Шифрование не разрешено (поле MIC не включено в пакет). Вычисление пропускной способности, по шагам: Шаг 1. Определение используемого PHY и физической скорости передачи сырых данных (raw data transfer rate). Например, для 1M PHY это 1 Mbps, для Coded PHY и S=8 это 125 kbps. Шаг 2. Определим время, которое займет отправка одного пакета данных и пустого пакета от получателя. Рис. 4. Интервалы времени, затрачиваемые на передачу пакета. Время Data_Packet_Time, за которое может быть отправлен 1 пакет, будет включать следующие интервалы: Data_Packet_Time = время передачи пустого пакета + IFS + время передачи пакета актуальных данных + IFS. Время на передачу пустого пакета Time_empty_packet: Time_empty_packet = размер пустого пакета / raw data rate Пустой пакет содержит следующие поля: Preamble + Access Address + LL Header + CRC Для 1M PHY размер Preamble будет 1 байт, итого размер пустого пакета составит 1 + 4 + 2 + 3 = 10 байт, или 80 бит. Для 2M PHY размер пустого пакета будет 88 бит, потому что Preamble состоит из 2 байт. Из всего этого получается, что время передачи пустого пакета для 1M PHY будет: Time_transmit_empty_packet = размер пустого пакета / raw data rate = 80 бит / 1 мегабит в секунду = 80 мкс. Пакет данных будет содержать все поля, перечисленные на диаграмме формата пакета (рис. 1), за исключением поля MIC (шифрование запрещено). Время передачи пакета данных Time_transmit_data_packet: Time_transmit_data_packet = размер пакета данных / raw data rate Если DLE разрешено, и ATT MTU равно максимальному количеству байт в одном пакете: 247, то мы рассчитать размер пакета данных следующим образом: 1 + 4 + 2 + 4 + 247 + 3 = 265 байт, или 265*8 = 2088 бит. Time_transmit_data_packet = 2088 бит / 1 Mbps = 2.088 мкс Теперь учтем интервалы IPS и рассчитаем полное время для передачи пакета Data_Packet_Time: Data_Packet_Time = Time_transmit_empty_packet + IPS + Time_transmit_data_packet + IPS = 80 + 2*150 + 2088 = 2.468 мкс Для сравнения рассчитаем это время для 2M PHY: Data_Packet_Time = 88/2 + 2*150 + (2 + 4 + 2 + 4 + 247 + 3)*8/2 = 1392 мкс Когда DLE разрешено, и ATT MTU установлено меньше 247, мы получим больше накладных расходов, и общая пропускная способность уменьшится (потому что данные, которые по размеру больше чем ATT MTU, будут для передачи делиться на большее количество пакетов). Например, если ATT MTU установлено на 158, то чтобы передать 244 байта данных приложения, нам понадобится передать два пакета вместо одного, в результате чего пропускная способность снизится, потому что на тот же объем полезных данных будет приходиться большее количество служебных данных, и увеличится время, затрачиваемое на IFS. В другом сценарии функция DLE может быть отключена (размер полезной нагрузки до 27 байт), и ATT MTU больше 27 байт. Здесь также понадобится передавать большее количество пакетов для того же самого объема данных, что снизит общую пропускную способность. Примечание: для вычисления времени передачи пакета данных LE Coded PHY можно использовать тот же метод. Шаг 3. Определение, сколько пакетов может быть передано во время одного интервала соединения. Этот расчет не всегда чисто математический - нужно будет учитывать ограничения используемого стека и устройства. Максимум передаваемых пакетов в одном интервале соединения для iOS и Android может меняться в зависимости от версии OS, так что это не всегда просто определить. При этом в MCU SDK поставщика обычно в документации указывает максимум. Также полезно сделать тестовую передачу, и методом проб и ошибок и выяснить, что поддерживает ваше устройство. После того, как был определен поддерживаемый максимум, можно вычислить, сколько теоретически поместится пакетов на выбранном интервале соединения. Например, если выбран интервал соединения 7.5 мс (самый маленький интервал, разрешенный спецификацией), то для примера расчетов, приведенных выше (1M PHY, функция DLE разрешена): MAX количество пакетов данных на интервал соединения = [connection interval / Data_Packet_Time] Здесь значение в квадратных скобках [ ] округляется до целого числа. Получается: [7.5*1000 мкс / 2468 мкс] = 3 пакета Обычно это число не реалистичное, поскольку существуют задержки между пакетами, посылаемых в соседних событиях соединения. Так что для нашего примера мы возьмем 2 пакета вместо 3. Шаг 4. Теперь, когда мы определили максимальное количество пакетов, которое может быть передано на одном интервале соединения, мы можем вычислить пропускную способность по передаче данных: Количество данных на интервал соединения / интервал соединения = Количество пакетов на интервал соединения * размер данных на пакет / интервал соединения. Пропускная способность: 2 * 244 * 8 бит / 7.5 мс = 520533 бит/сек ~= 508 kbps. [Тестирование и вычисление пропускной способности между двумя nRF52 DK] В этой секции мы запустим несколько тестов по передаче данных, вычислим пропускную способность по описанной выше процедуре, и затем сравним с измеренной пропускной способностью, которую показывает приложение, запущенное на плате разработчика nRF52 DK [3]. Тесты выполняются на основе демонстрационного приложения, предоставленного Nordic Semiconductor [7]. Исходный код этого приложения выложен на GitHub [8]. Обратите внимание, что в тестах 3 и 4 количество пакетов на интервал соединения невелико, и любая разница между тем, что мы рассчитываем и что измерили, окажет значительное влияние на фактическую пропускную способность. Например, если количество пакетов на интервал соединения оказывается 4 вместо 5 (как в последнем тесте), то вычисленная пропускная способность станет 1041.1 Kbps вместо 1301.33 Kbps (что показывает большое различие, и может объяснить разницу между экспериментальными и вычисленными данными). [Оптимизация для максимальной пропускной способности] Исходя из факторов, которые мы рассмотрели, можно отметить следующие моменты для реализации высокой пропускной способности для передачи данных: • Всегда разрешайте DLE. Очевидно, что если использовать Bluetooth v4.1 или более старую версию Bluetooth, то эта опция неприменима. Однако следует убедиться в возможности использования DLE, потому что она позволяет максимально повысить эффективность передачи данных пакетами. • Используйте LE 2M PHY. Если Вы знаете, что устройства на обоих сторонах обмена поддерживают Bluetooth 5, то использование LE 2M PHY самый лучший способ максимально увеличить пропускную способность. Использование LE 2M PHY будет также снижать энергопотребление, и тем самым Вы убьете сразу двух зайцев! • Используйте Notifications и Writes without Responses. Использование этих операций поможет устранить передачу нежелательных пакетов (если сравнивать с Indications и обычными операциями записи, которые требуют от стороны приема передачи подтверждения для каждого принятого пакета). • Выберите значение ATT MTU не менее 247 байт. Это позволит уменьшить долю накладных расходов в байтах пакетов. • Выберите интервал соединения так, чтобы добиться максимального количества пакетов, которое помещается в интервал соединения. Однако имейте при этом в виду, что интервал соединения влияет на энергопотребление. Чем меньше этот интервал, тем устройство будет больше потреблять энергии, потому что увеличивается время активного состояния радиотракта по сравнению с неактивным состоянием. Также Вы можете захотеть выбрать этот интервал не слишком большим, потому что слишком большой интервал нарушит взаимодействие с пользователем в реальном времени (более длинный интервал соединения приводит к повышенной задержке). Последнее, что необходимо сделать - определить ограничения Ваших устройств в системе в касательно максимального поддерживаемого количества пакетов на интервал соединения. [Вместо заключения] Значения пропускной способности, вычисленные выше, все еще остаются теоретическими, и могут не соответствовать измеренной пропускной способности данных на практике и в реальных условиях. Однако они все равно дают хорошую отправную точку оценки того, что стоит ожидать (по крайней мере для максимума). Радиопомехи и ошибки приема также влияют на пропускную способность (повторные передачи, потеря данных и закрытие соединения в результате снизят пропускную способность). Это может быть вызвано наличием других устройств, использующих тот же самый диапазон 2.4 ГГц, большим расстоянием между устройствами, наличием между ними препятствий, микроволновок и т. п. [Ссылки] 1. Bluetooth 5 speed: How to achieve maximum throughput for your BLE application site:novelbits.io. |