2009-11-03 2 views
4

Я пробовал использовать систему под названием ROS (http://www.ros.org) для некоторой работы.Много портов с небольшим количеством данных или один порт с большим количеством данных?

Существует множество различных типов данных, которые отправляются между сетевыми узлами в ROS. Вы определяете структуру данных, которую вы хотите отправить в сообщении, и ROS будет обрабатывать открытие определенного порта между двумя узлами, которые будут отправлять эту структуру данных только.

Так что, если есть 5 разных сообщений, будет 5 разных портов.

В отличие от этого сценария, я видел другие платформы, которые просто толкают все разные сообщения через один порт. Это означает, что должно быть какое-то мультиплексирование/демультиплексирование (выполняется путем какого-либо разбора сообщений на конце приемников).

Что мне интересно ... что лучше с точки зрения производительности?

Быстро ли работают операционные системы на основе портов, так что системе, такой как ROS, не нужно делать слишком много работы, чтобы разобраться в том, что есть в сообщении, и интерпретировать его?

ИЛИ

открывает множество портов будет означать много медленных вызовы ядра, а стоимость того, чтобы разработать и перевести типы сообщений в конечном итоге больше, то время, потраченное переключение между портами?

Когда это масштабируется для большого количества данных с высокой скоростью и множеством различных типов сообщений, будет много портов. Поэтому я предполагаю, что при масштабировании каждой из этих топологий производительность будет значительным фактором при выборе способа работы.

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

ROS, являющийся архитектурой для роботов, может иметь один узел для каждого датчика и исполнительного механизма, поэтому, в зависимости от сложности вашей системы, мы можем говорить о 20-30 узлах, которые толкают данные малого размера (100 байт или около того) между 10- 100Hz

ответ

1

Это зависит. Я не знаю специфику ROS, но в сети сводится к следующим ограничениям:

  • Расстояние: скорость света быстро, но на расстоянии она начинает делать разницу

  • Протокол Overhead: ориентированный на соединение против соединения менее

на стороне OS, поддерживая список свободных портов не такое большое накладных расходов - конечно, есть затраты на него но всего относительная : если вы говорите о распределенной системе с длинными линиями связи, то легко утверждать, что циклический переход через сетевые порты ОС по сравнению с управлением качеством связи имеет меньшее значение.

Без более конкретного вопроса я остановлюсь здесь.

+0

спасибо jldupont, я уточню вопрос более подробно. Я не рассматривал проблему на этом уровне – Fuzz

1

У меня нет данных об этом, но представляется правдоподобным, что несколько портов могут обрабатываться более эффективно многоядерными системами, в отличие от демультиплексирования внутри программы.

+0

Я бы тоже хотел подумать, что это тоже так ... но кто знает, как справиться с базовыми операционными системами – Fuzz