22 May 2013 18:53
RDM and multicast flow control
Jon Maloy <jon.maloy <at> ericsson.com>
2013-05-22 16:53:20 GMT
2013-05-22 16:53:20 GMT
Erik and I have been discussing how we can find a satisfactory solution to the RDM and
multicast message overload problem.
I now suggest a combination of two related mechanisms, partially based on Erik's original
suggestion to distribute "overload flags" to all distributed publication items when
overload happens.
A:
---
1) When a receiving socket is approaching overflow, e.g. at LOW_IMPORTANCE-level*0.75, it
scans through the receive queue and identifies the senders which are using LOW_IMPORTANCE.
2) Those senders, or if there are too many, those who contribute most of the load (say,
representing 50% of the load combined) will be sent a message of a new type, called
OVERLOAD_WARNING.
3) When a sender socket receives OVERLOAD_WARNING, it has to mark itself as OVERLOADED
and return -EAGAIN on all sendmsg() calls for the given port name until it receives
an OVERLOAD_FINISHED message from the same socket.
4) The receiving socket issues an OVERLOAD_FINISHED to all the warned senders when the
receive queue length goes below e.g. LOW_IMPORTANCE-level/2.
This procedure is repeated for each importance level.
B:
----
5) If the receiving socket queue still surpasses LOW_IMPORTANCE-level, it issues a new broadcast
NAME_DISTR message called NAME_OVERLOADED or similar. This carries information about
which importance level is affected, and the information is stored in each publish element
in the name table pertaining to the receiver in question.
6) A sender who wants to send a LOW_IMPORTANCE message to the socket in question will now
encounter a flag indicating that "LOW_IMPORTANCE is overloaded" during name lookup,
(Continue reading)
RSS Feed