> > I'm looking at a network where the number of endpoints is large enough that > > everybody can't have a credit to start with, and the "offender" isn't any > > single process, but rather a combination of processes doing N-to-1 where N > > is sufficiently large. I can't just tell one process to slow down. I have > > to tell them all to slow down and do it quickly... > > When you have N->1 patterns, then the hardware flow-control will > throttle the senders, or drop packets if there is no hardware > flow-control. If you don't have HOL blocking but the receiver does not > consume for any reasons (busy, sleeping, dead, whatever), then you can > still drop packets on the receiver (NIC, driver, thread) at a last > resort, this is what TCP does. The key is have exponential backoff (or a > reasonably large resend timeout) to no continue the hammering. > > It costs nothing in the common case (unlike the credits approach), but > it does handle corner cases without affecting too much other nodes > (unlike hardware flow-control).
Right. For a sufficiently large number of endpoints, flow control has to get pushed out of MPI and down into the network, which is why I don't necesarily want an MPI that does flow control at the user-level. > > But you know all that. You are just being mean to your users because you > can :-) The sick part is that I think I envy you... You know it :) -Ron