roboforum.ru

Технический форум по робототехнике.

latency/speed test проверка скорости

latency/speed test проверка скорости

linvinus » 27 май 2011, 14:12

Предлагаю собрать в одном месте информацию по скоростям на разных шинах.
Но не теоретические данные, т.к. скорость шины известна, а то что реально удалось получить на практике.
Т.к. по шине помимо полезных данных передаются управляющие сигналы, и реальная скорость ниже (зависит от условий).
Данный материал будет полезен новичкам при выборе способа связи между контроллерами.
За основу я взял тестовые программы с сайта http://neophob.com/2011/04/serial-laten ... s-arduino/
Протестировал rs-232 (1 000 000 бод) и i2c.
Вечером выложу результаты.
Если кто знает ссылку на подобные тесты прошу поделиться.
Интересует задержка между пакетами, и скорость передачи - количество байт в секунду.
Отдельно стоит рассмотреть производительность контроллера по сравнению со скоростью передачи.
Т.е. сколько ресурсов останется на исполнение полезной работы, но пока я не знаю как это посчитать.
Видимо нужен какой то тест типа расчёта числа pi,но достаточно лёгкий для 8ми разрядного контроллера.

алгоритм:
читаем пакеты определенного размера, замеряя время между пакетами, процедура повторяется 100 раз,
скорость = (размер пакета * 100/затраченное время)

I2C чтение данных с контроллера atmega168 16MHz = i2c 400kHz => OSIF = USB => ubuntu x86_64, через переходник OSIF http://www.robotfuzz.com/OSIF
Код: Выделить всёРазвернуть
package size @ 1 bytes, latency: 9.99 ms average, 10.15 ms maximum, repeated 100 times speed=100 bytes/sec  elased: 999.69 ms
package size @ 2 bytes, latency: 9.99 ms average, 11.04 ms maximum, repeated 100 times speed=200 bytes/sec  elased: 999.75 ms
package size @ 12 bytes, latency: 10.99 ms average, 11.12 ms maximum, repeated 100 times speed=1091 bytes/sec  elased: 1099.89 ms
package size @ 30 bytes, latency: 11.99 ms average, 12.05 ms maximum, repeated 100 times speed=2500 bytes/sec  elased: 1199.82 ms
package size @ 62 bytes, latency: 14.99 ms average, 15.05 ms maximum, repeated 100 times speed=4133 bytes/sec  elased: 1499.88 ms
package size @ 71 bytes, latency: 15.67 ms average, 16.16 ms maximum, repeated 100 times speed=4528 bytes/sec  elased: 1567.81 ms
package size @ 128 bytes, latency: 19.99 ms average, 20.22 ms maximum, repeated 100 times speed=6400 bytes/sec  elased: 1999.83 ms
package size @ 255 bytes, latency: 30.07 ms average, 31.02 ms maximum, repeated 100 times speed=8477 bytes/sec  elased: 3007.81 ms



rs-232 чтение данных с контроллера atmega168 16MHz = UART 2000000 baud => FT232RL = USB => в программу ubuntu x86_64
Код: Выделить всёРазвернуть
package size @ 1 bytes, latency: 2.03 ms average, 3.54 ms maximum, repeated 100 times speed=492 bytes/sec  elased: 202.90 ms
package size @ 2 bytes, latency: 2.01 ms average, 3.47 ms maximum, repeated 100 times speed=995 bytes/sec  elased: 200.86 ms
package size @ 12 bytes, latency: 2.02 ms average, 3.01 ms maximum, repeated 100 times speed=5944 bytes/sec  elased: 201.86 ms
package size @ 30 bytes, latency: 2.01 ms average, 2.57 ms maximum, repeated 100 times speed=14933 bytes/sec  elased: 200.89 ms
package size @ 62 bytes, latency: 2.11 ms average, 11.90 ms maximum, repeated 100 times speed=29397 bytes/sec  elased: 210.91 ms
package size @ 71 bytes, latency: 2.02 ms average, 2.59 ms maximum, repeated 100 times speed=35164 bytes/sec  elased: 201.91 ms
package size @ 128 bytes, latency: 3.03 ms average, 4.76 ms maximum, repeated 100 times speed=42152 bytes/sec  elased: 303.66 ms
error reading result, r=0


