LINUX.ORG.RU

ZeroMQ & reliable multicast

 ,


1

3

Кому-нибудь удавалось заставить сабж работать на оффтопике (или даже на онтопике)? Уперся в проблему, что на гигабитном эзернете оно ни в какую не хочет отдавать данные быстрее 9-10 мегабит в секунду. Шлю сообщения размером 1 мегабайт, ZMQ_RATE выставляю в ту скорость, с которой приложение, собственно, генерирует данные. Если эта скорость меньше 10 мегабит, то всё худо-бедно работает (правда, тоже откуда-то берутся NAK'и в больших количествах). Если выставить, скажем, 50 мегабит в секунду, то сообщения тупо становятся в очередь и выдаются с вышеупомянутой скоростью 9-10 мегабит в секунду. Кроме этого есть и другие чудеса. Например, если в контексте сделать штук 20 потоков ввода-вывода, то сообщения вообще перестают отправляться (при этом в очередь они становятся). Если ZMQ_RATE сделать 100 килобит в секунду, то сообщения уходят со скоростью 300 килобит в секунду. При этом в логе openpgm видно, что скорость сокету выставляется правильно. Версия zeromq 4.1.0 самосборная с libopenpgm последней стабильной версии с офсайта. Тесты проходят, по tcp работает нормально (за исключением случаев когда работа происходит вместе с epgm).

Тестовый код: https://github.com/briskycat/ZMQLoadTest

★★★★★

Последнее исправление: asaw (всего исправлений: 1)

Ответ на: комментарий от Sorcerer

Да, пробовал и ZMQ_SNDBUF увеличивать (он, правда, не особенно то и увеличивается), и ZMQ_SNDHWM уменьшать (увеличивать нет смысла - оно и так 1000 по умолчанию) - разницы в поведении не заметно. Но не понятно как вообще это может помочь. Особенно напрягает зависимость поведения от числа I/O-потоков и то, что даже при 100 килобитах в секунду не наблюдается стабильной работы...

asaw ★★★★★
() автор топика
Ответ на: комментарий от Sorcerer

Да тоже шевелил - безрезультатно. Сейчас сделал две тестовые программки: одна тупо шлет сообщения заданного размера, вторая их тупо принимает. В каждой только по одному мультикастному сокету (PUB и SUB соответственно). Так вот в такой конфигурации поведение уже не зависит от числа потоков ввода-вывода - всё отсылается даже при 20 потоках. Чудеса просто... Но потолок в 10 мегабит никуда не делся. Сейчас попробую подкрутить оффтопик https://support.microsoft.com/en-us/kb/948066

asaw ★★★★★
() автор топика
Ответ на: комментарий от Sorcerer

Ну приблизительно. Я, правда, не совсем под онтопиком пробовал - под макосью, причем на вайфае, поэтому ~10 мегабит в этом случае вполне нормально... Собственно, поэтому и тема)

asaw ★★★★★
() автор топика
Последнее исправление: asaw (всего исправлений: 1)
Ответ на: комментарий от Sorcerer

Полностью ни один не загружен, даже до половины не доходит. Вот как-то примерно так оно выглядит. Можно видеть, что загрузка сетки не превышает 10 мегабит в секунду (1%).

PS. Сейчас сделаю тестовые программки отдельным проектом и скину ссылку.

asaw ★★★★★
() автор топика
Ответ на: комментарий от anonymous

ZeroMQ мертв. Он него сам создатель отказался и написал nanomsg (а потом и от nanomsg отказался).

... и что написал вместо nanomsg?

Sorcerer ★★★★★
()
Ответ на: комментарий от anonymous

а потом и от nanomsg отказался

Откуда инфа? можно ссылочку? Я вроде за блогом Сустрика слежу, а такого не слышал. A то я хотел тут nanomsg воткнуть в один проект...

Oxdeadbeef ★★★
()
Ответ на: комментарий от anonymous

Спасибо за ссылку! Но, как я понял, он не отказался, а только думает отказаться.

Sorcerer ★★★★★
()
Ответ на: комментарий от anonymous

ZeroMQ мертв. Он него сам создатель отказался и написал nanomsg (а потом и от nanomsg отказался).

Ну, судя по reliable multicast транспортам, ты не очень далек от истины. В 4.1 они прикрутили NORM, но как они его прикрутили? Это просто кто-то свалил туда что-то вроде дипломной работы и забыл навсегда. Сообщения длиннее ~1000 (или 1400 - похоже, завязано на MTU) байт оно не отправляет в принципе, по крайней мере на макоси, а на винде оно просто никогда в жизни не соберется без серьезного переписывания кода. Потому что автор с чего-то решил, что тот хэндл, который ему возвращает библиотека NORM, это всегда пара файловых дескрипторов сокетов (для чтения и записи), но на самом деле в варианте для винды это хэндл виндового Event'а, на который никакой select, который в недрах ZMQ обрабатывает все подобные хэндлы, работать никогда не будет. Он и не работает, если не переписать соответствующую логику уже в самом NORM. Честно говоря, такой разницы между тем, что о ZeroMQ пишут и тем, что он представляет из себя в реальности, я никогда не видел. Автор проекта, наверное, профессиональный рекламщик или маркетолог. Но лучше бы он был менеджером.

А по теме: http://zeromq.org/intro:ask-for-help

Да это понятно. Придется туда писать. Просто до того хотел посоветоваться здесь - может, я не понимаю чего-то основного в этом ZeroMQ?

asaw ★★★★★
() автор топика

Во, вылез и на этом тесте баг с несколькими I/O потоками. Запустил с -W20 (20 потоков) и оставил наподолшьше. Результат: 1, 2

asaw ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.