[reSIProcate] throughput restriction in UdpTransport and MacOS logging
Alan Hawrylyshen
alan at polyphase.ca
Sat Jun 3 21:44:10 CDT 2006
On 2006.06.03, at 15:00 , Bruce Lowekamp wrote:
> In UdpTransport::process() the code seems to be restricted to handling
> one incoming message and one outgoing message per call:
> if (mTxFifo.messageAvailable() && fdset.readyToWrite(mFd))
> ...
> if ( fdset.readyToRead(mFd) )
>
> any reason those shouldn't be while (foo) to process messages a bit
> faster? I made the change in my version and it seems to work fine,
> and solves a problem we were having with excessive retransmits.
>
>
My concern here is that you could cause starvation; denying the other
threads (or sections) of the stack their slice of time.
If you do process more than a single message, it MUST be bounded so
it will exit after a finite amount of time, even in the presence of
excessive UDP load.
>
> The other question is in rutil/Log:tags the part that outputs the tags
> for MacOs calls time() directly rather than timestamp:
> #if defined( __APPLE__ )
> strm << mDescriptions[level+1] << Log::delim
> << time(0) << Log::delim
> << mAppName << Log::delim
> << subsystem << Log::delim
> << pfile << ":" << line;
> #else
>
> I changed it to just call timestamp() so it produces the same logging
> info as the other platforms (useful when trying to track down timing
> issues on retransmit problems...)
That's a good fix, thanks!
Alan
More information about the resiprocate-devel
mailing list