rs-232 чтение данных с контроллера atmega168 16MHz = UART 1000000 baud => FT232RL = USB => в программу ubuntu x86_64
Код: Выделить всёРазвернуть
package size @ 1 bytes, latency: 2.07 ms average, 9.69 ms maximum, repeated 100 times speed=483 bytes/sec  elased: 206.98 ms
package size @ 2 bytes, latency: 2.07 ms average, 7.48 ms maximum, repeated 100 times speed=967 bytes/sec  elased: 206.75 ms
package size @ 12 bytes, latency: 2.10 ms average, 11.50 ms maximum, repeated 100 times speed=5718 bytes/sec  elased: 209.83 ms
package size @ 30 bytes, latency: 2.09 ms average, 9.55 ms maximum, repeated 100 times speed=14363 bytes/sec  elased: 208.87 ms
package size @ 62 bytes, latency: 2.03 ms average, 3.12 ms maximum, repeated 100 times speed=30550 bytes/sec  elased: 202.94 ms
package size @ 71 bytes, latency: 2.05 ms average, 3.54 ms maximum, repeated 100 times speed=34656 bytes/sec  elased: 204.87 ms
package size @ 128 bytes, latency: 3.02 ms average, 4.49 ms maximum, repeated 100 times speed=42394 bytes/sec  elased: 301.93 ms
package size @ 255 bytes, latency: 4.12 ms average, 14.60 ms maximum, repeated 100 times speed=61908 bytes/sec  elased: 411.90 ms



rs-232 чтение данных с контроллера atmega168 16MHz = UART 115200 baud => FT232RL = USB => в программу ubuntu x86_64 таблица увеличена
Код: Выделить всёРазвернуть
package size @ 1 bytes, latency: 2.09 ms average, 5.42 ms maximum, repeated 100 times speed=478 bytes/sec  elased: 209.07 ms
package size @ 2 bytes, latency: 2.06 ms average, 5.28 ms maximum, repeated 100 times speed=971 bytes/sec  elased: 205.88 ms
package size @ 12 bytes, latency: 3.01 ms average, 3.97 ms maximum, repeated 100 times speed=3987 bytes/sec  elased: 300.95 ms
package size @ 30 bytes, latency: 5.10 ms average, 11.35 ms maximum, repeated 100 times speed=5884 bytes/sec  elased: 509.82 ms
package size @ 62 bytes, latency: 7.14 ms average, 13.39 ms maximum, repeated 100 times speed=8684 bytes/sec  elased: 713.92 ms
package size @ 71 bytes, latency: 8.06 ms average, 10.04 ms maximum, repeated 100 times speed=8810 bytes/sec  elased: 805.82 ms
package size @ 128 bytes, latency: 13.07 ms average, 16.58 ms maximum, repeated 100 times speed=9794 bytes/sec  elased: 1306.92 ms
package size @ 255 bytes, latency: 24.04 ms average, 25.82 ms maximum, repeated 100 times speed=10603 bytes/sec  elased: 2404.83 ms
package size @ 500 bytes, latency: 45.06 ms average, 45.81 ms maximum, repeated 100 times speed=11094 bytes/sec  elased: 4506.69 ms
package size @ 1000 bytes, latency: 89.08 ms average, 96.40 ms maximum, repeated 100 times speed=11224 bytes/sec  elased: 8908.81 ms
package size @ 2000 bytes, latency: 175.09 ms average, 176.24 ms maximum, repeated 100 times speed=11422 bytes/sec  elased: 17510.07 ms
package size @ 4000 bytes, latency: 349.00 ms average, 350.48 ms maximum, repeated 100 times speed=11461 bytes/sec  elased: 34900.62 ms
package size @ 8000 bytes, latency: 695.05 ms average, 696.92 ms maximum, repeated 100 times speed=11509 bytes/sec  elased: 69506.39 ms


Выводы: (Поправьте меня если я ошибаюсь)
1) Видно что в i2c большие задержки в самом протоколе, перед передачей каждого пакета происходит подключение к устройству, отправляется стартовый сигнал + адрес контроллера+ регистр который читаем.
с увеличением размера пакета , отношение полезныех даннын к служебным увеличивается поэтому скорость возрастает,
но всё равно сильно проигрывает uart, но имеет хорошее приемущество ввиде встроенной адрессации усстройств и регистров в устройствах.

2) С последовательным портом тоже не всё гладко, при маленьком размере пакета (или иначе говоря, при резмере пакетов не кратным размеру буфера в драйвере ОС), сильно прыгает задержка между передачами пакетов, хотя они передаются непрерывным потоком.
Так же отсутствует адрессация регистров в устройстве, т.е. нужен дополнительные протокол который возьмёт на себя работу по управлению данными внутри потока.

