Hi everybody,
following to some discussions / requests from users, openser devel branch has now core support for timers will resolution less than a second. It uses time functions that can give a microsecond accuracy, but for performance reasons, the utimer (microtimer) uses a ticking period of 100 milliseconds. Of course, this can be changed at compile time.
First "beneficiary" of this timer, is TM, to gain more accuracy for retransmissions: * retransmission timers use the the core utimer (with microsecond resolution), having 100 milliseconds intervals. * this will increase the retransmissions precision to an error of maximum 100 milliseconds. * T1 (first retransmission) is done at 500 milliseconds (instead of 1 sec), as the RFC3261 suggests. * T1 and T2 (see RFC3261) can be configured via module parameters - the inter-steps are automatically computed on startup based on the RFC3261 specifications.
Along with increasing the timer accuracy, the TM timer lists were improved for faster operations: * faster timers lists - use shortcut pointers (based on timeout values) for faster walking through the list -> faster insert and expire * for elements to be deleted from the timer lists, do not overwrite the timeout value as this will trigger more processing when inserting new elements into the list
The performance tests are not completed - I need more machines to stress the proxy :D -, but I will come back with results during the testing phase.
regards, bogdan