<div>Hi,</div><div> </div><div>I am developing LLDB(low latency database) which replicates transactional log from a master to multiple slaves.</div><div>Using zeromq, I am pretty much satisfied with it except it drops messages when I send 4 million messages / sec.</div>
<div> </div><div>The pattern I use :</div><div>PUB - SUB.</div><div>I have 1 PUB, and 1 SUB process in my test.</div><div> </div><div>The test environment :</div><div>4 core, 8 GB ram, windows 7 x64.</div><div> </div><div>
Compilation :</div><div>Release Mode, compilation done with Visual C++ 2010 express.</div><div> </div><div>What PUB does :</div><div>Pub sends 4 million messages per second to SUB.</div><div> </div><div>What SUB does :</div>
<div>Sub should receive 4 million messages per second but, after receiving about 50K messages, exactly 32768 messages are dropped.</div><div>I am checking with a sequence number assigned by PUB. it starts from 1, increases monotonously without any hole nor dup.</div>
<div> </div><div>ZMQ_HWM :</div><div>Both PUB and SUB uses the default value 0 (unlimitted). I double checked it with getsockopt.</div><div> </div><div>Questions :</div><div>When PUB sends huge amount of messages such as 4 million messages per second, can messages be dropped even though ZMQ_HWM is set to 0? </div>
<div>I made sure that only half of 8GB RAM was used by the system when messages are dropped, so I am assuming this is not about out of memory exceptional case.</div><div> </div><div>In which case ZMQ drops exactly 32768 messages? I see sequence number in SUB is changging for example, from 50000 to  82768(50000+32768).</div>
<div> </div><div>Is there any log that I can check who dropped messages(PUB? SUB?) and why it was dropped?</div><div> </div><div>Thanks,</div><div>Kangmo</div>