Hi Jérémy,
On Mon, 28 Dec 2009, Jérémy Zurcher wrote:
here are the latest results of my efforts to provide H2 with a faster
logging system.
any comments welcomed.
I've looked this over a couple times. I wanted to play with
it in more detail... but stomach bugs has hit our house!
It looks fine, except that your ring buffer is locked with a
mutex while writing to the buffer. This results in a
priority inversion. Consider:
1. Low-priority thread calls log(). Mutex gets
lost while string is processed.
2. Right after this, a high-priority audio thread
calls log(). It will wait until the mutex is
unlocked before continuing.
In the US, we call this "a dollar waiting on a dime." It
effectively lowers the priority of the audio thread. This,
again, becomes a real-time violation.
Ideas to overcome this:
* Create a lock-free ringbuffer for each thread
using thread-local storage.
* Create a pool of lock-free ringbuffers (e.g. 5...
since Hydrogen typically has 4-5 threads). Use
atomic integer operations to assign the buffer
to use in log(). If all of them are being used,
drop the messages.
* Change the semantics of the lock-free ringbuffer
to have separate steps for reserving space and
then declaring that all writing is complete.
For example:
RingBufferClass rb;
char msg[] = "Some string....";
int len = strnlen(msg, 140);
char *pos = rb.reserve(len); // Reserve 'len' chars,
// located at pos
strncpy(pos, msg, len); // Write data directly
rb.written(pos, len); // Notify that data is
// written
I'm pretty sure that these 'reserve' and 'written'
operations can be done with some simple atomic
operations.
Hope this helps!
-gabriel------------------------------------------------------------------------------
This SF.Net email is sponsored by the Verizon Developer Community
Take advantage of Verizon's best-in-class app development support
A streamlined, 14 day to market process makes app distribution fast and easy
Join now and get one step closer to millions of Verizon customers
http://p.sf.net/sfu/verizon-dev2dev
_______________________________________________
Hydrogen-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/hydrogen-devel