I didn't know that you only have Linux... therefore I have rewritten the
WeatherUpdate demo of the Guide to show the behavior. It sends 1000
messages via PUB/SUB and the Sleeptime adds a sleep after each send. This
results in the following times:
Average sending time in iteration 0, messages 0- 10 [ms]: 1
Average sending time in iteration 1, messages 10- 20 [ms]: 0
Average sending time in iteration 2, messages 20- 30 [ms]: 1
Average sending time in iteration 3, messages 30- 40 [ms]: 0
Average sending time in iteration 4, messages 40- 50 [ms]: 0
Average sending time in iteration 5, messages 50- 60 [ms]: 1
Average sending time in iteration 6, messages 60- 70 [ms]: 0
Average sending time in iteration 7, messages 70- 80 [ms]: 1
Average sending time in iteration 8, messages 80- 90 [ms]: 0
Average sending time in iteration 9, messages 90- 100 [ms]: 3
Average sending time in iteration 10, messages 100- 110 [ms]: 5
Average sending time in iteration 11, messages 110- 120 [ms]: 5
Average sending time in iteration 12, messages 120- 130 [ms]: 5
Average sending time in iteration 13, messages 130- 140 [ms]: 5
Average sending time in iteration 14, messages 140- 150 [ms]: 6
Average sending time in iteration 15, messages 150- 160 [ms]: 5
Average sending time in iteration 16, messages 160- 170 [ms]: 6
Average sending time in iteration 17, messages 170- 180 [ms]: 5
Average sending time in iteration 18, messages 180- 190 [ms]: 6
Average sending time in iteration 19, messages 190- 200 [ms]: 5
Average sending time in iteration 20, messages 200- 210 [ms]: 6
Average sending time in iteration 21, messages 210- 220 [ms]: 5
Average sending time in iteration 22, messages 220- 230 [ms]: 7
Average sending time in iteration 23, messages 230- 240 [ms]: 7
Average sending time in iteration 24, messages 240- 250 [ms]: 11
Average sending time in iteration 25, messages 250- 260 [ms]: 10
Average sending time in iteration 26, messages 260- 270 [ms]: 10
Average sending time in iteration 27, messages 270- 280 [ms]: 10
Average sending time in iteration 28, messages 280- 290 [ms]: 10
Average sending time in iteration 29, messages 290- 300 [ms]: 10
Average sending time in iteration 30, messages 300- 310 [ms]: 10
Average sending time in iteration 31, messages 310- 320 [ms]: 10
Average sending time in iteration 32, messages 320- 330 [ms]: 11
Average sending time in iteration 33, messages 330- 340 [ms]: 10
Average sending time in iteration 34, messages 340- 350 [ms]: 11
Average sending time in iteration 35, messages 350- 360 [ms]: 13
Average sending time in iteration 36, messages 360- 370 [ms]: 14
Average sending time in iteration 37, messages 370- 380 [ms]: 15
Average sending time in iteration 38, messages 380- 390 [ms]: 15
Average sending time in iteration 39, messages 390- 400 [ms]: 15
Average sending time in iteration 40, messages 400- 410 [ms]: 15
Average sending time in iteration 41, messages 410- 420 [ms]: 16
Average sending time in iteration 42, messages 420- 430 [ms]: 15
Average sending time in iteration 43, messages 430- 440 [ms]: 16
Average sending time in iteration 44, messages 440- 450 [ms]: 15
Average sending time in iteration 45, messages 450- 460 [ms]: 16
Average sending time in iteration 46, messages 460- 470 [ms]: 16
Average sending time in iteration 47, messages 470- 480 [ms]: 17
Average sending time in iteration 48, messages 480- 490 [ms]: 19
Average sending time in iteration 49, messages 490- 500 [ms]: 20
Average sending time in iteration 50, messages 500- 510 [ms]: 20
Average sending time in iteration 51, messages 510- 520 [ms]: 3
Average sending time in iteration 52, messages 520- 530 [ms]: 0
Average sending time in iteration 53, messages 530- 540 [ms]: 0
Average sending time in iteration 54, messages 540- 550 [ms]: 0
Average sending time in iteration 55, messages 550- 560 [ms]: 0
Average sending time in iteration 56, messages 560- 570 [ms]: 0
Average sending time in iteration 57, messages 570- 580 [ms]: 0
Average sending time in iteration 58, messages 580- 590 [ms]: 0
Average sending time in iteration 59, messages 590- 600 [ms]: 0
Average sending time in iteration 60, messages 600- 610 [ms]: 0
Average sending time in iteration 61, messages 610- 620 [ms]: 0
Average sending time in iteration 62, messages 620- 630 [ms]: 0
Average sending time in iteration 63, messages 630- 640 [ms]: 0
Average sending time in iteration 64, messages 640- 650 [ms]: 0
Average sending time in iteration 65, messages 650- 660 [ms]: 0
Average sending time in iteration 66, messages 660- 670 [ms]: 0
There is a latency ramp from message 90 on up to message 510. After 510,
the latency is smaller. I had to measure 10 messages together because of
the timer accuracy of 1 ms to get measurable results.
To test this on linux, you just need to modify the lines
_beginthread( StartSubscriber, 0, context );
and
#include <process.h>
Ihope this helps to reproduce the issue.
#include "stdafx.h"
#include "zhelpers.h"
#include <process.h>
void StartSubscriber(void* context)
{
void* subscriber = zmq_socket (context, ZMQ_SUB);
int rc = zmq_connect (subscriber, "inproc://weather");
assert (rc == 0);
// Subscribe to zipcode, default is NYC, 10001
char *filter = "10001";
rc = zmq_setsockopt (subscriber, ZMQ_SUBSCRIBE, filter, strlen
(filter));
assert (rc == 0);
// Process 1000 updates
int update_nbr;
long total_temp = 0;
for (update_nbr = 0; update_nbr < 1000; update_nbr++) {
char *string = s_recv (subscriber);
int zipcode, temperature, relhumidity;
sscanf (string, "%d %d %d",&zipcode, &temperature, &relhumidity);
total_temp += temperature;
free (string);
}
printf ("Average temperature for zipcode '%s' was %dF\n", filter, (int
) (total_temp / update_nbr));
zmq_close (subscriber);
}
int _tmain(int argc, _TCHAR* argv[])
{
// Prepare our context and publisher
void *context = zmq_ctx_new ();
void *publisher = zmq_socket (context, ZMQ_PUB);
int rc = zmq_bind (publisher, "inproc://weather");
assert (rc == 0);
_beginthread( StartSubscriber, 0, context );
s_sleep(1000);
int64_t start=0;
int64_t stop=0;
int Sleeptime = 10;
for(int it=0; it<100; it++)
{
char update [20];
sprintf (update, "%05d %d %d", 10001, 2, 3);
start = s_clock();
for(int i=0; i<10; i++)
{
s_send (publisher, update);
s_sleep(Sleeptime);
}
stop = s_clock();
printf ("Average sending time in iteration %4d, messages %4d-%4d
[ms]: %3d\n", it, it*10, it*10+10 , stop-start-10*Sleeptime);
}
s_sleep(1000);
zmq_close (publisher);
zmq_ctx_destroy (context);
return 0;
}
Von: Pieter Hintjens <[email protected]>
An: ZeroMQ development list <[email protected]>,
Datum: 12.10.2015 15:04
Betreff: Re: [zeromq-dev] Bad ZMQ latency on first 500 messages per
connection
Gesendet von: [email protected]
On Mon, Oct 12, 2015 at 2:47 PM, <[email protected]>
wrote:
> We have sent you the C source code in the last message as asked. Could
you
> reproduce the issues?
That source code requires Windows. Also, it is not minimal (700 lines
of code). If you want us to port it to Linux and try to reproduce the
case, that will take time and we'd expect to invoice the work.
-
Pieter Hintjens
iMatix
_______________________________________________
zeromq-dev mailing list
[email protected]
http://lists.zeromq.org/mailman/listinfo/zeromq-dev
_______________________________________________
zeromq-dev mailing list
[email protected]
http://lists.zeromq.org/mailman/listinfo/zeromq-dev