Дополнение:
Скорость последовательного интерфейса на STM32F103 72Mhz usb CDC (ChibiOS/RT Virtual COM Port)
OR-STM32-DS =>USB => в программу ubuntu x86_64
Код: Выделить всёРазвернуть
package size @ 1 bytes, latency: 2.00 ms average, 2.36 ms maximum, repeated 100 times speed=500 bytes/sec  errors: 0  elased: 199.87 ms
package size @ 2 bytes, latency: 2.00 ms average, 2.51 ms maximum, repeated 100 times speed=1001 bytes/sec  errors: 0  elased: 199.78 ms
package size @ 12 bytes, latency: 2.06 ms average, 6.08 ms maximum, repeated 100 times speed=5814 bytes/sec  errors: 0  elased: 206.37 ms
package size @ 30 bytes, latency: 1.99 ms average, 2.97 ms maximum, repeated 100 times speed=15052 bytes/sec  errors: 0  elased: 199.30 ms
package size @ 62 bytes, latency: 2.01 ms average, 3.99 ms maximum, repeated 100 times speed=30866 bytes/sec  errors: 0  elased: 200.86 ms
package size @ 64 bytes, latency: 2.01 ms average, 4.06 ms maximum, repeated 100 times speed=31862 bytes/sec  errors: 0  elased: 200.86 ms


OR-STM32-DS =>USB =>USB HUB JET.A => в программу ubuntu x86_64

Код: Выделить всёРазвернуть
package size @ 1 bytes, latency: 0.26 ms average, 0.77 ms maximum, repeated 100 times speed=3857 bytes/sec  errors: 0  elased: 25.93 ms
package size @ 2 bytes, latency: 0.37 ms average, 5.94 ms maximum, repeated 100 times speed=5342 bytes/sec  errors: 4  elased: 37.44 ms
package size @ 12 bytes, latency: 0.29 ms average, 3.21 ms maximum, repeated 100 times speed=40607 bytes/sec  errors: 4  elased: 29.55 ms
package size @ 30 bytes, latency: 0.33 ms average, 5.10 ms maximum, repeated 100 times speed=90620 bytes/sec  errors: 34  elased: 33.10 ms
package size @ 62 bytes, latency: 0.56 ms average, 18.62 ms maximum, repeated 100 times speed=110011 bytes/sec  errors: 2  elased: 56.36 ms
package size @ 64 bytes, latency: 0.48 ms average, 7.01 ms maximum, repeated 100 times speed=133980 bytes/sec  errors: 12  elased: 47.77 ms


Видно, что если подключить черз хаб скорость передачи возрастает но появляются ошибки.
Видимо в хабе есть буфер, поэтому он быстро принимает данные от компа, и быстро передаёт обратно, видимо на скорости USB 2.0 full speed, к сожалению тестовая программа не ведёт учёт очерёдности данных.
Я добавил простую проверку на количество принятых байт, но и это не гарантия, хотя даже с такой простой проверкой видно что связь не стабильная.

Так же видно что не важно будь то FT232RL или нативная поддержка USB в контроллере, минимальная задержка 2ms поэтому скорость обмена можно увеличивать только за счёт больших транзакции.
Последний раз редактировалось linvinus 17 сен 2011, 23:27, всего редактировалось 13 раз(а).

Re: latency/speed test проверка скорости

setar » 27 май 2011, 14:22

мне кажется проблема надумана.
ибо
в своих разработках конструктор упирается не в производительность шины а в эффективность реализации потока управления

другими словами мерять скорость бессмысленно, у всех будет своя реализация и своя эффективность загрузки канала

Re: latency/speed test проверка скорости

linvinus » 27 май 2011, 15:01

Согласен про потоки, но сначала встаёт вопрос как связать контроллеры между собой, и для начала хотелось бы иметь цифры для идеальных условий.
Имея цифры /размер пакета/задержка/скорость/производительность контроллера/ можно прикинуть какая шина подходит а какая нет.
Понятно что если за спиной есть опыт использования разных шин то подобного вопроса не будет.
Речь о новичках, тех кто первый раз связывает контроллеры и при этом пытается решить свою задачу.
Т.е нужно собрать таблицы с четырьмя цифрами и разными вариантами скоростей.

Добавлено спустя 3 минуты 37 секунд:
Что касается надуманности.
Если задача простая, типа передачи управляющих команд, то скорости мало интересуют.
А если нужно связать три контроллера причём в каждом по pid регулятору, один главный управляет другими + управляющие команды?
Тут вопрос скорости и задержек очень важен.

Добавлено спустя 2 минуты 58 секунд:
И к сожалению универсального решения нет.
Типа вкладывай бабки и будет счастье.

Re: latency/speed test проверка скорости

linvinus » 27 май 2011, 22:50

Добавил тесты.

Re: latency/speed test проверка скорости

linvinus » 17 авг 2011, 13:38

Полезные данные это непосредственно изменение переменных внутри контроллера.
Организовано так:
массив unsigned char data[254];
полезные данные это элементы этого массива, I2c имеет поддержку записи большого объёма начиная с определённого адреса,
т.е. можно сказать пишем в 0 элемент (адрес в массиве) данные размером 254 байта. Т.е. Пакет будет состоять из адреса регистра и 254 байт.
при приёме очередного байта указатель в массиве автоматически увеличивается.


Rambler\'s Top100 Mail.ru counter