-
Notifications
You must be signed in to change notification settings - Fork 44
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
suddenly receive nothing when i use zeromq with openpgm in windows #56
Comments
On Windows you have to use larger packet sizes and significantly less packet count. Jumbograms and less than 10,000 packets per second and you will be able to saturate gigabit ethernet. ZeroMQ does not utilize all OpenPGM socket options currently. Jumbogram means setting PGM_MTU to larger than 1,500 bytes, e.g. 64KB. |
Thank you for your reply. I have another question, that is, the MTU cannot be so large in the network. If the PGM_MTU is set to be large, can it be transmitted between routers? Will it be directly truncated? |
When the MTU is large, routers will fragment the packets. It is not recommended to do this as the recovery mechanism is for the PGM packet, not the individual fragments. |
If the work of fragmentation is the responsibility of the ip layer. So what is the meaning of setting PGM_MTU to 64KB? Can it be understood that if PGM_MTU is set to 1472, then when I send more than 1472 bytes of data, OPENPGM is responsible for fragmentation?or just reject to send. |
The goal with 64KB MTU is for maximum local LAN performance, especially for Windows hosts that have below-par UDP performance. You are highly unlikely to saturate a 1GbE on Windows otherwise, unfortunately. PGM has the concepts of APDU, a large buffer fragmented and managed by the protocol itself. To use this, just send a large buffer to the API. |
I use zeromq pub/sub pattern with epgm in windows and vs2015.
my pub code
my sub code
Everything went smoothly until the message the receiver received became the wrong message and stopped receiving the message for a short time.
I tried to find out what went wrong and the result is in this pgm_receiver.cpp.
errno == EBUSY
in pgm_socket.cpp
···
ssize_t zmq::pgm_socket_t::receive (void **raw_data_, const pgm_tsi_t **tsi_){
}
···
seem like pgm_recvmsgv always return PGM_IO_STATUS_TIMER_PENDING. and i don`t know why.What does this error mean?
When I lowered my sending speed, the time when such an error obviously appeared was delayed. For example, sending 20,000 messages can last for several hours per second. When I slow down to 1000 messages per second, there is no error for at least a few days (perhaps not wrong).
Is my sending speed too fast? or in windows, openpgm can not be used like this? So is there any good way to achieve high throughput in multicast situations?
The text was updated successfully, but these errors were encountered: